NESTJS ARCHITECTURE

요청은 Controller가 받고, 주입 가능한 Provider가 로직을 담당한다

NestJS의 핵심은 기능 단위 Module이 Controller와 Provider를 등록하고, DI 컨테이너가 필요한 의존성을 조립해 관심사를 분리한다는 점이다.

요청 처리 흐름

client Request HTTP 요청이 라우터로 들어온다.
@Controller Controller @Get('/users') 경로, 파라미터, 응답 형식을 담당한다.
@Injectable Provider / Service UsersService 주입 가능한 객체가 비즈니스 로직과 데이터 접근을 담당한다.
response Controller Response return users 처리 결과를 HTTP 응답으로 돌려준다.
@Module()이 기능 단위를 조립한다 관련 Controller와 Provider를 등록하고, 다른 모듈로 가져오거나 내보낼 의존성 경계를 만든다.
controllers 요청 입구 목록
providers 주입 가능한 클래스
imports / exports 모듈 간 연결
Controller 요청을 해석하고 흐름을 시작 HTTP 세부사항과 애플리케이션 로직 사이의 얇은 입구가 된다.
Provider 재사용 가능한 로직 단위 Service, Repository, Helper 등을 DI로 공유하고 테스트한다.
Module 기능의 경계와 공개 범위 무엇을 내부에 숨기고 무엇을 외부에 제공할지 결정한다.

핵심: NestJS의 생산성은 데코레이터 문법 자체가 아니라, 규모가 커져도 역할과 의존성 경계가 흐트러지지 않게 해주는 아키텍처 기본값에서 나온다.