본문 바로가기
Theory/Architecture

웹 어댑터 구현하기

by y.j 2022. 6. 29.
728x90

의존성 역전

웹 컨트롤러에서 외부로부터 청을 받아 어플리케이션 코어를 호출하고 무슨 일을 해야 할지 알려준다. 이 중간에 웹 어댑터와 어플리케이션 계층이 통신 할 수 있는 포트를 제공한다. 이 포트를 통해 외부와 어떤 통신이 일어나고 있는지 알 수 있다. 

위 그림은 컨트롤러에서 service로 아웃고잉 어댑터를 만들 수 있다. 하지만 한 어댑터에서 둘다 수행해도 상관없다.

 

웹 어댑터의 책임

웹 어댑터는 URL경로, HTTP 메서드, 콘텐츠 타입과 같은 특정 기준을 만족하는 HTTP요청을 수신 후 역직렬화 한다.

1. HTTP 요청을 자바 객체로 매핑
2. 권한 검사
3. 입력 유효성 검증
4. 입력을 유스케이스의 입력 모델로 매핑
5. 유스케이스 호출
6. 유스케이스의 출력을 HTTP로 매핑
7. HTTP응답을 반환

그 이후에는 입력 모델에 대한 ( 유스케이스 입력이 아닌 ) 유효성 검증을 해야만 한다. 이 뿐 아니라 웹 어댑터의 입력 모델을 유스케이스를 입력 모델로 변환할 수 있다는 것을 검증해야만 한다. 그 후에 유스케이스를 호출하고 출력을 반환받는다. 그리고 HTTP응답으로 직렬화해서 호출자에게 전달한다. 이 과정에서 한 군데라도 문제가 생기면 예외를 던지고 웹 어댑터는 에러를 호출자에게 보여줄 메시지로 변환해야 한다.

 

책임이 많지만 이 책임들을 어플리케이션으로 전가하면 안된다. HTTP에서 다루고 있는 것을 어플리케이션 계층에서 알고 있다면 HTTP를 사용하지 않은 인커밍 어댑터의 요청에 대해 동일한 도메인 로직을 수행 할 수 있는 선택지를 잃게 된다. 이러한 경계를 잘 개발하기 위해서는 도메인과 애플리케이션 계층부터 개발하면 된다.

 

컨트롤러 나누기

컨트롤러는 너무 적은 것보다는 너무 많은 것이 오히려 낫고 가능한한 좁고 컨트롤러와 가능한 한 적게 공유하는 웹 어댑터 조각을 구현해야 한다. 각 연산에 대해 가급적이면 벼도의 패키지 안에 별도의 컨트롤러를 만드는 방식이 테스트하기도 편하다. 클래스명을 유스케이스를 최대한 반영해서 지어야 한다.

 

 

 

728x90

'Theory > Architecture' 카테고리의 다른 글

아키텍처 요소 테스트하기  (0) 2022.07.05
영속성 어댑터 구현하기  (0) 2022.07.02
유스케이스 작성하기  (0) 2022.06.21
코드 작성하기  (0) 2022.06.20
의존성 역전하기  (0) 2022.06.19

댓글