separation
NestJS 관심사 분리
같은 요청 안에서도 공통 처리, 보안, 검증, 비즈니스, 응답 포맷은 다른 책임이다. 위치를 분리해야 코드 변경 범위가 작아진다.
핵심 질문: 이 로직은 무엇을 결정하는가답에 따라 들어갈 계층이 달라진다.
책임별 배치 지도
01공통 요청 문맥
로깅, CORS, 세션처럼 라우트와 무관한 처리는 Middleware에 둔다.
02접근 가능성
토큰, 역할, 소유자 확인처럼 실행 여부를 결정하면 Guard에 둔다.
03입력 품질
문자열을 숫자로 바꾸거나 DTO를 검증하면 Pipe에 둔다.
04전후 처리
캐싱, 시간 측정, 응답 래핑처럼 핸들러 앞뒤가 필요하면 Interceptor에 둔다.
05업무 규칙
주문 생성, 사용자 저장 같은 도메인 판단은 Service에 둔다.
잘못 섞었을 때의 신호
| 냄새 | 원인 | 옮길 곳 |
|---|---|---|
| 컨트롤러가 토큰을 직접 파싱 | 접근 판단과 요청 처리 혼합 | Guard |
| 서비스가 DTO 타입 변환 담당 | 입력 형식과 업무 규칙 혼합 | Pipe |
| 모든 핸들러가 같은 응답 래핑 반복 | 후처리 중복 | Interceptor |