웹 어댑터
💡 웹 인터페이스를 제공하는 어댑터
의존성 역전
외부로부터 요청을 받아 코어를 호출하고 무슨일을 해야할 지 알려준다.
제어의 흐름은 컨트롤러에서 서비스(유스케이스)로 흐른다.
포트 인터페이스가 필요한 이유
포트는 애플리케이션 코어와 외부 세계가 통신할 수 있는 곳에 대한 명세이다.
외부와 어떤 통신이 일어나고 있는지 정확히 알 수 있어 개발자에게 편리하다.
물론 직접 서비스를 호출하는 방법을 사용할 수도 있다.
실시간 데이터를 웹소켓을 통해 웹 어댑터로 보내 사용자의 브라우저에 전송하는 경우 어떻게 구현할까?
웹 어댑터에서 아웃고잉 포트를 구현하고 애플리케이션 코어에서 호출해야 한다.
이렇게 될 경우 웹 어댑터는 인커밍 어댑터인 동시에 아웃고잉 어댑터가 된다.
웹 어댑터의 책임
💡 7가지 책임
HTTP 요청을 자바 객체로 매핑
권한 검사 (인증과 권한 부여 수행)
입력 유효성 검증
웹 어댑터의 입력 모델을 유스케이스의 입력 모델로 변환할 수 있음을 검증하는 작업
이 변환이 방해되면 유효성 검증 에러 발생
입력을 유스케이스의 입력 모델로 매핑
유스케이스 호출
유스케이스 출력을 HTTP로 매핑
HTTP 응답 반환
HTTP와 관련된 내용은 애플리케이션 계층으로 침투하게 해서는 안된다.
잘 분리한다면, HTTP를 사용하지 않는 또다른 인커밍 어댑터의 요청에 동일한 로직을 수행할 수 있다.
좋은 아키텍처에서는 선택의 여지를 남겨둔다는 것!
도메인과 애플리케이션 계층부터 먼저 개발하기 시작하면 (유스케이스를 먼저 구현하면) 자연스럽게 어댑터와 유스케이스 간의 경계가 생긴다.
컨트롤러 나누기
각 컨트롤러는 가능한 한 좁고 다른 컨트롤러와 적게 공유하는 웹 어댑터 조각을 구현해야 한다.
클래스마다 코드는 적을수록 좋다.
가급적이면 별도 패키지 안에 별도 컨트롤러를 만드는 방식
메서드와 클래스명은 유스케이스를 최대한 반영해 지어야 한다.
컨트롤러 자체의 전용 모델 혹은 원시 코드를 입력받을 수 있다.
컨트롤러 패키지에 대해 private으로 선언해 다른 곳에서 재사용하지 못하게 할 수 있다.
필요없는 필드가 담긴 클래스를 사용하기보다는 새로 모델을 만들어 사용하자.
무작정 create, update, delete만을 사용하기보다는 한번 더 의미를 생각해보고 변수명을 짓도록 하자.
Last updated