1. DDD 그게 뭔데 (DDD 개념 찍어 먹어보기 편)
고명석 a.k.a R.bert Ko
2. 자기 소개
• Incheon Dev‘s 커뮤니티 운영 중
• 현재 Mondrian AI Backend / Infra Engineer
• 종합 4년차 개발자
• WPF를 이용한 Vision Machine 개발 1년 4개월
• 웹 프런트 개발 1년 1개월
• 웹 백엔드 개발 / 인프라 1년
3. 제 인생 목표는 토발즈, 밥 형 보다 유명해지기,
하루에 발렌타인 30년산 한 잔씩 마시는 삶
13. Domain은 저희가 아는 그런 IPv4, IPv6를 이해하기 쉽게 만든 그런 녀석이 아닙니다.
DDD에서의
Domain은 소프트웨어로 해결하고자 하는 영역을 말합니다
14. Post
Views
Comment
Likes
게시판을 예로 들면 도메인은 다음과 같을 수 있습니다.
Post라는 도메인을 루트로, 하위에 Views, Comment, Likes 등과 같은 Domain Model들을 구성 할 수 있죠.
물론 Views, Comment, Like에도 하위 Domain Model들을 구성할 수 있습니다.
15. DDD에는
다음과 같은 layer들로 구성이 되어있습니다.
User Interface (Presenter)
Application
Domain
Infrastructure
사용자로부터 요청을 받아서
하위 레이어 전달 및 반환.
Domain 모델을 이용하여 기능 구현.
Business logic은 Domain에서 구현한다.
Domain에 대한 핵심 Business
객체의 state 및 logic 제공
구현 기술에 대한 영속성 구현
18. Entity
• 식별자가 존재하며, 식별자를 제외한 나머지 값들은 변경가능한 (mutable) 오브젝트
• 해당 영역의 business logic 구현을 담당
• id값 외에 다른 값들이 같아도 같은 인스턴스가 아님!
• ex) Post, Comment
Domain Layer에는
Value
• 식별자는 존재하지 않으나, 값들이 불변인 오브젝트
• 개념적으로 완전한 하나를 표현할 때 사용
• 오브젝트의 모든 값이 같으면 서로 같은 인스턴스!
• Entity나 또 다른 VO의 속성으로서 사용된다
• ex) Views, Likes
19. 예를 들어,
Post {
id: 2,
title: “Post”,
context: “Hello~” ,
views: Views(8)
}
Post {
id: 1,
title: “Post”,
context: “Hello~” ,
views: Views(3)
}
Entity
Post {
id: 1,
title: “Post2”,
context: “Hello…” ,
views: Views(5)
}
Post {
id: 1,
title: “Post”,
context: “Hello~”,
views: Views(3)
}
Entity
20. 예를 들어,
Views {
count: 3
}
Views {
count: 3
}
VO
Views {
count: 4
}
Views {
count: 3
}
VO
21. • 애그리거트에 속한 모든 객체의 일관성 유지를 위해, 애그리거트에 대표하는 Entity를
애그리거트 루트로 갖고 있는다.
• 복잡한 도메인을 단순한 구조로 만들어준다
• 한 애그리거트에 속한 객체는 다른 애그리거트에 속할 수 없다
• 서로 다른 애그리거트는 서로를 관리 할 수 없다
Aggregate는?
수많은 Domain Model들의 복잡성을 줄이기 위해 상위 수준으로 묶은 군집입니다.
23. 다음에 이어서 배울 내용은?
• DIP (Denpendency Inversion Principle)과 Infrastructure Layer, Repository
• Business Logic 구현 예제
• Domain Service
• Aggregate간 Transaction 관리
• Bounded Context