DDD(Domain Driven Design) 도메인 주도 설계

Ena JJJ·2023년 5월 17일
0
post-custom-banner

도메인

  • 소프트웨어로 해결하고자 하는 문제영역
  • 소프트웨어를 사용하는 사용자의 활동이나 관심사와 관련되어 있다.
  • 소프트웨어 산업은 다른 산업 내에서 발생하는 다양한 비즈니스 문제를 해결한다

ex) 쇼핑몰을 구축할 때, 도메인은 전자상거래이다

소프트웨어는 사람의 욕망과 욕구를 해결하려고 만든 창조물이다. 사람들의 욕망과 욕구가 개발자에게 전달됐을 때 우리는 그것을 도메인이라 부른다.

도메인 모델

  • 모델은 목적을 위해 현실 세계에 존재하는 것을 가공하고 편집하여 우리에게 정보를 제공한다.
  • 특정 다이어그램이 아니라 다이어그램으로 전달하려는 아이디어이자 목적을 가진 의사소통 수단이다.
  • 이 의사소통 수단은 회의, 기획, 디자인, 개발에 사용되어야 한다.


바운디드 컨텍스트

  • 해결 영역 solution space
  • 관심사를 분리하고 격리하여 문제 해결에 집중할 범위를 정한다.

해결영역을 구분하기!!!!!!!

애그리거트 (비즈니스 규칙)

  • 시스템이 기대하는 책임을 수행하며 일관성 을 유지하는 단위
  • 일관성은 항상 참이어야하는 속성 을 유지함으로써 달성된다.
  • 명령을 수행하기 위해 함께 조회하고 업데이트해야 하는 최소 단위

비관적 잠금

  • 한 번에 한 명의 사용자만 처리할 수 있도록 데이터베이스의 레코드를 독점한다
  • 성능이 저하되고 교착 상태(deadlock)가 발생할 수 있다

낙관적 잠금

  • 애그리거트에서 무엇이든 변경하면 버전 증가가 발생해야 한다.
  • OPTIMISTIC_FORCE_INCREMENT를 사용하거나 버전을 수동으로 증가시킨다

결과적 일관성

  • 일시적으로 불변식이 깨지지만 최종적으로 지킬 수 있도록 노력한다
  • 배치방식과 이벤트방식
post-custom-banner

0개의 댓글