DDD Start! 간단 정리

K PizzaCola·2021년 6월 5일
0

Domain Driven Design

목록 보기
1/1
post-thumbnail

도메인

  • 해결하고자 하는 문제 영역
    • 온라인 서점 등
  • 큰 도메인 아래 하위 도메인으로 나눌 수 있다.
    • 온라인 서점은 주문, 결제, 배송, 혜택, 회원 등등의 하위 도메인으로 구성된다.

도메인 모델

  • 특정 도메인을 개념적으로 표현한 것
  • 주문을 예로하면
    • 주문 번호와 지불할 총 금액이 있고
    • 배송정보 변경 가능
    • 주문 취소 가능
    • 기타

Entity

  • 식별자를 갖는다 (주문 - 주문번호)

Value

  • 값만을 갖는다.
  • 여러 필드 중에서 개념적으로 같은 것들을 묶은 것
  • 필드가 하나라 하더라도, 의미를 명확하게 하기 위해 Value 타입으로 지정할 수 있다.

도메인 용어

  • 도메인 용어를 잘 지정해서 사용하는 것이 매우 중요하다.
  • 메소드에 set을 사용하는 것보다 도메인 용어를 이용하여 도메인 로직을 구현하는 것이 이해하기 쉬운 코드를 작성하는데 도움이 된다.

계층 구조 아키텍처

  • 표현
    • 사용자 요청을 받아 응용 계층에 전달하고, 응용 계층의 처리 결과를 받아온다.
  • 응용
    • 표현계층에서 요청을 받아 도메인 로직 실행
  • 도메인
    • 도메인 로직 구현
  • 인프라스트럭처
    • 외부시스템 연동
    • DB

Aggregate

  • 여러 객체들 중에서 하나로 묶을 수 있는 단위
  • 동일한 라이프사이클
  • Transaction의 단위
  • Aggregate 하나당 Repository 하나

도메인 서비스

  • 여러 Aggregate가 합쳐져서 도메인 로직을 구현해야하는 경우, 어느 객체에서 로직을 구현해야할 지 분명하지 않다.
  • 도메인 서비스를 도입하는 것을 생각해볼 수 있다.

Aggregate 트랜잭션 관리

  • Pessimistic 잠금 (비관적/선점 잠금)
    • 먼저 관련 Aggregate를 잠금
  • Optimistic 잠금 (낙관적/비선점 잠금)
    • Version을 이용하여 트랜잭션을 종료하기 전에 잠금
  • 오프라인 선점 잠금
    • 여러 트랜잭션에 걸쳐 동시 변경을 막는다.
    • 잠금 정보를 저장하는 테이블을 이용

도메인 모델과 BOUNDED CONTEXT

  • 같은 이름을 사용하더라도 도메인마다 갖는 의미가 다를 수 있다.
    • ex) 주문 - 상품 / 배송 - 상품 등등 에서의 상품
  • 역으로, 같은 것 처럼 보이지만 도메인에 따라 용어가 다른 경우
    • 사람 - 회원 - 주문자 - 배송자 등등
  • 이러한 도메인 모델들은 하나의 CONTEXT에서 의미를 갖는다. 이를 BOUNDED CONTEXT라고 한다.

이벤트

  • 상품 주문을 취소하면 환불이 되야한다를 구현한다. 결제 시스템의 경우 일반적으로 외부 시스템이다.
    • 하나의 트랜잭션으로 처리 하려는데, 외부 서비스의 성능에 영향을 받는다.
    • 애초에 Aggregate가 다르므로, 이벤트를 생성하고, 이후에 따로 처리하는 방식으로도 구현할 수 있다.

CQRS

  • Command Query Responsibility Segregation
  • 명령 (수정, 삭제 등등)과 조회를 위한 모델을 따로 구현하는 방법

아직 한번밖에 읽어보지 않았고, 세세하게 읽어보지 않았기 때문에 완전히 이해하진 못했다. 그래도 4챕터, 5챕터의 리포지토리 구현/조회(JPA)를 제외하고는 전체적으로 간략하게나마 이해할 수 있었다. 또한 이전에 Spring Data JDBC나 JdbcTemplate를 사용하면서 피상적으로만 알던 Aggregate 개념들을 조금은 이해할 수 있던 것 같다.

profile
공부하는 개발자입니다.

0개의 댓글