오늘은 ApprovalController를 중심으로 API 요청이 실제로 어디까지 전달되는지 분석했다.
Controller에는 다음과 같은 API가 정의되어 있다.
POST /approval/check
POST /approval/request
POST /approval/{id}/approve
POST /approval/{id}/reject
GET /approval/history
각 API의 역할을 나눠보면 다음과 같다.
| API | 역할 |
|---|---|
/approval/check | 현재 배포 가능한지 확인 |
/approval/request | 승인 요청 생성 |
/{id}/approve | 승인 |
/{id}/reject | 거부 |
/history | 승인 이력 조회 |
/approval/check를 보면 Controller에서 모든 판단을 수행하지 않는다.
ApprovalResult result =
approvalCheckService.check(
request.user(),
request.stack(),
request.action()
);
Controller는 요청 데이터를 받아 Service에 넘긴다.
즉,
HTTP Request
↓
Controller
↓
Service
↓
Business Logic
이라는 구조다.
그리고 Service에서 반환된 ApprovalResult의 Decision에 따라 HTTP 상태 코드를 결정한다.
ALLOWED → 200 OK
PENDING → 202 Accepted
DENIED → 403 Forbidden
Controller에 모든 로직을 넣는 것이 아니라,
Controller
→ HTTP 처리
Service
→ 비즈니스 로직
으로 책임을 분리하는 이유를 실제 코드에서 확인할 수 있었다.
코드를 분석할 때도 Controller에서 끝내는 것이 아니라 해당 메서드가 호출하는 Service까지 따라가야 실제 기능을 이해할 수 있다는 점을 배웠다.