UsersModule에 컨트롤러와 서비스를 함께 등록하고 외부 공개 범위를 제한한다.
라우트 하나를 만들 때 책임 위치를 먼저 정한다
사용자 목록 API를 만든다면 모듈은 기능 경계를 선언하고, 컨트롤러는 HTTP 입력을 해석하며, 서비스는 재사용 가능한 규칙을 실행합니다.
구현 순서
ordered steps@Get(), @Param(), @Body()로 요청 모양을 읽고 서비스 메서드를 호출한다.
조회 조건, 중복 검사, 저장소 호출처럼 HTTP와 분리 가능한 로직을 담당한다.
레포지토리나 외부 API 클라이언트를 주입 가능한 단위로 분리한다.
코드를 둘 곳
matrix| 상황 | 권장 위치 | 판단 근거 |
|---|---|---|
| 경로, 상태 코드, 요청 DTO가 바뀐다 | Controller | HTTP 표현 계층의 변경이다. |
| 다른 라우트에서도 같은 규칙을 쓴다 | Service | 업무 규칙은 요청 형태와 분리해야 한다. |
| 저장소 구현을 테스트에서 바꿔야 한다 | Provider token | DI 등록을 바꾸면 사용하는 코드는 그대로 둔다. |
A급 구조 신호
checkpoints클래스 이름만 봐도 요청 계약, 규칙, 외부 자원이 구분된다.
저장소나 API 클라이언트를 모듈 설정에서 바꿀 수 있다.
컨트롤러 테스트는 서비스 대역을, 서비스 테스트는 provider 대역을 넣는다.