DDD 그게 뭔데 (DDD 개념 찍어 먹어보기 편)
고명석 a.k.a R.bert Ko
자기 소개
• Incheon Dev‘s 커뮤니티 운영 중
• 현재 Mondrian AI Backend / Infra Engineer
• 종합 4년차 개발자
• WPF를 이용한 Vision Machine 개발 1년 4개월
• 웹 프런트 개발 1년 1개월
• 웹 백엔드 개발 / 인프라 1년
제 인생 목표는 토발즈, 밥 형 보다 유명해지기,
하루에 발렌타인 30년산 한 잔씩 마시는 삶
그 중에 밥아저씨… Uncle Bob은 누구?
깔끔한거 좋아하는 아저씨 Robert C. Martin a.k.a “Uncle bob” Martin
• 클린 코드
• 클린 코더
• 클린 아키텍처
• 클린 애자일
저희가 봐야할 건 여기 밑에 있는 클린 아키텍처입니다.
물론 나머지 책들도 명서이니 읽어보시죠
• 프레임워크의 독립적
• 테스트 용이
• UI 독립적, Database 독립적
• 외부 기능 독립적
을 목적으로 밥 삼촌이 내세운 아키텍처인데,
한마디로 의존성(관심사) 분리가 목적이며
대부분의 아키텍처들도 마찬가지!
클린 아키텍처는
• 클린 아키텍처
• DDD
• Hexagonal (Ports & Adapters)
• Onion
등 다양한 아키텍처를 참고해서 구조가 잡혀있습니다.
현재 몬드리안에이아이에서는
DDD에 대해서 말한다더니… 클린 아키텍처말고 DDD는 뭐죠?
DDD는
Domain Driven Design, 즉 도메인 주도 설계의 약자입니다.
DDD도
클린 아키텍처와 같은 목표를 갖고있는 아키텍처입니다.
(그래서 클린 아키텍처를 서두로 시작했던 것이죠…!)
도메인…?
blahblah.com 이런건가요…?
Domain은 저희가 아는 그런 IPv4, IPv6를 이해하기 쉽게 만든 그런 녀석이 아닙니다.
DDD에서의
Domain은 소프트웨어로 해결하고자 하는 영역을 말합니다
Post
Views
Comment
Likes
게시판을 예로 들면 도메인은 다음과 같을 수 있습니다.
Post라는 도메인을 루트로, 하위에 Views, Comment, Likes 등과 같은 Domain Model들을 구성 할 수 있죠.
물론 Views, Comment, Like에도 하위 Domain Model들을 구성할 수 있습니다.
DDD에는
다음과 같은 layer들로 구성이 되어있습니다.
User Interface (Presenter)
Application
Domain
Infrastructure
사용자로부터 요청을 받아서
하위 레이어 전달 및 반환.
Domain 모델을 이용하여 기능 구현.
Business logic은 Domain에서 구현한다.
Domain에 대한 핵심 Business
객체의 state 및 logic 제공
구현 기술에 대한 영속성 구현
이번 시간에는,
Domain Layer에 대해서 집중적으로 알아볼겁니다…!!
Domain Layer에는
• Entity
• Value
• Aggregate
• Repository
• Domain Service
그리고 다음과 같은 요소들이 있습니다.
Entity
• 식별자가 존재하며, 식별자를 제외한 나머지 값들은 변경가능한 (mutable) 오브젝트
• 해당 영역의 business logic 구현을 담당
• id값 외에 다른 값들이 같아도 같은 인스턴스가 아님!
• ex) Post, Comment
Domain Layer에는
Value
• 식별자는 존재하지 않으나, 값들이 불변인 오브젝트
• 개념적으로 완전한 하나를 표현할 때 사용
• 오브젝트의 모든 값이 같으면 서로 같은 인스턴스!
• Entity나 또 다른 VO의 속성으로서 사용된다
• ex) Views, Likes
예를 들어,
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
예를 들어,
Views {
count: 3
}
Views {
count: 3
}
VO
Views {
count: 4
}
Views {
count: 3
}
VO
• 애그리거트에 속한 모든 객체의 일관성 유지를 위해, 애그리거트에 대표하는 Entity를
애그리거트 루트로 갖고 있는다.
• 복잡한 도메인을 단순한 구조로 만들어준다
• 한 애그리거트에 속한 객체는 다른 애그리거트에 속할 수 없다
• 서로 다른 애그리거트는 서로를 관리 할 수 없다
Aggregate는?
수많은 Domain Model들의 복잡성을 줄이기 위해 상위 수준으로 묶은 군집입니다.
Aggregate는?
Post
<Root>
Post
Views Likes
Comment
<Root>
Comment
User
<Root>
User
다음에 이어서 배울 내용은?
• DIP (Denpendency Inversion Principle)과 Infrastructure Layer, Repository
• Business Logic 구현 예제
• Domain Service
• Aggregate간 Transaction 관리
• Bounded Context
감사합니다!
참고:
• http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
• https://k-elon.tistory.com/38

DDD 그게 뭔데 (개념 찍먹편)

  • 1.
    DDD 그게 뭔데(DDD 개념 찍어 먹어보기 편) 고명석 a.k.a R.bert Ko
  • 2.
    자기 소개 • IncheonDev‘s 커뮤니티 운영 중 • 현재 Mondrian AI Backend / Infra Engineer • 종합 4년차 개발자 • WPF를 이용한 Vision Machine 개발 1년 4개월 • 웹 프런트 개발 1년 1개월 • 웹 백엔드 개발 / 인프라 1년
  • 3.
    제 인생 목표는토발즈, 밥 형 보다 유명해지기, 하루에 발렌타인 30년산 한 잔씩 마시는 삶
  • 4.
    그 중에 밥아저씨…Uncle Bob은 누구?
  • 5.
    깔끔한거 좋아하는 아저씨Robert C. Martin a.k.a “Uncle bob” Martin • 클린 코드 • 클린 코더 • 클린 아키텍처 • 클린 애자일
  • 6.
    저희가 봐야할 건여기 밑에 있는 클린 아키텍처입니다. 물론 나머지 책들도 명서이니 읽어보시죠
  • 7.
    • 프레임워크의 독립적 •테스트 용이 • UI 독립적, Database 독립적 • 외부 기능 독립적 을 목적으로 밥 삼촌이 내세운 아키텍처인데, 한마디로 의존성(관심사) 분리가 목적이며 대부분의 아키텍처들도 마찬가지! 클린 아키텍처는
  • 8.
    • 클린 아키텍처 •DDD • Hexagonal (Ports & Adapters) • Onion 등 다양한 아키텍처를 참고해서 구조가 잡혀있습니다. 현재 몬드리안에이아이에서는
  • 9.
    DDD에 대해서 말한다더니…클린 아키텍처말고 DDD는 뭐죠?
  • 10.
    DDD는 Domain Driven Design,즉 도메인 주도 설계의 약자입니다.
  • 11.
    DDD도 클린 아키텍처와 같은목표를 갖고있는 아키텍처입니다. (그래서 클린 아키텍처를 서두로 시작했던 것이죠…!)
  • 12.
  • 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 제공 구현 기술에 대한 영속성 구현
  • 16.
    이번 시간에는, Domain Layer에대해서 집중적으로 알아볼겁니다…!!
  • 17.
    Domain Layer에는 • Entity •Value • Aggregate • Repository • Domain Service 그리고 다음과 같은 요소들이 있습니다.
  • 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들의 복잡성을 줄이기 위해 상위 수준으로 묶은 군집입니다.
  • 22.
  • 23.
    다음에 이어서 배울내용은? • DIP (Denpendency Inversion Principle)과 Infrastructure Layer, Repository • Business Logic 구현 예제 • Domain Service • Aggregate간 Transaction 관리 • Bounded Context
  • 24.
  • 25.