헥사곤 아키텍처란 무엇이며 왜 신경 써야 할까요?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
아키텍처 패턴
대상자
- 초보 개발자 및 중급 개발자에게 추천
- 난이도: 중간 수준 (기본적인 OOP 개념 이해 필요)
핵심 요약
- 핵심 비즈니스 로직(
Core
)은 외부 요소(데이터베이스, 프레임워크 등)와 완전 분리되어야 한다. - 포트(Ports)와 어댑터(Adapters)를 통해 외부 시스템과의 상호작용을 명확히 정의하고 구현한다.
- 테스트 용이성, 기술 변경 유연성, 유지보수성 향상이 주요 장점이다.
섹션별 세부 요약
1. 헥사곤 아키텍처의 정의
- 헥사곤 아키텍처(Ports and Adapters)는 비즈니스 로직을 외부 요소로부터 완전히 분리하는 아키텍처 패턴이다.
- 비즈니스 로직(
Core
)은 도메인 로직만 포함하며, 외부 요소와의 상호작용은 포트와 어댑터를 통해 이루어진다. - 시각적 구조는 헥사곤 형태로 표현되지만, 핵심은 핵심 로직의 외부 독립성에 있다.
2. 전통적인 아키텍처의 문제점
- 강한 결합(Tight Coupling)으로 인해 비즈니스 로직이 특정 데이터베이스나 프레임워크에 종속적인 경우가 많다.
- 이로 인해 유지보수성 저하 및 확장성 문제가 발생한다.
3. 헥사곤 아키텍처의 핵심 구성 요소
- Core(비즈니스 로직): 실제 작업을 수행하는 핵심 부분이다.
- Ports(인터페이스): 외부 시스템과의 상호작용을 정의하는 계약(예:
registerUser()
)을 제공한다. - Adapters(구현체): 포트의 인터페이스를 외부 시스템(예: HTTP, CLI)에 맞게 구현한다.
4. 헥사곤 아키텍처의 장점
- 기술 변경 용이성: 데이터베이스나 프레임워크를 변경할 때 코어 로직이 영향을 받지 않는다.
- 테스트 용이성: 외부 요소 없이 코어 로직만 단위 테스트할 수 있다.
- 유지보수성: 관심사 분리가 명확해져 코드 수정 및 확장이 용이하다.
5. 실무 예시(사용자 등록 API)
- Core: 사용자 등록 비즈니스 로직.
- Port:
registerUser()
인터페이스 정의. - Adapter: HTTP 엔드포인트 또는 CLI 명령어로 구현.
- 데이터베이스 변경 시: 어댑터만 수정하면 된다.
결론
- 헥사곤 아키텍처의 원칙(분리, 결합 해제)을 적용하면 코드베이스의 깔끔함과 확장성을 유지할 수 있다.
- 작은 프로젝트에서는 전체 적용이 과도할 수 있지만, 중대규모 시스템 개발 시 필수적인 아키텍처 패턴이다.
- 예시: SQL에서 NoSQL로 전환 시 어댑터만 수정하고 코어 로직은 그대로 사용 가능하다.