소프트웨어 아키텍쳐 방법론을 공부하시다 보면 DDD 패턴에 대해서 많이 듣게 되실 텐데요. 이 번 포스팅에서는 DDD와 헥사고날 설계 패턴의 기본 이해에 대해 설명해 보겠습니다.
DDD(Domain-Driven Design)의 헥사고날 아키텍처(Hexagonal Architecture, 또는 Ports and Adapters Architecture)는 소프트웨어 설계 패턴으로, 응용 프로그램의 핵심 비즈니스 로직을 외부의 기술적인 요소(예: UI, 데이터베이스, 메시징 시스템 등)로부터 분리하여 독립성을 높이는 방법론입니다.
이 아키텍처의 핵심 개념과 설계 원칙은 다음과 같습니다:
1. 핵심 개념
- 중심(Core): 도메인 로직과 애플리케이션의 비즈니스 규칙을 담고 있는 부분입니다. 이 부분은 외부 환경(데이터베이스, 사용자 인터페이스 등)에 의존하지 않습니다.
- 포트(Ports): 코어가 외부와 상호작용하기 위한 추상화된 인터페이스입니다. 이 포트는 코어에서 제공하는 서비스나 기능을 외부에서 사용할 수 있도록 정의하거나, 외부 서비스를 코어에서 호출할 수 있도록 설계됩니다.
- 어댑터(Adapters): 포트를 구현하는 외부 의존성 계층입니다. 예를 들어, 웹 컨트롤러(UI), 데이터베이스 연결(JPA), 메시징 시스템(Kafka) 등이 여기에 포함됩니다.
2. 구조
헥사고날 아키텍처는 일반적으로 육각형으로 표현되며, 다음과 같은 레이어로 구성됩니다
- 코어 (Core): 도메인 모델 애플리케이션 서비스
- 포트 (Ports):
- 입력 포트: 코어가 외부 요청을 받을 때 사용하는 인터페이스
- 출력 포트: 코어가 외부 서비스를 호출할 때 사용하는 인터페이스 - 어댑터 (Adapters):
- 입력 어댑터: 사용자의 요청을 입력 포트로 전달하는 역할 (예: REST API Controller)
- 출력 어댑터: 출력 포트에서 정의된 요청을 외부 시스템과 연동 (예: Repository 구현체)
3. 특징
- 테스트 용이성: 코어가 외부 의존성에서 독립적이므로, 도메인 로직에 대한 단위 테스트 작성이 쉽습니다.
- 기술 독립성: 기술 스택(DBMS, 프레임워크 등)의 변경이 코어에 영향을 미치지 않습니다.
- 유지보수성: 외부 의존성이 변경될 경우 어댑터만 수정하면 되므로, 유지보수가 용이합니다.
- 확장성: 새로운 인터페이스나 기능을 추가할 때 기존 코드의 영향을 최소화할 수 있습니다.
4. 예시
- 애플리케이션: 도서 관리 시스템
- 코어:
- Book: 도메인 엔티티
- BookService: 도서 등록, 조회 등 비즈니스 로직 - 포트:
- 입력 포트: BookService를 호출하기 위한 인터페이스 (예: BookApplicationPort)
- 출력 포트: 데이터 저장소와 상호작용하기 위한 인터페이스 (예: BookRepositoryPort)
어댑터:
- 입력 어댑터: REST API 컨트롤러 (Spring Controller)
- 출력 어댑터: JPA Repository 구현체 (Spring Data JPA)
5. 장점과 단점
- 장점:
- 코드의 가독성과 유지보수성이 높아짐
- 테스트 중심 개발(Test-Driven Development, TDD)에 적합
- 시스템의 유연성과 재사용성 향상 - 단점:
- 초기 설계와 구현이 복잡할 수 있음
- 모든 프로젝트에 적용하기엔 과할 수 있음 (특히 작은 프로젝트)
6. 헥사고날 아키텍처와 DDD
헥사고날 아키텍처는 DDD의 철학과 잘 맞아떨어집니다. 도메인을 중심으로 시스템을 설계하고, 기술적 의존성을 도메인 외부로 밀어내는 구조를 지원하기 때문입니다.
헥사고날 아키텍처는 특히 복잡한 비즈니스 로직을 다루거나, 다양한 기술 스택의 변화에 대응해야 하는 프로젝트에서 매우 유용합니다.
마지막으로 해당 내용을 공부할 수 있는 책을 하나 추천드려 보겠습니다. 가볍게 개념을 익히기 좋은 책으로 입문용으로 적합한 도서 입니다.
https://product.kyobobook.co.kr/detail/S000001766446
도메인 주도 설계 철저 입문 | 나루세 마사노부 - 교보문고
도메인 주도 설계 철저 입문 | 이해하기 쉬운 패턴부터 학습하자! 도메인 주도 설계를 쉽게 이해할 수 있는 입문서!초심자라도 이해하기 쉽고 실천하기도 쉬운 패턴부터 시작해 구체적인 예제와
product.kyobobook.co.kr
'알쓸잡학' 카테고리의 다른 글
이스라엘과 예맨의 관계 (0) | 2024.11.24 |
---|---|
지역주택조합제도에 대한 이해와 유의점 (0) | 2024.11.23 |
전매제한의 뜻과 유의사항 (0) | 2024.11.21 |
런닝의 효과와 올바른 운동법 (0) | 2024.11.20 |
아임웹(imweb)과 윅스(Wix) 비교 (0) | 2024.11.19 |