클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (514) N
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (301) N
      • C# (84) N
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • asp.net core web api
  • jQuery
  • c#
  • .NET
  • JavaScript
  • CSS3
  • Kotlin
  • android studio
  • asp.net core
  • 변수
  • MariaDB
  • ASP.NET
  • exception
  • Windows API
  • NestJS
  • node.js
  • HTML5
  • Entity Framework
  • LINQ
  • android

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

[nestjs] module과 의존성주입(dependency injection)
Web/NestJS

[nestjs] module과 의존성주입(dependency injection)

2021. 3. 16. 17:24
728x90

이 글은 아래 글에서 이어집니다.

[Server/NestJS] - [nestjs] DTO (Data Transfer Object)

 

[nestjs] DTO (Data Transfer Object)

아래 글은 아래 글에서 이어집니다. [Server/NestJS] - [nestjs] validation [nestjs] validation 아래 내용은 이전 포스팅에서 이어지는 내용입니다. [Server/NestJS] - [nestjs] Service [nestjs] Service nestj..

lab.cliel.com

app.module.ts를 보면 다음과 같이

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SchoolController } from './school/school.controller';
import { SchoolService } from './school/school.service';

@Module({
  imports: [],
  controllers: [AppController, SchoolController],
  providers: [AppService, SchoolService],
})
export class AppModule {}

appModule 하나에 2개의 Controller와 2개의 Service가 붙어 있음을 알 수 있습니다. 권장되지 않는 구조로 appModule은 AppController와 AppService만을 가지고 있어야 합니다.

 

따라서 SchoolController와 SchoolService를 별도의 School모듈을 만들어 분리하고자 합니다. 모듈은 아래 명령을 통해 추가할 수 있습니다.

nest g mo

module의 이름은 school호 하고 다음으로 넘어갑니다.

 

위와 같은 작업을 거치고 나면 school디렉터리에 school.module.ts파일이 생성되며 app.module.ts에도 관련 설정이 추가되어 있는 것을 확인할 수 있습니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SchoolController } from './school/school.controller';
import { SchoolService } from './school/school.service';
import { SchoolModule } from './school/school.module';

@Module({
  imports: [SchoolModule],
  controllers: [AppController, SchoolController],
  providers: [AppService, SchoolService],
})
export class AppModule {}

이제 app.module.ts에서 controller와 providers로 추가된 SchoolController와 SchoolService를 제거합니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SchoolModule } from './school/school.module';

@Module({
  imports: [SchoolModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

그리고 app.module.ts에서 삭제한 내용을 그대로 school.module.ts에 적용합니다.

import { Module } from '@nestjs/common';
import { SchoolController } from './school.controller';
import { SchoolService } from './school.service';

@Module({
    controllers:[SchoolController],
    providers:[SchoolService]
})

export class SchoolModule {}

SchoolController와 SchoolService를 보면 class이름위에 다음과 같은 데코레이터가 존재함을 알 수 있는데

@Injectable()
export class SchoolService {

클래스가 dependency injection이 가능함을 의미하고 school.module.ts에서 @Module 데코레이터에 의해 실제 dependency injection동작이 이루어지고 있음을 알 수 있습니다.

728x90
저작자표시 비영리 변경금지

'Web > NestJS' 카테고리의 다른 글

[nestjs] TypeORM 기존 테이블에서 entity 생성하기  (0) 2021.03.17
[nestjs] spec과 unit testing  (2) 2021.03.17
[nestjs] DTO (Data Transfer Object)  (0) 2021.03.16
[nestjs] validation  (0) 2021.03.16
[nestjs] Service  (0) 2021.03.16
    'Web/NestJS' 카테고리의 다른 글
    • [nestjs] TypeORM 기존 테이블에서 entity 생성하기
    • [nestjs] spec과 unit testing
    • [nestjs] DTO (Data Transfer Object)
    • [nestjs] validation
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바