separation

NestJS 관심사 분리

같은 요청 안에서도 공통 처리, 보안, 검증, 비즈니스, 응답 포맷은 다른 책임이다. 위치를 분리해야 코드 변경 범위가 작아진다.

핵심 질문: 이 로직은 무엇을 결정하는가답에 따라 들어갈 계층이 달라진다.

책임별 배치 지도

01공통 요청 문맥

로깅, CORS, 세션처럼 라우트와 무관한 처리는 Middleware에 둔다.

02접근 가능성

토큰, 역할, 소유자 확인처럼 실행 여부를 결정하면 Guard에 둔다.

03입력 품질

문자열을 숫자로 바꾸거나 DTO를 검증하면 Pipe에 둔다.

04전후 처리

캐싱, 시간 측정, 응답 래핑처럼 핸들러 앞뒤가 필요하면 Interceptor에 둔다.

05업무 규칙

주문 생성, 사용자 저장 같은 도메인 판단은 Service에 둔다.

잘못 섞었을 때의 신호

냄새원인옮길 곳
컨트롤러가 토큰을 직접 파싱접근 판단과 요청 처리 혼합Guard
서비스가 DTO 타입 변환 담당입력 형식과 업무 규칙 혼합Pipe
모든 핸들러가 같은 응답 래핑 반복후처리 중복Interceptor