controllers, providers, imports, exports를 선언해 기능 경계를 만든다.
모듈은 경계를 만들고 컨트롤러와 서비스는 책임을 나눈다
NestJS 기본 구조는 HTTP 요청을 받는 코드와 업무 규칙을 분리합니다. 모듈은 같은 기능에 필요한 구성요소를 등록하고, DI 컨테이너가 컨트롤러와 서비스를 연결합니다.
핵심 구성요소의 실제 책임
roles경로, 메서드, 파라미터, 응답 상태처럼 요청의 모양을 해석한다.
조회, 계산, 저장소 호출 같은 재사용 가능한 업무 규칙을 실행한다.
레포지토리, 클라이언트, 헬퍼를 주입 가능한 단위로 등록한다.
요청 하나가 지나가는 순서
ordered stepsGET /users 같은 HTTP 요청이 애플리케이션에 들어온다.
라우트를 매칭하고 필요한 입력만 서비스 호출 인자로 넘긴다.
업무 규칙을 처리하고 provider나 저장소에 필요한 작업을 위임한다.
컨트롤러가 서비스 결과를 HTTP 응답으로 반환한다.
배치 판단
matrix| 질문 | 둘 위치 | 이유 |
|---|---|---|
| URL과 HTTP 메서드가 바뀌는가 | Controller | 외부 요청 계약의 변화이기 때문이다. |
| 도메인 규칙을 여러 곳에서 쓰는가 | Service | 컨트롤러 밖에서도 재사용되어야 한다. |
| 다른 모듈에 공개할 기능인가 | Module exports | 공개 범위를 메타데이터에서 드러내야 한다. |