2024. 7. 4. 23:37ใTIL
๐ก IoC, DI ๋?
- NestJS๋ ๋ชจ๋๋ฌ ์ํคํ ์ฒ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ฑํํ์ฌ IoC(Inversion of Control)์ DI(Dependency Injection)๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค. IoC์ DI๋ NestJS์ ํต์ฌ ์๋ฆฌ ์ค ํ๋์ด๋ค.
• IoC (Inversion of Control)
IoC๋ Inversion of Control์ ์ค๋ง๋ก์ ์ ์ด ์ญ์ ์ด๋ผ๊ณ ๋ ํ๋ค.
์ ์ด์ ์ญ์ ์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๋ฆฌ ๋ฐ ๊ทธ๋ค์ ์ข ์์ฑ์ ํ๋ ์์ํฌ๋ ์ปจํ ์ด๋๊ฐ ๋์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๋์์ธ ํจํด์ด๋ค. NestJS์์๋ IoC ์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ข ์์ฑ์ ์ฃผ์ ํ๋ค.
( ๊ฐ์ฒด์ ๊ด๋ฆฌ๋ฅผ ์ปจํ ์ด๋๊ฐ ํ๊ธฐ๋๋ฌธ์ ์ ์ด๊ถ์ด ๋์ด๊ฐ์ ์ ์ด ์ญ์ ์ด๋ผ ํ๋ค.)
• DI (Dependency Injection)
DI, ๋๋ ์์กด์ฑ ์ฃผ์ ์ ๊ฐ์ฒด๊ฐ ๊ทธ๋ค์ ์ข ์์ฑ์ ์ง์ ์์ฑํ๋ ๋์ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ํ ์คํธ ๋ฐ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์๊ฒ ๋๋ค.
constructor(private readonly appService: AppService) {}
- AppService๋ฅผ AppController์ ์ฃผ์ ํ๋ ์์์ด๋ค.
• ํ๋ก๋ฐ์ด๋ (Providers)
- ํ๋ก๋ฐ์ด๋๋ NestJS์์ ๊ธฐ๋ณธ์ ์ธ DI ์์คํ ๋จ์๋ก, ํด๋์ค๋ ๊ฐ, ํฉํ ๋ฆฌ ํจ์๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ํด๋์ค๋ ๋ชจ๋์์ ํ์๋ก ํ๋ ์์กด์ฑ์ ์ฃผ์ ํ๋ ์ญํ ์ ํ๋ค.
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
getCats(): string {
return 'All cats!';
}
}
• ๋ชจ๋ (Modules)
- ๋ชจ๋์ ๊ด๋ จ๋ ํ๋ก๋ฐ์ด๋, ์ปจํธ๋กค๋ฌ, ์๋น์ค ๋ฑ์ ๊ทธ๋ฃนํํ๋ ๋จ์๋ก, ๋ชจ๋์ @Module ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ํ๋ค.
import { Module } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CatsController } from './cats.controller';
@Module({
providers: [CatsService],
controllers: [CatsController],
})
export class CatsModule {}
• ์ปจํธ๋กค๋ฌ (Controllers)
- ์ปจํธ๋กค๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๋ ์ญํ ํ๋ฉฐ, ํ์ํ ์๋น์ค๋ ํ๋ก๋ฐ์ด๋๋ฅผ ์์ฑ์ ์ฃผ์ (Constructor Injection)์ ํตํด ์ฃผ์ ๋ฐ๋๋ค.
import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
getCats(): string {
return this.catsService.getCats();
}
}
• NestJS ์ ํ๋ฆฌ์ผ์ด์
- NestJS ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฃจํธ ๋ชจ๋์ ํตํด ์ด๊ธฐํ๋๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๋ชจ๋์ ํฌํจํ๋ ์ต์์ ๋ชจ๋์ด๋ค.
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule {}
- NestJS๋ IoC์ DI๋ฅผ ํตํด ๋ชจ๋ํ๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋ ์ ์ฐํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL ( Injection ) (0) | 2024.07.08 |
---|---|
TIL( NestJS - Passport ) (0) | 2024.07.05 |
TIL (DTO) (0) | 2024.07.03 |
TIL( TypeScript - Utility type ) (0) | 2024.07.02 |
TIL ( ๋ฐ์ฝ๋ ์ดํฐ - ts ) (0) | 2024.07.01 |