"빈혈 모델(Anemic Domain Model)"은 DDD(Domain-Driven Design)의 개념과 대조되는 설계 방식입니다. 즉, 빈혈 모델은 DDD의 원칙을 따르지 않는 모델로 볼 수 있습니다.
빈혈 모델(Anemic Domain Model)이란?
빈혈 모델은 객체가 비즈니스 로직 없이 데이터만을 보유하고, 모든 로직이 서비스 계층에 집중되는 구조를 의미합니다. 주로 다음과 같은 특징이 있습니다:
- 엔티티(Entity): Getter/Setter만 존재하고, 비즈니스 로직이 없음.
- 서비스(Service): 모든 도메인 로직이 서비스 계층에서 수행됨.
- DTO(Data Transfer Object)와 유사: 객체는 데이터를 전달하는 역할만 함.
이런 구조는 객체지향적이라기보다는 절차지향적인 설계에 가까우며, DDD에서 권장하는 "도메인 모델 패턴(Rich Domain Model)"과는 반대되는 개념입니다.
DDD에서는 빈혈 모델을 어떻게 볼까?
DDD에서는 빈혈 모델을 안티 패턴(Anti-pattern) 으로 간주하는 경우가 많습니다. DDD의 핵심은 "도메인 모델이 자신의 상태와 비즈니스 로직을 함께 가지도록 하는 것"입니다. 이를 풍부한 도메인 모델(Rich Domain Model) 이라고 합니다.
빈혈 모델의 문제점
- 캡슐화(Encapsulation) 부족: 데이터와 비즈니스 로직이 분리되어 유지보수가 어려움.
- 응집도(Cohesion) 저하: 도메인 로직이 서비스 계층에 집중되어 재사용성이 떨어짐.
- 객체지향적이지 않음: 객체가 단순한 데이터 구조로 전락함.
DDD에서 권장하는 구조: 풍부한 도메인 모델(Rich Domain Model)
- 엔티티(Entity)와 밸류(Value Object) 가 비즈니스 로직을 포함.
- 도메인 서비스(Domain Service): 특정 엔티티에 포함하기 어려운 로직을 별도로 관리.
- 응집도 높은 모델을 유지하여 유지보수성과 확장성을 높임.
언제 빈혈 모델을 사용할 수 있을까?
빈혈 모델이 항상 나쁜 것은 아닙니다. 다음과 같은 경우에는 빈혈 모델이 적절할 수 있습니다:
- 단순한 CRUD 시스템: 도메인 로직이 거의 없는 단순한 애플리케이션.
- 트랜잭션 스크립트(Transaction Script) 패턴이 더 적합한 경우: 복잡한 도메인 로직이 필요하지 않은 환경.
하지만 DDD를 적용하려면 가능한 한 도메인 모델이 도메인 로직을 가지도록 설계하는 것이 중요합니다.
결론
- 빈혈 모델은 DDD의 도메인 모델 패턴과 반대되는 개념이며, 일반적으로 DDD의 원칙을 따르지 않음.
- DDD에서는 도메인 모델이 로직을 포함하는 풍부한 도메인 모델(Rich Domain Model) 을 권장함.
- 하지만 빈혈 모델이 무조건 나쁜 것은 아니며, 단순한 CRUD 애플리케이션에서는 유용할 수 있음.
따라서 빈혈 모델을 사용하고 있다면, 해당 시스템이 DDD를 적용해야 하는지 고민해보고 적절한 패턴을 선택하는 것이 중요합니다. 🚀
'프로그래밍' 카테고리의 다른 글
Redis 명령어 정리 (0) | 2025.04.17 |
---|---|
사가(Saga) 패턴이란? (0) | 2025.03.15 |
아웃박스 패턴 (Outbox Pattern)이란? (0) | 2025.03.14 |
Anemic Model (빈혈 모델)란? (0) | 2025.03.14 |
Keep-Alive란? (2) | 2025.03.02 |