DDD 세레나데 2주차 강의 정리

DDD 세레나데 2주차

전략적 설계

유비쿼터스 언어 - 개발자와 도메인 전문가가 공통적으로 이해 할수 있는 영역의 언어.

  • 모든 상황(회의, 코드, 도메인…)에서 사용하는 언어 (언제, 어디에서나)
  • 기획자나 개발자는 모두 동일하게 이해할 수 있는 언어를 사용해야 한다.
  • 용어사전을 정의 하고 항상 유지 해야 한다.
    • 용어 사전은 죽은 문서가 될 가능성이 많다.
  • 유비쿼터스 언어를 가장 잘 검증해주는 곳은 코드레벨 이다.
    • 개발자의 입장에선 코드레벨에 유비쿼터스 언어가 존재하는것은 좋다.
    • 기획자와 디자이너도 볼 수 있도록 용어가 추가 될 시 용어 사전을 업데이트 해야한다.
  • 용어 사전이란 유비쿼터스 언어를 정리 해둔 사전이다.
    • 프로젝트에 참여하는 모두가 알고 관리 해야한다.

효과적인 모델링

  • RouteService 는 RouteSecification 만족하는 plan을 찾는다.
    • 개발자는 RouteService 에 RouteSecification 전달하면 plan return 이라고 해석이 된다.
      Ex ) 환불은 환불정책을 통해서 환불금액이 결정된다.

한팀, 한 언어

  • 사업팀도 모델링을 이해하지 못한다면 모델링이 잘못된 것이다.

Bounded Context (문맥 경계)

  • 도메인 별로 용어사전이 다르기때문에 동일한 용어를 다른 도메인에서 사용하면 안된다.
  • 모델은 특정한 문장(문맥)에서 완전한 의미를 가지게 된다.
  • 동일한 단어가 발생하면 Bounded Context 나누기 가장 좋은 상태이다
  • Ex) 피자가게있는 피자, 쓰레기통에 있는 피자
    • 피자라는 언어를 사용하지만 문맥에 따라서 피자의 의미가 다르다.

좋은 Bounded Context

  • 하나의 Bounded Context는 하나의 팀만 관리 해야 한다.
    • 의견 마찰 및 도메인 영역의 마찰을 줄이기 위해.
    • 하나의 팀이 여러 Bounded Context는 관리 할 수 있다.
  • 각각의 Bounded Context는 각각의 개발 환경을 가질 수 있다.
    • 명확히 구분되는 경계를 그엇기 때문이다.
    • MSA로 가는 기초.
    • 어떻게 경계를 나눌것인지를 먼저 생각 해야 한다.

Context Map

  • 컨텍스트 맵은 상호 교류하는 시스템의 목록 제공 및 의사소통의 촉매 역할을 한다.
  • Upstream : 데이터 제공. (Api, Event)
  • DownStream : 데이터 수신.

프로젝트와 조직 관계

  • 파트너십 : 두 context가 하나의 트랜잭션으로 묶여있다.
  • 공유 커널 : 상호 의존하는 공유 모델을 관리한다.
  • 고객 - 공급자(costomer - surpplier) : 업스트림(서버 : 공급자) : 다운스트림(클라이언트 : 고객)으로 단방향 의존한다.
  • 순응주의자(Ex_Open API) : 업스트림(서버)가 모든것을 제어한다.
  • 오픈 호스트 서비스 : REST/API, RPC, Socket
  • 분리된 방법 : 의존 없음
  • 큰 진흙공 : 안티 패턴

DDD vs OOP

  • Context 마다 서로 유비쿼터스 언어를 다른 도메인으로 인식한다.
  • OOP는 상속이나 재활용성을 위해서 공통된 데이터를 공유하는 것을 중요시
  • DDD는 도메인 분리를 중시

DDD가 성공할 수 있는 전제 조건

  • DDD는 현업의 절대적인 도움이 필요하다.
  • 이해관계자의 스폰서십이 적극 필요.

이벤트 스토밍

  • 정의
    • 도메인 전문가와 개발자를 학습 과정에 참여시키기 위한 빠른 설계기술
    • 비즈니스 및 비즈니스 프로세스에 중점을 둔다.
      • 클래스와 데이터베이스가 아닌 이벤트와 비즈니스 프로세스에 중점을 둔다.
    • 코드를 없애고 모든 사람을 동일한 수준으로 만드는 시각적 접근

Aggregate

  • 이벤트 스토밍 중 같은 단어가 중복적으로 발생하면 집합으로 만든다.
  • Aggreate 하나의 하나의 엔티티를 가지는것이 좋지만 항상 지켜야 하는것은 아니다.