NestJS · 기본 구조

모듈·컨트롤러·서비스의 분업 구조

NestJS 기본 개념은 세 파일 이름을 외우는 것이 아니라, module이 연결 범위를 만들고 controller가 외부 계약을 받으며 service가 업무 규칙을 실행한다는 분업이다.

01

모듈 선언

controllers와 providers를 module metadata에 등록해 Nest가 생성할 대상을 알린다.

02

요청 수신

controller는 param, query, body를 받고 status와 response shape를 정한다.

03

업무 위임

controller는 service method를 호출해 계산, 조회, 저장을 맡긴다.

04

의존성 공개

다른 module이 필요로 하는 provider만 exports로 공개한다.

imports
외부 module 사용 다른 module이 export한 provider를 현재 module에서 사용
순환 import 한계
controllers
route 등록 HTTP handler를 module 범위에 연결
provider가 아님
providers
DI 대상 service, repository, factory, config를 주입 가능하게 함
token 기반
exports
공개 API 다른 module이 주입할 수 있는 provider를 제한
모두 export하지 않기

역할 · 등록 · 공개 점검

역할 controller는 얇고 service가 도메인 규칙을 갖는다.
등록 주입할 provider가 module metadata에 존재한다.
공개 exports는 외부에서 필요한 것만 노출한다.
테스트 service는 controller 없이 단위 테스트할 수 있다.