타입 계약과 런타임 관문은 서로 다른 책임이다

외부 값을 런타임에서 검사한 뒤 Controller와 Provider의 타입 계약으로 잇는다.

1

외부 요청

body: unknown 아직 신뢰하지 않음

타입 표기만으로 payload가 검증되지는 않는다.

2

런타임 관문

Guard → Pipe 권한 · validate · transform

권한과 입력 규칙을 실행 중 확인한다.

3

Controller 계약

create(dto: CreateDto) handler signature

검증된 값을 handler 입력으로 받는다.

4

Provider 위임

service.create(dto) DTO → domain result

주입된 서비스가 로직과 결과 타입을 잇는다.

TS types

컴파일 시점

DTO와 메서드를 검사하지만 타입 표기는 JS에서 지워진다.

Decorator

런타임 연결

데코레이터 함수와 metadata가 route·DI를 연결한다.

Module

Provider 공개 범위

providers 등록 후 exports·imports로 공개한다.

핵심 구분 CreateDto 타입만으로 body를 검증하지 못한다. 런타임 Pipe 규칙이 필요하다.