[클린 아키텍처] 05. 웹 어댑터 구현하기

Jimin Lim·2023년 6월 6일
0

Architecture

목록 보기
5/23
post-thumbnail

✅ 05. 웹 어댑터 구현하기

모든 커뮤니케이션은 어댑터를 통해 이루어진다.

🔗 의존성 역전

웹 어댑터는 incoming or driving 어댑터다. 외부로부터 요청을 받아 애플리케이션 코어를 호출하며, 제어 흐름은 웹 어댑터(컨트롤러) -> 애플리케이션(서비스)로 흐른다.

애플리케이션 계층은 웹 어댑터가 통신할 수 있는 포트를 제공하고, 서비스가 이를 구현한다.

포트로 외부 세계와 통신할 수 있으므로, 간접 계층은 꼭 넣어야 한다.

🔗 웹 어댑터의 책임

  1. HTTP 요청을 자바 객체로 매핑
  2. 권한 검사
  3. 입력 유효성 검증 -> 웹 어댑터의 입력모델은 또다른 유효성 검증을 수행해야 한다.
  4. 입력을 유스케이스의 입력 모델로 매핑
  5. 유스케이스 호출
  6. 유스케이스의 출력을 HTTP로 매핑
  7. HTTP 응답을 반환

🔗 컨트롤러 나누기

Entity와 연관된 방식으로 나누기

Account 엔티티의 연산과 관련해 모아서 작성한다면, 모든 것이 하나의 클래스에 있어 괜찮아 보이지만 단점이 존재한다.

  • 클래스마다 코드는 적을수록 좋다.
  • 데이터 구조의 재활용을 촉진하지 않도록 하는 것이 좋다.
    • 예를 들어 AccountResource라는 모델 클래스를 공유하는데, create에는 id필드가 필요없기에 오히려 혼돈만 야기시킨다.

따라서, 각 연산에 대해 가급적이면 별도의 패키지 안에 별도의 컨트롤러를 만드는 방식을 선호하고 메서드와 클래스명은 유스케이스를 최대한 반영하도록 한다.

AccountController -> SendMoneyController

🔗 결론

앱 어댑터를 구현할 때는 HTTP요청을 애플리케이션의 유스케이스에 대한 메서드 호출로 변환하고 결과를 다시 HTTP로 변환하되, 어떤 도메인 로직을 수행하지 않는다.

웹 컨트롤러를 나눌 때 모델을 공유하지 않는 여러 작은 클래스들을 만드는 것을 두려워해서는 안된다. 작은 클래스들은 더 파악하기 쉽고, 테스트하기 쉬우며 동시 작업을 지원한다.

✨ 참고자료

https://rutgo-letsgo.tistory.com/330

profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

0개의 댓글