본문 바로가기

NestJS

Chapter2 - Module 구성

1. Module

  • NestJS에서 Module은 Controller, Service, Entity 등으로 구성되어 하나의 기능과 관련된 것들을 모아 놓은 집합체라고 볼 수 있습니다.
  • NestJS는 일반적으로 실행의 시작점인 root module(App Module)과 필요에 따라 구성된 Module들로 구성됩니다.
  • Class에 @Module이라는 데코레이터를 달아서 표현합니다.

 

  • Module은 nest-cli을 통해 쉽게 생성 할 수 있습니다.
nest g module user

 

 

  • module을 생성하고 나면, user 디렉토리와 user.module.ts가 생성된 것을 확인 할 수 있고, app.module.ts에 자동으로 해당 module이 import 된 것을 확인 할 수 있습니다.

 

2. Controller

  • Controller는 클라이언트로부터 전달받은 요청을 처리하고 응답을 반환하는 역할을 합니다.
  • Class에 @Controller라는 데코레이터를 달아 표현하고, @Get, @Post, @Put을 비롯한 HTTP Method 데코레이터가 표현된 매서드들을 Handler라고 합니다.

 

  • Module과 동일하게 명령어를 통해 controller를 생성할 수 있습니다.
nest g controller user

 

 

  • 명령어를 실행하면 user.controller.ts와 테스트에 사용되는 user.controller.spec.ts가 만들어졌음을 확인 할 수 있습니다.
  • 또한, user.module.ts의 controllers 부분에 user.controller가 추가 된 것을 확인 할 수 있습니다.

 

3. Service

  • 서비스는 주로 비즈니스 로직을 담당합니다.
  • Service는 @Injectable라는 데코레이터를 달아 표현합니다. 해당 데코레이터를 통해 프로젝트 내 어디서든 해당 컴포넌트를 사용할 수 있게 됩니다.

 

  • 마찬가지로 명령어를 통해 Service를 만들 수 있습니다.
nest g service user

 

 

  • 생성을 완료하면 user.service.ts와 테스트에 사용되는 user.service.spec.ts가 만들어졌고 user.module.ts의 providers 부분에 userService가 추가 된 것을 확인 할 수 있습니다.

 

  • controller에서 해당 service를 사용(Dependency Injection)하려면 아래와 같이 수정합니다.
import { Controller } from '@nestjs/common';
import { UserService } from './user.service';

@Controller('user')
export class UserController {
  constructor(private userService: UserService) {}
}

 

 

4. Resource

  • 만약 위의 과정이 번거롭다면, 아래의 명령어로 한번에 module, controller, service를 만들수 있습니다.
nest g resource product

 

 

  • 명령어를 입력하면, 어떤 형태의 모듈을 만들지 선택할 수 있으며

 

  • 심지어 CRUD entry points를 만들겠다는 선택을 하면 Controller와 Service의 기본 코드를 아래와 같이 생성해줍니다.

 

'NestJS' 카테고리의 다른 글

Chapter3 - DB 연결(TypeORM)  (0) 2023.12.08
Chapter1 - 구조 살펴보기  (0) 2023.09.22