현수의 제 2의 뇌
article thumbnail
반응형
헥사고날 아키텍처를 확장성이 좋고 결합도가 낮아 MSA 아키텍처를 구성하는데 있어서 적합한 아키텍처라고 할 수 있습니다!

헥사고날 아키텍처는 Ports and Adapter 패턴이라고도 하며 Layered Architecture의 문제를 보완하기 위해 생겨난 아키텍처 입니다.

 

Layered Architecture의 문제

경직성

계층형 아키텍처는 코드 변경이 일어났을때 다른 계층으로 쉽게 전파될 수 있습니다.

예를 들어 데이터베이스 스키마가 바뀌었을때 비즈니스 로직, 데이터 엑세스 계층 등 다른 계층까지 전파될 수 있어 유지보수를 어렵게 만듭니다.

 

높은 결합도

계층형 아키텍처에서는 상위 계층하위 계층에 강하게 의존하게 됩니다.

이로 인해 변경이 어려워지고, 테스트를 어렵게 합니다.

Presentation Layer(표현 계층, 상위 계층): 사용자와 직접적으로 상호작용하며 사용자 인터페이스(UI)와 관련된 로직을 처리합니다.

Business Logic Layer(비즈니스 로직 계층, 중간 계층): 시스템의 핵심적인 비즈니스 규칙과 연산을 처리하는 계층입니다.

Data Access Layer(데이터 액세스 계층, 하위 계층): 데이터베이스와의 상호작용, 즉 데이터의 조회, 저장 등을 담당합니다.

비즈니스 로직의 분산

계층형 아키텍처의 비즈니스 로직은 여러 계층에 걸쳐 분산 될 수 있어 해당 로직의 흐름을 파악하거나 변경하는데 어려워질 수 있습니다.

예를들어 비즈니스 로직을 수행하는데 비즈니스 계층에 존재하도록 하지않고 표현 계층이나 데이터 엑세스 계층에도 침투하게 된다는 의미를 가지고 있습니다.

 

 

헥사고날 아키텍처 [ Hexagonal Architecture ]

헥사고날 아키텍처에서는 유저 인터페이스나 데이터베이스가 비즈니스 로직으로부터 분리해야만 하는 외부 요소로 취급합니다.

이렇게 하면 비즈니스 로직은 외부 요소에 의존하지 않게되고 표현 계층, 데이터 엑세스 계층이 도메인 계층에 의존하도록 합니다.

이렇게 하는 이유..?
비즈니스 로직이 외부의 변환에 영향을 받지 않도록 보호하기 위해서 이렇게 설계합니다.
예를들어, 데이터베이스나 사용자 인터페이스가 변경되더라도 이러한 변경사항이 비즈니스 로직에 영향을 끼치지 않도록 하기 위해 입니다.

헥사고날 아키텍처의 요청 흐름

요청 (Request)

클라이언트 또는 외부 시스템과 같은 어플리케이션의 바깥쪽 계층에서 요청을 합니다.

어댑터 (Adapter)

이 요청은 Adapter(Controller) 에 의해 주로 표현 계층에서 도메인 계층으로 데이터를 전달합니다. 도메인 계층은 인프라 계층으로 데이터를 전달합니다.

도메인 계층에서의 처리

어댑터를 통해 변환된 요청은 도메인 계층에 전달되어, 비즈니스 로직에 따라 처리됩니다.

데이터 엑세스

도메인 계층에서는 데이터를 엑세스 하는 포트를 통해 처리됩니다. 포트는 인터페이스를 정의하고 있고 Adapter가 Port를 구현합니다.

결과 반환

모든 처리가 완료되면, 결과는 다시 어댑터를 통해 외부 요청을 보낸 시스템이나 사용자에게 적절하 형태로 반환됩니다.

 

DDD ( Domain Driven Design )

DDD는 복잡한 비즈니스 요구사항을 해결하는데 도움을 줍니다.

 

헥사고날 아키텍처는 도메인 로직을 외부 세계로부터 격리시켜 DDD의 주요 목표인 비즈니스 도메인의 복잡성을 잘 다룹니다.

DDD는 비즈니스 로직을 중심으로 설계하고 구현함으로써 헥사고날 아키텍처의 구조에 도메인 로직을 적용하는 데 도움을 줍니다.

이 두 가지 접근법을 함께 사용하면 비즈니스 요구사항을 정확하게 반영하는 유연하고 확장성이 높은 소프트웨어를 만드는 데 도움받을 수 있습니다.

profile

현수의 제 2의 뇌

@부현수

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!