Modeling
Why: 왜 모델링(Modeling)이 필요한가?
현실 세계의 비즈니스는 무수히 많은 정보와 복잡한 규칙으로 얽혀 있어, 이를 있는 그대로 소프트웨어로 옮기는 것은 불가능에 가깝습니다. 따라서 특정 비즈니스 문제를 해결하는 데 불필요한 정보는 과감히 버리고, 핵심만을 추출하여 단순화(추상화)하는 작업이 반드시 필요합니다. 잘 구축된 모델은 복잡성을 통제하고, 개발자와 도메인 전문가가 완벽히 동일한 목적을 공유하게 만들어 줍니다.
추상화(Abstraction)의 훌륭한 비유 지도를 그릴 때 산의 모든 나무를 그리지 않고 길과 등고선만 그리는 것과 같습니다. 모델링은 비즈니스 목적에 맞게 대상의 특정 측면만 의도적으로 강조하는 행위입니다.
What: 모델링이란 무엇인가?
- Modeling(모델링)은 거대하고 복잡한 도메인을 소프트웨어로 구현할 수 있는 논리적인 구조로 재창조하는 과정입니다. 도메인 주도 설계(DDD)에서는 이 과정을 시스템의 큰 그림을 그리는 전략적 모델링(Strategic Modeling)과 내부를 코드로 구현하는 전술적 모델링(Tactical Modeling)으로 나누어 접근합니다.
- 전략적 모델링: 시스템을 큰 덩어리로 나누고 경계를 정하는 거시적 작업이며, 보편 언어(Ubiquitous Language), 바운디드 컨텍스트(Bounded Context), 컨텍스트 맵(Context Map)이 여기에 속합니다.
- 전술적 모델링: 나누어진 각 컨텍스트 내부의 비즈니스 로직을 실제 코드로 정교하게 설계하는 미시적 작업입니다.
How: 전략과 전술 모델링의 실제 적용 예시
현대 아키텍처에서 전략적 모델링은 시스템을 독립적인 마이크로서비스(MSA) 단위로 도출하는 핵심 기준이 됩니다. 반면 전술적 모델링은 각 마이크로서비스 내부에서 상태를 갖는 엔티티(Entity), 불변의 값 객체(Value Object), 이들을 묶는 애그리거트(Aggregate) 등의 패턴을 사용하여 도메인을 코드로 증명합니다.
이커머스 시스템의 모델링 예시 전체 쇼핑몰을 '주문'과 '배송'이라는 독립된 서비스로 나누고 관계를 정의하는 것은 전략적 모델링입니다. '주문' 서비스 내부에서 주문 항목과 총액 계산 로직을 Aggregate로 묶어 코드로 구현하는 것은 전술적 모델링입니다. [상품(Product) 도메인 기준 전략/전술 모델링 추가 예시] - 전략적 모델링 (상품 분리): 거대한 쇼핑몰 비즈니스에서 고객에게 상품을 보여주는 '상품 전시(Catalog)' 컨텍스트와 창고의 수량을 관리하는 '상품 재고(Inventory)' 컨텍스트를 분리하고 경계를 정의합니다. - 전술적 모델링 (상품 구현): 분리된 '상품 전시' 서비스 내부에서, 식별자를 갖는
Product엔티티와 가격을 나타내는Money값 객체(Value Object)를 설계하여 코드로 정교하게 구현합니다.