hexagonal architecture

hany·2023년 3월 27일
0

도메인 바깥에서 어댑터를 만들어서 도메인 내부의 포트에 꽂아라.

헥사고날 아키텍처

  • 도메인 중심 아키텍처의 일종
  • UI나 database를 비지니스 로직으로 분리되어야하는 외부요소로 취급함
  • 비지니스 로직(도메인 코드)이 외부요소에 의해 의존하지 않게 함
  • 프레젠테이션 계층(controller)과 데이터 소스 계층(persistence)이 도메인 계층에 의존하도록 함
  • 외부에 포함된 컴포넌트는 어댑터이고, 어댑터가 내부와 상호작용하는 부분이 포트임

구조

1. Adapter(플러그인)

  • driving adapter(주도하는 어댑터)
    : 애플리케이션 코어를 호출함
    웹, 외부 시스템 어댑터 ex) Controller
  • driven adapter(주도되는 어댑터)
    : 애플리케이션 코어에 의해 호출됨
    영속성, 외부 시스템 어댑터 ex)

2. Port(통로)

: 애플리케이션 코어와 어댑터 간에 통신을 위한 부분으로 인터페이스로 구성한다.

  • In Port(인바운드 포트)
    : 외부에서 Adapter를 통해 들어온 요청을 처리하는 인터페이스 ex) Service I/F
  • Out Port(아웃바운드 포트)
    : 내부에서 외부의 기술이나 서비스를 사용하기 위한 인터페이스

3. Application Core

: 도메인 엔티티, 유즈케이스
모든 의존성은 코어를 향함

계층 구성

  • 어댑터 계층
    : ex) web 어댑터(=웹 컨트롤러), persistence 어댑터
  • 애플리케이션 계층
    : 포트와 서비스를 포함하는 곳
    • 포트
      : 서비스에서 구현될 인터페이스
      • input port
      • output port
    • 서비스
      포트 구현체(=유스케이스 구현체)
  • 도메인 계층
    - 도메인 엔티티

패키지 구성

  • 어댑터 패키지
    : package-private
  • 애플리케이션 패키지
    : 어댑터에 접근해야할 포트는 public
    서비스는 package-private(input port가 public이기 때문에)
  • 도메인 패키지
    : public 진입점으로 활용될 클래스에만 public 설정을 해주기 때문에 의존성이 잘못 이용될 문제를 방지한다.

https://blog.jiniworld.me/176
https://zkdlu.tistory.com/4
https://coco-log.tistory.com/205
https://github.com/wikibook/clean-architecture
https://cantcoding.tistory.com/m/107
https://velog.io/@ddkds66/%EC%9D%B4%EC%BB%A4%EB%A8%B8%EC%8A%A4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%83%81%EC%84%B8-%EC%84%A4%EA%B3%84
https://happy-coding-day.tistory.com/entry/%ED%97%A5%EC%82%AC%EA%B3%A0%EB%82%A0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98Hexagonal-Architecture-%EC%BD%94%EB%93%9C%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%B4%EB%B3%B4%EA%B8%B0-%EB%AF%B8%EC%99%84%EC%84%B1

profile
number1hany

0개의 댓글

관련 채용 정보