데브허브 | DEVHUB | Tired of Messy Microservices? 😫 Try Hexagonal Architecture with Spring Boot 🚀 | Real Example Inside!Tired of Messy Microservices? 😫 Try Hexagonal Architecture with Spring Boot 🚀 | Real Example Inside!
- 헥사고날 아키텍처는 마이크로서비스의 유연성과 느슨한 결합을 위해 고안된 강력한 디자인 패턴으로, '포트 및 어댑터' 패턴으로도 불립니다. 🏗️
- 전통적인 3계층 아키텍처의 문제점인 계층 간의 강한 결합(예: REST API 외 Kafka 추가, DB 변경 시 서비스 로직 수정 필요)을 해결합니다. 🔗
- 핵심 비즈니스 로직(도메인)을 중앙에 두고, 외부 시스템과의 상호작용은 '포트'와 '어댑터'를 통해 이루어집니다. 🧠
- '포트'는 애플리케이션이 외부와 소통하는 계약(인터페이스)이며, '어댑터'는 이 포트를 구현하여 실제 외부 시스템(DB, UI, 메시징)과 연결하는 플러그인입니다. 🔌
- 입력 어댑터(Driving Side)는 REST API, Kafka 컨슈머 등 애플리케이션을 '구동'하는 외부 소스이며, 입력 포트는 애플리케이션이 노출하는 유스케이스를 정의합니다. 🚗
- 출력 어댑터(Driven Side)는 데이터베이스, 파일 시스템 등 애플리케이션에 의해 '구동'되는 외부 대상으로, 출력 포트는 핵심 로직의 외부 의존성을 정의합니다. ⚙️
- 이 아키텍처는 핵심 로직을 외부 기술로부터 격리하여 모듈성, 테스트 용이성, 확장성을 크게 향상시키고, 외부 의존성 변경 시 핵심 로직 수정 없이 쉽게 교체할 수 있게 합니다. 🔄
- 프로젝트 구조는
domain (핵심 비즈니스 로직, 포트, DTO - 비스프링 컴포넌트), adapter (입력/출력 어댑터 - 스프링 컴포넌트), config (스프링 설정)로 분리하여 핵심과 외부를 명확히 구분합니다. 🧩
domain 모듈은 비즈니스 규칙과 포트를 포함하여 안정적이며 변경되지 않는 부분이고, adapter 모듈은 외부 기술 구현을 담당하여 필요에 따라 교체 가능합니다. 🛡️