[Nest js] basic - module, controller, service

giyeon·2022년 3월 9일
0

nest js - basic

목록 보기
1/8

이 포스팅은 Youtube 'John Ahn'의 '따라하면서 배우는 NestJS'를 참고했습니다.

⚙️ Nest js 기본 구조

1. module ?

Nest js에서의 module은 밀접하게 관련된 기능의 집합으로, 구성요소를 구성하는 효과적인 방법이에요.
일반적으로 module은 기능별로 만들어요. ex) user, chat, order, ...

같은 기능에 해당하는 것들은 하나의 module 폴더 안에 넣어서 사용합니다.
예를들어 UserController, UserService, UserEntity ...같은 것은 User에 관한 기능이기에 userModule 안에 넣어줘요.

controller, service 보다 한 단계 상위 개념인것 같아요.

module은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 자원을 공유할 수 있어요.

module 생성

Nest js는 명령어로 파일들을 생성하고 수정할 수 있어요.
module을 새로 생성할 때는 아래와 같은 명령어를 입력합니다.

nest g module <moduleName>

이렇게 입력해주면 알아서 file이 생성/수정이 돼요.
저는 boards라는 이름으로 생성해봤어요.

import { Module } from '@nestjs/common';

@Module({

// contoller, service..

})
export class BoardsModule {}

module내부는 controller, service .. 등이 들어가게 돼요.


2. controller?

controller는 들어오는 요청을 처리하고, client에 요청에 대한 응답을 반환해요.

client에서 요청이 들어오면, 해당하는 controller에서 요청에 대한 처리 후, 응답을 해주게 돼요.

controller는 @Controller 데코레이터로 클래스를 데코레이션하여 정의합니다.

데코레이터는 인자를 Controller에 의해서 처리되는 경로로 받아요.

@Controller('/boards')
export class BoardsController {
// service ...
// handler ...
}

controller 생성

module을 생성할 때 처럼, 명령어를 사용해서 controller를 생성합니다.

명령어는 아래와 같아요.

nest g controller <controllerName> --no-spec

(--no-spec : 생성 시 test code 생략하기)

command를 입력하면 controller를 생성하는 동시에 해당 상위module에 자동으로 등록이 돼요.


3. Service ?

service 내부에서는 주로 데이터베이스와 관련된 로직을 처리해요. DB안에서 데이터를 가져오거나, 새로운 데이터 생성 시, 생성한 게시판 정보를 넣어주는 등의 로직을 처리합니다.

선언된 서비스 인스턴스는 어플리케이션 전체에서 사용이 가능해요.

service 생성

똑같이 명령어를 입력해서 생성합니다.

nest g service <serviceName> --no -spec

명령어를 입력하게되면 상위 Module에 자동적으로 등록이 되고 service 파일이 생성 됩니다.

생성된 파일 내부에는 @Injectable 데코레이터가 있으며 이를 이용해서 다른 컴포넌트에서 해당 service를 사용할 수 있게 만들어줘요.

controller에서 만든 service를 사용할 수 있게 해주는 작업이 필요해요.(Dependency Injection)

Dependency Injection는 controller class내부의 constructor에서 이루어집니다.

@Controller('boards')
export class BoardsController {
  constructor(private boardsService: BoardsService) {}
}

+ Providers ?

controller는 요청을 처리하기 위해 많은 것들이 필요해요.
이 많은것들을 모두 controller에서 구현하기 보다, 그 기능 하나하나를 쪼개서 service 단위로 분할합니다.

이렇게 분할 된 서비스나 리포지토리, 팩토리, 헬퍼 등을 Provider 라고 합니다.
이런 Provider 들을 controller에서 사용할 수 있게 의존성을 주입해서 사용할 수 있게 해요.

Provider는 module파일에서 등록 후 사용이 가능합니다.

profile
Web , App developer wannabe 🧑🏻‍💻

0개의 댓글