1장 헥사고날 아키텍처란?
Hexagonal Architecture : 여러분의 애플리케이션을 UI나 데이터베이스 없이도 동작하도록 만드십시오. 그러면 애플리케이션에 대해 자동화된 회귀 테스트를 실행할 수 있고, 데이터베이스를 사용할 수 없을 때도 동작합니다. 그리고 어떤 사용자의 개입 없이도 애플리케이션을 함께 연결할 수 있습니다. - 알리스테어 코크번(Alistair Cockburn)
즉, 요약하자면 우리 어플리케이션이 UI와 데이터베이스 관련 기술뿐 아니라 그 어떤 기술 없이도 동작하게 만드는 것
이다.
비즈니스 측면이 비즈니스 목표를 달성하는 데 사용되는 기술에 대한 우려 없이도 발전
할 수 있어야 하고 비즈니스 코드에 피해를 주지 않고도 기술 코드를 변경
할 수 있어야 한다.
- 도메인 헥사곤 : 주요한 키워드는 엔티티(Entity)와 값 객체(Value Object)이다.
- Entity : 식별자를 할당할 수 있는 것을 의미한다.
- Value Object : 엔티티를 합성하기 위해서 사용하는
불변 객체
이다.
- 애플리케이션 헥사곤 : 도메인 헥사곤에서 나오는 비즈니스 규칙을 사용, 처리하고 조정하는 방법이다.
- UseCase : 도메인 제약사항을 지원하기 위해 시스템의 동작을 소프트웨어 영역 내에 존재하는 애플리케이션 특화 오퍼레이션을 통해 나타낸다. 간단하게 말해서 이 어플리케이션이 도메인을 활용해서 어떤 것을 할 수 있는지를 나타내는 인터페이스이다.
public interface RouterViewUseCase {
List<Router> getRouters(Predicate<Router> filter);
}
- 입력포트(Input Port) : 유스케이스가 인터페이스라면 유스케이스 인터페이스를 구현한 부분이다.
- 출력포트(Out Port) : 유스케이스가 목표를 달성하기 위해 리소스에서 데이터를 가져와야 하는 상황이다.
유스케이스나 입력 포트가 오퍼레이션을 수행하기 위해 어떤 종류의 데이터를 외부에서 가져와야 하는지를 기술에 구애받지 않고 설명하는 인터페이스로 표현
된다.
public interface RouterViewOutPort {
List<Router> fetchRouters();
}
- 프레임 워크 헥사곤 : 외부 인터페이스를 제공한다. Rest나 gRPC 엔드포인트를 설정하거나 DB 연결등에 해당하는 부분이 이곳이다.
- 소프트웨어와 통신할 수 있는 기술을 결정하는 헥사곤이다. 통신은 드라이빙, 드리븐 방식으로 나뉠 수 있다.
- driving : 입력어댑터
- driven : 출력어댑터, 애플리케이션 레이어의 출력 포트를 implement하고 DI가 일어난다.
- 소프트웨어와 통신할 수 있는 기술을 결정하는 헥사곤이다. 통신은 드라이빙, 드리븐 방식으로 나뉠 수 있다.
Info
헥사고날 아키텍쳐 설계와 구현 요약