Route placement

라우트 하나를 만들 때 책임 위치를 먼저 정한다

사용자 목록 API를 만든다면 모듈은 기능 경계를 선언하고, 컨트롤러는 HTTP 입력을 해석하며, 서비스는 재사용 가능한 규칙을 실행합니다.

구현 순서

ordered steps
1 Module

UsersModule에 컨트롤러와 서비스를 함께 등록하고 외부 공개 범위를 제한한다.

2 Controller

@Get(), @Param(), @Body()로 요청 모양을 읽고 서비스 메서드를 호출한다.

3 Service

조회 조건, 중복 검사, 저장소 호출처럼 HTTP와 분리 가능한 로직을 담당한다.

4 Provider

레포지토리나 외부 API 클라이언트를 주입 가능한 단위로 분리한다.

코드를 둘 곳

matrix
상황권장 위치판단 근거
경로, 상태 코드, 요청 DTO가 바뀐다ControllerHTTP 표현 계층의 변경이다.
다른 라우트에서도 같은 규칙을 쓴다Service업무 규칙은 요청 형태와 분리해야 한다.
저장소 구현을 테스트에서 바꿔야 한다Provider tokenDI 등록을 바꾸면 사용하는 코드는 그대로 둔다.

A급 구조 신호

checkpoints
읽힘

클래스 이름만 봐도 요청 계약, 규칙, 외부 자원이 구분된다.

교체

저장소나 API 클라이언트를 모듈 설정에서 바꿀 수 있다.

테스트

컨트롤러 테스트는 서비스 대역을, 서비스 테스트는 provider 대역을 넣는다.