본문 바로가기
🏛️ Architecture

[만들면서 배우는 클린 아키텍처] Chapter5. 웹 어댑터 구현하기

by GroovyArea 2022. 10. 30.

CH.5 웹 어댑터 구현하기

1. 의존성 역전

  • Web Adaptor = Incomming Adaptor
  • 외부로부터 요청 받음 =>
    애플리케이션 코어 호출 =>
    무슨 일을 해야할지 알려줌
  • 애플리케이션 계층은 웹 어댑터가 통신할 수 있는 포트를 제공
  • 서비스는 포트 구현 & 웹 어댑터가 이 포트를 호출

  • 제어 흐름
    • 왼쪽 => 오른쪽
  • 웹 어댑터가 유스케이스를 직접 호출할 수 있지만 간접 계층을 넣음
  • 포트 (간접 계층)는 외부와 통신할 수 있는 곳에 대한 명세서
    • 어떤 통신이 일어나는지 명확하게 알 수 있음.

  • Outgoing Port
  • 이 포트는 웹 어댑터에서 구현하고 애플리케이션 코어에서 호출해야 한다.
  • 웹 어댑터는 인커밍 & 아웃고잉 어댑터가 될 수도 있다고 한다.

2. 웹 어댑터의 책임

거시적 관점

  1. HTTP 요청을 객체로 매핑 후 권한 검사
  2. 입력 유효성 검증 및 유스케이스의 입력 모델로 매핑
  3. 유스 케이스 호출 후 출력을 HTTP로 매핑 및 반환

미시적 관점

  • 웹 어댑터의 입력 모델을 유스케이스의 입력 모델로 변환할 수 있다는 것을 검증해야 함.
  • HTTP 와 관련된 모든 것은 애플리케이션 계층으로 침투하면 안된다.
  • 웹 어댑터의 책임은 애플리케이션 코어가 몰라야 한다.
  • 이러한 계층 간의 경계는 도메인과 어플리케이션 계층부터 개발하기 시작하면 자연스럽게 생긴다. (고민해 봐야 할 부분)

3. 컨트롤러 나누기

  • 컨트롤러는 너무 적은 것 보다는 많은게 낫다.
  • 각 컨틀로러가 가능한 한 좁고 다른 컨트롤러와 가능한 한 적게 공유한는 웹 어댑터 조각을 구현해야한다.
    이때 컨트롤러명을 정확히 지을 것.

Example

  • UserController

    • 회원 등록
    • 회원 정보 반환
    • 회원 수정
    • 회원 탈퇴
      • 다수의 책임을 가지고 있는 큰 컨트롤러
  • UserJoinController

    • 회원 등록
      • 책임을 나눠 작게 만든 컨트롤러
  • 코드 파악이 쉬워진다.

  • 테스트 코드 작성이 수월하다.

반응형