하ексagonal 아키텍처 요약
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
아키텍처 패턴
대상자
- 프로젝트 아키텍처 설계에 관심 있는 개발자 및 시스템 설계자
- 핵심 비즈니스 로직과 외부 의존성 분리 원칙을 이해하고 적용하고자 하는 중급 이상 개발자
- 테스트 용이성과 유연성 확보를 목표로 하는 팀
핵심 요약
- 핵심 원칙:
"핵심 비즈니스 로직(코어)"과
"외부 의존성(데이터베이스, UI 등)"`을 완전히 분리하여 단일 책임 원칙을 강화 - Ports: 코어가 제공하는 인터페이스로,
interface
키워드로 정의된 계약(Contract) - Adapters: 외부 시스템과 코어를 연결하는 번역자 역할, 두 유형(
Primary Adapters
,Secondary Adapters
)으로 구분
섹션별 세부 요약
1. 서론: 하ексagonal 아키텍처의 목적
- 분리의 필요성: 데이터베이스, UI, 외부 서비스 등과의 의존성 해소를 목표
- 분리의 이점: 테스트 용이성, 유연성, 유지보수성 향상
- 기존 개념과의 연관성: Separation of Concerns 원칙의 확장형
2. Ports: 코어의 인터페이스 정의
- 포트의 역할: 코어가 제공하는 규약/프로토콜 (예:
type Sentence
,move Cursor
) - 인터페이스 설계:
interface
키워드로 정의된 계약 (예:SaveUserRepository
) - 예시: 사용자 입력을 처리하는
REST API Controller
가Primary Adapter
로 작동
3. Adapters: 외부와 코어 연결
- Primary Adapters: 사용자 입력을 코어로 전달 (예:
Keyboard
,Mouse
,REST API Controller
) - Secondary Adapters: 코어가 외부 시스템과 연결 (예:
PostgresUserRepositoryAdapter
,CloudStorageUploader
) - 구현 방식: 코어가 정의한 인터페이스를 구현하는 외부 컴포넌트
4. 노트 앱을 통한 유사성 설명
- 코어(노트 앱):
type Sentence
,Save Data
등의 포트 정의 - Primary Adapter: 외부 키보드/마우스가
USB HID
프로토콜을 준수하여 입력 처리 - Secondary Adapter: 외부 저장 장치(
HDD
,Cloud
)를 통해 데이터 저장
결론
- 실무 적용 팁:
Primary/Secondary Adapter
구분을 통해 테스트 용이성 확보- 코어에
interface
기반의 포트 정의를 강제하여 의존성 분리 - 확장성과 유연성을 위해 아키텍처 패턴을 기반으로 설계
- 예:
SaveUserRepository
인터페이스를 통해Postgres
,Firebase
등 다양한 저장소와 호환 가능