클린 아키텍처를 일반화한 구조 중 하나이다.

헥사고날 아키텍처의 핵심은 다음과 같다.

클린 아키텍처에서의 핵심 규칙은 의존성 방향은 안쪽으로, 고수준을 향햐도록 하는 것이다. (안쪽으로 갈수록 추상화 수준이 높아진다.) 예를 들어, 도메인은 외부 Data 계층(DB)의 존재를 알지 않아도 되지만 통신은 필요하다. 이를 DIP를 활용해서 도메인은 인터페이스에 의존하고, Data 계층은 해당 인터페이스를 구현하여 의존성을 역전시킨다.

헥사고날 아키텍처는 내부(도메인)와 외부(인프라)로 구분된다.

Untitled

Untitled

내부 영역은 도메인 및 순수 비지니스 로직을 표현하며 캡슐화 된 영역이다.(POJO 방식)

외부 영역은 내부 영역에서 특정 기술 및 라이브러리를 분리하여 구성한 영역이고, 내부 영역을 설계 이후 진행한다.


포트와 어댑터

포트는 내부 비지니스 영역을 외부로 노출시키는 API 이자, 애플리케이션 코어와 어댑터 간의 통신을 위한 부분이다. 인터페이스로 구성하고 인바운드/아웃바운드 포트로 구분된다.

어댑터는 포트를 통해 핵심 코어와 외부 영역을 연결하는 즉 포트의 구현체라고 할 수 있다. 어댑터는 특정 외부 기술이나 프레임워크에 의존적인 로직을 담당한다. 서비스(유스케이스)는 Port 인터페이스 만을 의존성을 갖기 때문에 사용 기술/프레임워크에 맞춰 어댑터만 바꾸면 되기 때문에 외부와의 결합도를 최소화할 수 있다.

마찬가지로 인바운드/아웃바운드 어댑터로 구분된다.