기능 단위 공개 범위
@Module({
imports, controllers,
providers, exports
})
기능 경계를 만들고, 외부 모듈이 사용할 provider만 exports로 노출합니다.
NestJS의 가치는 문법 장식이 아니라 HTTP 경계, 비즈니스 규칙, 의존성 연결, 공통 정책을 서로 다른 위치에 고정하는 데 있습니다. Express 또는 Fastify 어댑터 위에 같은 애플리케이션 구조를 얹을 수 있다는 점도 선택 기준에 포함됩니다.
@Module({
imports, controllers,
providers, exports
})
기능 경계를 만들고, 외부 모듈이 사용할 provider만 exports로 노출합니다.
@Controller('users')
@Get(':id')
findOne(@Param('id') id)
URL, 메서드, 요청 DTO를 얇게 받고 실제 규칙은 provider에 위임합니다.
@Injectable()
class UsersService {
constructor(repo) {}
}
서비스, 저장소, 클라이언트, 팩토리를 DI 컨테이너가 연결해 테스트 대역을 바꾸기 쉽게 만듭니다.
네트워크 입출력과 HTTP 서버 구현을 담당합니다.
인증·인가를 먼저 확인하고 DTO 검증과 변환을 수행합니다.
요청 데이터를 읽고 응답 형태를 결정하는 얇은 계층입니다.
저장소, 외부 API, 캐시 등 실제 작업 단위를 조합합니다.
로깅, 변환, 예외 매핑을 계층 바깥에서 일관되게 적용합니다.