- 어댑터 = 외부 세계와의 소통 창구
- 웹 어댑터 = 웹 인터페이스
5-1. 의존성 역전
- 제어 흐름: adapter.in.web.Controller → application.service.Service
- 호출
- adapter.in.web.Controller →(직접 호출) application.service.Service
- adapter.in.web.Controller →(호출) application.port.in.IncomingPort ←(구현) application.service.Service
Port의 존재 이유
- 코어가 외부와 통신할수 있는 곳에 대한 명세
- 외부와 어떤 통신이 일어나는지 정확히 알 수 있다.
- 레거시 코드를 다루는 유지보수 엔지니어
- 애플리케이션이 웹 어댑터 쪽으로 실시간 데이터를 주어야 하는 경우 ex. 웹 소켓
- 제어 흐름: 웹 어댑터 ← 애플리케이션 코어
- adapter.in.web.WebSocketController →(구현) applicatoin.port.out.WebSocketPort ←(호출) application.service.Service
5-2. 웹 어댑터의 책임
웹 어댑터는 어떠한 도메인 로직도 수행하지 않으며, HTTP 관련 작업 같은 애플리케이션 코어가 신경 쓸 필요 없는 많은 일들을 수행한다.
- HTTP 요청을 자바 객체로 매핑
- 인증 및 권한 검사
- 입력 유효성 검증
- 유스케이스의 입력 모델 유효성 검증과는 다르다.
- 웹 어댑터의 입력 모델을 유스케이스의 입력 모델로 변환할 수 있는가?
- 입력을 유스케이스의 입력 모델로 매핑
- 유스케이스 호출
- 유스케이스의 출력을 HTTP로 매핑