DDD

고장난 고양이·2022년 7월 25일
0

개발지식

목록 보기
20/25
post-thumbnail

DDD(Domain-Driven-Design)이란?

도메인 주도 설계

도메인(Domain)이란?

  • 사용자가 사용하는 것 , 소프트웨어로 해결하고자하는 문제 영역
  • 비지니스 영역

도메인 주도 설계

  • 도메인을 중심으로 하는 개발 방식 -> 도메인에 관련된 문제를 해결하는 것

  • 복잡한 도메인을 해결하는 것을 높은 우선순위로 생각해서 서비스를 만들어 나가는 방법이다.

-> 도메인의 복잡성을 조금 더 쉽게 다룰 수 있도록 도와주는 도구

-> 복잡한 소프트웨어는 기술 자체의 복잡성 보다는 도메인 자체의 복잡성에 기인

-> 도메인을 가장 잘아는 사람(도메인 전문가)와 어떻게 협업할 것인지가 가장 중요

-> 유비쿼터스 랭귀지, 모델 주도 디자인

개발 프로세스

이곳에서 소프트웨어 개발과 모델링의 불일치가 발생할 수 있다.
-> 개발자는 도메인을 모델링을 추상화 할때 같이 참여하지 않기 때문에

용어 정리

유비쿼터스 랭귀지(보편언어)

도메인에 대한 어휘를 이해관계자(도메인 전문가, 개발자 등) 들이 공통적으로 의미를 이해할 수 있도록 정의 하는 것

모델 주도 설계

  • 분석과 설계를 나누지 않으며 분석/설계/구현의 모든 단계를 관통하는 하나의 모델을 유지

  • 모델링 통해 가져올 수 있는 통찰을 코드에도 적용

  • 모델 == 코드

도메인 모델(Domain Model)

  • 도메인에 대한 구체적인 설계, 도메인을 개념적으로 표현한 것

  • 개념들의 관계를 표현한 모델

  • 문제 영역을 시각화

전략적 설계

  • 복잡한 도메인의 맥락(Context) 경계를 명확히 정의하는 과정

  • Bounded Context안의 도메인 모델에서 보편언어를 개발하는 방법

  • 도메인에서 서브도메인으로 복잡성을 분리 -> 핵심, 지원 도메인 파악

  • 컨택스트 맵핑 기술을 활용해 여러가지 Bounded Context 통합

  • 이벤트 스토밍 기법을 활용해 Bounded Context 식별

Bounded Context (바운디드 컨텍스트)

특정한 도메인 모델이 적용되는 제한된 영역 경계 내에선 동일한 모델을 일관되게 적용

Context Map (컨텍스트 맵)

바운디드 컨텍스트 간의 관계

전술적 설계

  • 전략적 설계에서 더상세한 바운디드 컨텍스트 내부 모델링을 진행

  • Model Driven Design

  • 패턴을 사용해 모델링 - Aggregate 패턴

  • 계층형 아키택처를 통한 도메인 모델 분리

  • 도메인 이벤트를 통해 도메인 보다 명확히 모델링

Aggregate 패턴

  • 연관된 엔티티와 벨류 오브젝트의 묶음, 일관성과 트랜잭션, 분산의 단위

  • 루트 레그리게이트 : 에그리게이트가 제공해야 할 핵심 도메인 기능을 보유 하고 있는 모델

이벤트 스토밍

도메인 전문가와 개발자가 같이 참여 하여 어떻게 전략적으로 설계를 효율적으로 할것인가에 대한 방법이다. 이벤트 스토밍은 서비스에 필요한 모든 사람들이 다같이 모여서 진행을 한다. 개발요소가 아닌 이벤트와 비즈니스 프로세스에 집중한다. 팀 구성원 전체가 서비스 이해도를 증가할 수 있고, 도메인 전문가도 이해의 폭을 다시 넓히고 새로운 통찰력을 얻을수 있다.

참고

https://incheol-jung.gitbook.io/docs/q-and-a/architecture/ddd

https://www.youtube.com/watch?v=VIfNipL5KkU

profile
개발새발X발일지

0개의 댓글