NestJS · DTO Validation

DTO와 ValidationPipe로 입력 계약 고정하기

DTO는 TypeScript 타입 장식이 아니라, 외부에서 들어오는 body와 param의 구조를 런타임에 검증하고 controller 이후 계층을 보호하는 계약이다.

01

요청 모델

생성, 수정, 조회 조건별로 다른 DTO를 정의한다.

02

규칙 부착

문자열, 숫자, 배열, nested object에 validator decorator를 붙인다.

03

Pipe 적용

전역 또는 route 단위 ValidationPipe가 DTO 인스턴스 검증을 수행한다.

04

오류 변환

validation 실패를 프런트가 읽을 수 있는 필드 오류 형식으로 정리한다.

whitelist
허용 필드만 통과 DTO에 없는 속성을 제거
예상 외 입력 차단
forbid
초과 필드 거부 DTO 밖 필드가 오면 요청을 실패
공격 탐지에 유용
transform
타입 변환 param 문자열을 number 등으로 변환
암묵 변환 범위 조심
PartialType
수정 DTO 생성 DTO 기반으로 optional 수정 모델 생성
비즈니스 필수값은 따로 확인

런타임 · 분리 · 중첩 점검

런타임 TypeScript 타입만 믿지 않고 실제 요청을 검증한다.
분리 CreateDTO와 UpdateDTO의 필수값 정책이 다르다.
중첩 nested object와 array validation이 누락되지 않는다.
오류 필드별 오류가 일관된 응답 형식으로 나온다.