728x90
개인 학습용 토이프로젝트를 헥사고날 구조로 만들다가 MVC , DDD, Hexagonal 정확하게 어떤 차이가 있는지 궁금하여 작성하게 되었다.
1.MVC (Model-View-Controller)
가장 기본적인 아키텍처 패턴
- 개념:
- Model: 애플리케이션의 데이터와 비즈니스 로직을 담당합니다. 데이터베이스와 상호작용하며, 데이터의 상태를 관리합니다.
- View: 사용자에게 보여지는 UI를 담당합니다. Model의 변화를 감지하여 화면을 갱신합니다.
- Controller: Model과 View 사이의 연결고리 역할을 합니다. 사용자의 요청(입력)을 받아 Model을 업데이트하거나, View를 제어합니다.
- 장점:
- 높은 가독성: 역할이 명확하게 분리되어 있어 코드를 이해하기 쉽습니다.
- 쉬운 학습: 간단한 구조로 인해 초보자도 빠르게 익힐 수 있습니다.
- 폭넓은 적용성: 웹, 모바일, 데스크톱 등 다양한 환경에서 보편적으로 사용됩니다.
- 단점:
- Fat Controller 문제: 비즈니스 로직이 커지면서 Controller가 비대해지는 경향이 있습니다.
- Model의 책임 과부하: Model이 데이터와 비즈니스 로직을 모두 담당하게 되면서 복잡해질 수 있습니다.
- 테스트의 어려움: View와 Controller가 밀접하게 연결되어 있어 단위 테스트가 복잡해질 수 있습니다.
소규모 프로젝트 또는 단순 기능 애플리케이션 개발 및 빠른 프로토 타입 필요할때 쓰면 좋을것 같다.
2. DDD (Domain-Driven Design)
도메인 즉 비즈니스 중심으로 설계하는 방법론
- 개념:
- Ubiquitous Language (유비쿼터스 언어): 개발자와 비즈니스 전문가가 함께 사용하는 공통의 언어.
- Domain Model: 비즈니스 규칙과 개념을 담고 있는 핵심 모델.
- Aggregates, Entities, Value Objects: 도메인 모델을 구성하는 핵심 요소들.
- 장점:
- 복잡한 비즈니스 로직에 최적화: 복잡한 도메인을 명확하게 모델링할 수 있습니다.
- 유지보수 용이: 비즈니스 로직이 변경되어도 유연하게 대응할 수 있습니다.
- 팀 간의 협업 강화: 유비쿼터스 언어를 통해 개발자와 비즈니스 전문가의 소통을 원활하게 합니다.
- 단점:
- 높은 초기 학습 비용: DDD의 개념과 원칙을 이해하는 데 시간이 걸립니다.
- 과도한 복잡성: 단순한 프로젝트에 적용하면 오히려 불필요한 복잡성을 초래할 수 있습니다.
- 구현 난이도: 설계부터 구현까지 많은 노력이 필요합니다.
도메인 로직이 복잡하고 핵심적인 애플리케이션 개발 및 장기적으로 유지보수가 중요한 프로젝트에 사용하면 좋을것 같다.
3. 헥사고날 아키텍처 (Hexagonal Architecture)
port와 adapter사용하여 애플리케이션 핵심로직과 외ㅜ시스템 분리(포트 어댑터 아키텍처라고도부름)
- 개념:
- 내부 (Core Domain): 애플리케이션의 핵심 비즈니스 로직.
- 외부 (Adapters): 외부 시스템(DB, API, UI 등)과의 상호작용을 담당.
- 포트 (Ports): 내부와 외부를 연결하는 인터페이스. 내부 로직은 포트를 통해 외부와 통신합니다.
- 장점:
- 높은 유연성: 외부 시스템(예: 데이터베이스)이 변경되어도 내부 로직에는 영향을 주지 않습니다.
- 쉬운 테스트: 외부 의존성을 제거하여 핵심 로직에 대한 단위 테스트가 용이합니다.
- 도메인 로직 보호: 핵심 비즈니스 로직이 외부 환경으로부터 철저히 분리됩니다.
- 단점:
- 복잡한 구조: 포트와 어댑터 개념으로 인해 초기 설계가 복잡하게 느껴질 수 있습니다.
- 오버 엔지니어링: 간단한 프로젝트에 적용하면 오히려 비효율적일 수 있습니다.
향후 외부 시스템 변경 가능성이 높고, 테스트코드 중요성이 높은 프로젝트 , DDD와 함께 사용하여 도메인 모델의 경계를 명확히 하고 싶을때 쓰면 좋을것 같다.
| 특징 | MVC | DDD | Hexagonal |
| 핵심 | 역할 분리 (UI 중심) | 비즈니스 도메인 | 내부 외부 분리(의존성 관리) |
| 적합 규모 | 소규모, 단순 프로젝트 | 대규모, 복잡한 프로젝트 | 유연성과 테스트 중요 프로젝트 |
| 장점 | 쉬운 학습, 높은 가독성 | 복잡한 도메인에 최적화 | 높은 유연성, 쉬운 테스트 |
| 단점 | Fat Controller , 테스트 어려움 | 높은 학습비용,복잡성 | 복잡한 구조, 오버 엔지니어링 |
서로 베타적인 개념 즉 우위 관계는 아니다. 오히려 DDD 개념을 헥사고날로 구현하거나 헥사고날 기반으로 MVC 적용하는 등 유기적으로 결합하여 사용 가능.
가장 중요한것은 목적과 규모에 맞게 선택!
728x90
'코드 > dev' 카테고리의 다른 글
| Domain과 service의 차이 (0) | 2025.08.29 |
|---|---|
| Entity와 Domain의 차이 (5) | 2025.08.29 |
| DB 쿼리를 튜닝하는 여러가지 방법 (1) | 2025.08.26 |
| Redis 큐와 다양한 동시성 제어 방식 정리 (1) | 2025.06.24 |
| DDL 작업 중 복제지연 원인과 해결 방안 (3) | 2025.05.22 |