[MSA 알아보기] 헥사고날 아키텍쳐

차차의 개발일기·2024년 5월 8일
0

msa

목록 보기
1/7

헥사고날 아키텍쳐

헥사고날 아키텍쳐(hexagonal architecture)

  • 클린 아키텍쳐를 구현하는 가장 대표적인 모델
  • 내부와 외부라는 개념을 나누어 각각에 맞는 별도의 인터페이스 정의
  • 육각형 내부에는 도메인 엔티티, 이와 상호작용하는 유스케이스가 위치
  • 육각형 외부에는 애플리케이션과 상호작용하는 어댑터들이 위치
  • 내부의 로직은 외부를 통해서만 접근이 가능
  • 모든 외부 시스템과 직접적인 상호작용은 어댑터 역활
  • 각 서비스에서 비즈니스 로직에 맞게 정의된 인터페이스는 포트

장점

  • 어댑터를 통해 외부 서비스의 의존성을 분리하여 언제든 쉽게 교체하여 유연한 확장성 있는 대처
  • 포트를 통해서 내부 비즈니스 로직과 인터페이스를 분리하여 내부 로직의 구현은 인터페이스와 무관하게 개발 가능

단점

  • 포트와 어댑터를 구성하고 관리하는 데 복잡성
  • 아키텍처를 처음 구축할 때 시간과 노력이 더 필요

용어 정리

  • 포트(Ports) : DI를 위한 추상화 인터페이스
  • 어댑터(Adapters) : 포트를 통해 인프라와 실제로 연결하는 부분만 담당하는 구현체
  • 도메인 모델(Domain Model) : 실제 핵심 비즈니스 로직을 처리하는 부분
  • 유즈케이스(Use Case, Domain Service) : 도메인 모델과 어댑터를 이용해서 비즈니스 로직과 인프라를 오케스트레이션 하는 dumb한 레이어

데이터 흐름

  1. Adapters를 통해 요청 받음
  2. Ports를 통해 Application services에 전달
  3. Application services에서 Domain Model로 전달
  4. Domain Model에서 비즈니스 로직을 처리
  5. Adapters를 통해 외부의 데이터를 가져오거나 처리된 테이터를 외부부로 저장

내부영역

내부 영역은 순수한 비즈니스 로직을 표현하는 기술 독립적인 영역이며, 외부 영역과 연계되는 포트를 지닙니다. 순수한 비즈니스 로직을 표현해야 하므로 내부 영역은 외부 영역과 직접 의존하지 않고 포트를 통해 통신하며, 외부 영역의 어댑터가 내부 영역의 포트에 의해서 구현됩니다.

포트는 크게 인바운드 포트와 아웃바운드 포트로 나뉩니다.

  • 인바운드 포트 : 내부 영역의 사용을 위해 표출되는 API
  • 아웃바운드 포트 : 내부 영역이 외부를 호출하는 방법을 정의 (아웃바운드 어댑터가 아웃바운드 포트에 의존해서 구현됨)

외부 영역

외부 영역은 인터페이스 처리를 담당하는 저수준 영역이며 외부에서 들어오는 요청을 처리하거나 외부로 데이터나 응답을 전송하는 어댑터를 지닙니다.

위에서 설명하였듯이 외부 영역에서 내부 영역으로 접근을 하기 위해선 내부 영역의 포트와 어댑터가 연결되어야 하며 어댑터는 포트에 의존해서 구현됩니다.

어댑터는 크게 인바운드 어댑터와 아웃바운드 어댑터로 나뉩니다.

  • 인바운드 어댑터 : 외부에서 들어오는 요청을 처리 (RestController, Controller, 커맨드 핸들러, 이벤트 메시지 구독 핸들러 등)
  • 아웃바운드 어댑터 : 비즈니스 로직에 의해 호출되어 외부와 연계 (데이터 액세스 처리를 담당하는 DAO, 이벤트 메시지 발행 클래스, 외부 서비스를 호출하는 프록시 등)
profile
1년차 개발자 차차입니다.

0개의 댓글