본문 바로가기

TIL(Today I Learned)

TIL-231116(DDD, 도메인 주도 설계)

📝오늘 공부한 것

  • 'DDD 도메인 주도 설계' 공부하기
  • 커리어톤 참여
  • 프로그래머스 문제풀기

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

  • 실제 업무에서 사건이 발생하는 집합인 도메인을 중심으로 설계하는 방법
  • 해당 도메인과 일치하도록 소프트웨어를 모델링하는 데 중점을 둔 소프트웨어 설계 접근 방식(wikipedia)
  • 한가지 중요한 특징은 소프트웨어 코드의 구조와 언어(클래스 이름, 클래스 메서드, 클래스 변수)가 비즈니스 도메인의 용어를 일치시켜 나간다는 점이다.
  • 보편적인(ubiquitous) 언어의 사용이다. 도메인 전문가와 소프트웨어 개발자 간의 커뮤니케이션 문제를 없애고 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 구성된 단일화된 언어체계를 구축해나가는 과정을 말한다. 이로서 분석 작업과 설계 그리고 구현에 이르기까지 통일된 방식으로 커뮤니케이션이 가능해진다.

DDD는 계속해서 발전하는 모델의 구현에 초점을 맞춘다.

도메인 주도 설계는 다음 목표를 기반으로 한다.

    - 핵심 도메인 및 도메인 논리에 프로젝트의 주요 초점을 준다.

    - 도메인 모델에 기반한 복잡한 디자인

    - 특정 도메인의 개념적 모델을 계속해서 개선하기 위해 기술 전문가와 도메인 전문가 간의 창의적인 협력을 한다.

    - Loosly coupling, High cohesion : 애플리케이션 또는 그 안의 모듈간의 의존성은 최소화하고, 응집성은 최대화

 

✔도메인 : 일반적인 요구사항, 소프트웨어로 해결하고자 하는 문제 영역

 

  • 쇼핑몰을 예시로 들면, 구매자와 주문하는 도메인, 판매자가 관리하는 도메인 등이 있을 수 있다. 이러한 도메인들이 서로 상호작용하며 설계하는 것이 도메인 주도 설계이다.
  • 도메인 주도 설계에서, 도메인은 기준에 따라 각각 분리되어 있다. DDD에서는 같은 객체들이 존재할 수 있는데, 예를 들어 구매자의 입장에서는(name, price)와 같은 객체 정보를 담지만, 판매자의 입장에서는 (color, size, madeCountry) 등이 있을 수 있다. 즉, 상황(사용자 등)에 따라 객체의 역할이 바뀔 수 있는 것이 DDD이다.

 

 

DDD는 Strategic Design과 Tatical Design으로 나눌 수 있다고 한다.
 Strategic Design은 개념 설계이고 Tatical Design은 프로그래밍하기 위한 구체적 설계라고 할 수 있다.
DDD는 스프링을 시작했을 때 한번 공부해본 적이 있는데도, Strategic Design과 Tatical Design으로 나눠진다는 것은 이번에 공부하면서 처음알게 되었다. 다음에는 이 두 디자인에 대해서 더 공부를 해봐야겠다.

오늘은 개념이 제대로 이해가가지 않은 부분이 많아서 전체를 정리하기 어려웠다ㅠㅠ
다음에 더 자세히 공부를 하고 정리를 제대로 해봐야겠다..

 

 

 

 

 

 

 

 

 

 

References :

https://ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EC%A3%BC%EB%8F%84_%EC%84%A4%EA%B3%84

https://happycloud-lee.tistory.com/94

https://blog.naver.com/PostView.naver?blogId=seek316&logNo=222710251462