DDD의 장점 + 액티브 레코드의 간결함 = 도메인 컴포즈 모델(DCM)

by DD
4개월 전
조회수 17

액티브 레코드(Active Record) 방식의 문제점과 DDD(Domain-Driven Design)의 과도한 복잡성을 해결하기 위한 새로운 아키텍처 패턴, DCM(Domain-Composed Models) 소개

도메인 로직(Domain Logic)을 인프라와 독립적인 믹스인(Mixin)으로 구성하고, 데이터베이스(Database)와 관련된 부분은 ORM(Object-Relational Mapping) 모델에서 구현하는 방식

테스트 용이성(Testability)을 확보하면서도, 복잡한 DDD의 절차(Ceremony)를 줄여 개발 생산성을 높이는 데 초점

다양한 아키텍처 패턴(Architectural Pattern)을 비교 분석하여, DCM의 실용적인 장점(Pragmatic Advantages)을 강조

DCM(Domain-Composed Models)의 핵심 원리

DCM은 도메인 로직(Domain Logic)인프라 독립적인 믹스인(Infrastructure-Agnostic Mixins)으로 분리하여, 비즈니스 규칙을 명확하게 표현한다. 믹스인(Mixin)은 필요한 데이터를 추상적인 훅(Hook)으로 정의하고, 구체적인 ORM(Object-Relational Mapping) 클래스에서 데이터베이스(Database) 관련 로직을 구현한다. 이러한 구조는 도메인 로직(Domain Logic)인프라(Infrastructure) 간의 단방향 의존성(One-Way Dependency)을 유지하며, 테스트 용이성을 높인다.

액티브 레코드(Active Record)와 DDD(Domain-Driven Design)의 비교

액티브 레코드(Active Record) 방식은 구현이 간단하지만, 비즈니스 규칙(Business Rules)이 복잡해질수록 모델과 인프라(Infrastructure)가 강하게 결합되는 문제가 있다. 반면, DDD(Domain-Driven Design)는 높은 수준의 분리(High Decoupling)를 제공하지만, 초기 개발 단계에서 과도한 절차(Ceremony)와 복잡성으로 인해 개발 속도를 저해할 수 있다. DCM은 이러한 두 가지 방식의 장점을 결합하여, 실용적인 절충안(Pragmatic Middle Ground)을 제시한다.

DCM(Domain-Composed Models)의 테스트 용이성

DCM은 믹스인(Mixin)을 통해 도메인 로직(Domain Logic)을 정의하므로, 데이터베이스(Database) 연결 없이도 쉽게 테스트할 수 있다. 테스트 스텁(Test Stub)을 사용하여 믹스인(Mixin)이 의존하는 데이터를 모의(Mock)하고, 비즈니스 규칙(Business Rules)의 정확성을 검증할 수 있다. 이러한 구조는 테스트 코드(Test Code)의 유지보수성을 높이고, 개발자가 빠른 피드백 루프(Fast Feedback Loops)를 통해 코드의 품질을 향상시키는 데 기여한다.

DCM(Domain-Composed Models)의 적용 사례

호텔 예약 시스템(Hotel Booking System)을 예시로, DCM의 구현 방식을 설명한다. BookingORMChargeORM과 같은 ORM(Object-Relational Mapping) 클래스를 정의하고, BookingLifecycleMixin과 같은 믹스인(Mixin)을 통해 도메인 로직(Domain Logic)을 구현한다. _has_unpaid_charges()와 같은 훅(Hook)을 통해 데이터베이스(Database)에서 필요한 데이터를 가져오고, close() 메서드를 통해 예약 상태를 변경하는 로직을 구현한다. 이러한 구조는 코드의 가독성(Readability)을 높이고, 유지보수를 용이하게 한다.

Domain-Composed Models (DCM): a pragmatic middle ground between Active Record and Clean DDD