Post

8주2일차_MSA_DDD설계_및_구현_실습

8주2일차_MSA_DDD설계_및_구현_실습

필기 내용

1.1 DDD의 핵심 개념

  • 도메인(Domain): 비즈니스 문제 영역
  • 모델(Model): 도메인을 반영한 개념적 구조
  • 서브도메인(Subdomain): 도메인의 하위 개념
  • 유비쿼터스 언어(Ubiquitous Language): 비즈니스와 개발자가 공유하는 공통 언어 (업무 용어를 사용)

1.3 마이크로서비스 아키텍처(MSA)와의 관계

  • DDD의 바운디드 컨텍스트 개념이 MSA의 서비스 경계와 일치
  • 독립적인 컨텍스트를 서비스로 나누어 확장성과 독립성을 보장

1.5 전략적 설계 (Strategic Design)

DDD에서는 전략적 설계(큰 그림)와 전술적 설계(세부 구조)를 함께 사용해야 합니다.

  • 전략적 설계: 도메인의 경계를 정의하고 MSA와 같은 아키텍처 설계
  • 전술적 설계: 객체 지향적으로 도메인 모델을 설계하여 비즈니스 로직을 코드에 반영

Examples:

  1. 전략적 설계 → “주문(Order), 결제(Payment), 배송(Shipping)”을 개별 컨텍스트로 분리
  2. 전술적 설계 → Order, OrderItem, OrderRepository 등의 도메인 모델을 설계

두 가지를 함께 활용하면 복잡한 비즈니스 로직을 효율적으로 관리 가능합니다. 1.5.1 Bounded Context

  • 도메인 모델이 적용되는 경계를 명확하게 정의하는 개념
  • 같은 개념(예: “Order”)이라도 바운디드 컨텍스트에 따라 의미가 다를 수 있음
  • 각각의 컨텍스트는 독립적인 모델과 용어를 유지해야 함
1
2
3
4
5
  예시: E-commerce 시스템의 Bounded Context  
			- User Context: 사용자 관리, 인증/인가  
			- Order Context: 주문 처리, 결제  
			- Product Context: 상품 관리, 재고  
			- Delivery Context: 배송 관리

1.5.2 Context Mapping

  • 여러 개의 바운디드 컨텍스트가 어떻게 상호 작용하는지 나타냄
  • 조직 간 협업 관계와 의존성을 이해하는 데 도움을 줌

1.6.3 Aggregate

  • 관련된 Entity와 Value Object를 하나의 단위로 묶은 개념
  • 데이터 일관성을 유지하기 위해 한 번에 한 aggregate 루트만 변경 가능
  • 예: Order aggregate → Order(entity) + OrderItem(entity) + ShippingAddress(value object)
    • Order가 aggregate 루트이며, 주문 상태 변경을 관리
    • OrderItem과 ShippingAddress는 Order를 통해서만 변경 가능

2. Event Storming을 활용한 e-commerce 도메인 설계

비즈니스 도메인을 분석하고 모델링하는 협업 기반 방식

  • 개발자, 기획자, 도메인 전문가가 함께 비즈니스 이벤트 중심으로 시스템을 설계
  • 포스트 잇, Miro 와 같은 도구를 활용하여 도메인 흐름을 시각화
  • DDD에서 필수적인 전략적 분석 기법

    1단계 : 주요 비즈니스 이벤트 식별

도메인에서 발생하는 주요 이벤트(Event)를 나열합니다.

  • 이벤트(Event) : 과거형 동사로 표현 (예. 주문이 생성됨, 결제가 완료됨)

    2단계 : Command와 Aggregate 도출

이벤트를 발생시키는 명령(Command)과 이를 처리하는 어그리게이트(Aggregate) 도출

  • 예) 주문이 생성됨 이벤트 분석

3단계 : Actor(사용자 역할) 정의

각 이벤트를 실행하는 “주체(Actor)”를 명확히 식별

  • E-commerce에서의 주요 Actor

4단계 : Aggregate 간 관계 설정

이벤트를 처리하는 도메인 객체(Aggregate) 간의 관계를 도출

  • E-commerce에서의 주요 Aggregate 도출

Action Plan

수업 내용 필기 정리.

This post is licensed under CC BY 4.0 by the author.