Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

디지안의 개발일지

[책] 도메인 주도 설계 철저 입문 소개 본문

book

[책] 도메인 주도 설계 철저 입문 소개

안덕기 2022. 9. 5. 16:09

[책] 도메인 주도 설계 철저 입문

이 글은 도메인 주도 설계 철저 입문을 소개한다.

특징

이 책을 읽으면서 느낀 것은 DDD에 사용되는 개념을 잘 정리해놔서 이해하기 쉽다는 것과 실제 코드로 어떻게 구현할 것인지를 예제로 잘 표현했다는 것이다. 그렇다보니 그 이전에는 약간 추상적으로 이해하고 있었던 개념들을 좀 더 명확하게 이해라 수 있었던 기회가 되었던 것 같다.

하지만 그에 비해서 현재 왜 DDD가 유행하게 되었는지, DDD의 역사등에 대한 설명은 설명을 해주지만 약간은 부족한 느낌이 들긴 하였다.

책 내용

1장 도메인 주도 설계란?

  • DDD가 무엇인지에 대한 설명을 해준다.
  • 책을 읽는 것에 대한 방향성을 제시해준다.

이 장에서 이런 이야기도 들어갔으면 좋겠다라는 생각이 들었다.

  • DDD는 기존에는 소프트웨어 지식을 기반으로 개발했던 개발론과 다르게 소프트웨어가 해결하려고하는 영역, 즉 도메인을 중심으로 개발을 진행하는 방법론이다.
  • 과거와 다르게 현재의 소프트웨어는 도메인이 매우 복잡해지고 빠르게 변하기 때문에 이에 맞춰 개발자가 쉽게 이해할 수 있고 변화시킬 수 있는 구조로 개발이 되어야 한다.
  • 이런 구조를 만들기 위해서는 조직, 일하는 방식 또한 큰 변화가 필요할 수도 있다. (참고, 블로그)

2장 ~ 6장

각 장에 맞춰 핵심 개념을 잘 설명하고 있다. 요약하면 다음과 같다.

  • 2장 값 객체
    • 객체인데 상수에 포함되되는 영역의 객체를 의미한다.
    • 변하지 않는 것이 특징이다.
    • 코드에 흩어져 있던 값들을 하나의 객체로 표현함으로써 표현력을 증가시키고 로직을 한 곳에 응집시킬 수 있는 효과를 낸다.
  • 3장 엔티티
    • 값 객체와 더불에 도메인 객체의 쌍을 이루는 개념이다.
    • 값 객체와 다르게 가변적이다.
    • 값 객체와 다르게 식별자를 통해 유일성을 가지고 있을 수 있다.
    • 값 객체와 다르게 생애주기를 가지고 있기 때문에 소멸, 생성등의 과정을 갖는다.
  • 4장 도메인 서비스
    • 도메인 서비스는 도메인 객체에서 하지 못하는 것을 해결주는 역할을 한다.
    • 말 그대로 도메인을 위해 어떤 서비스를 제공해주는 것의 역할이 도메인 서비스다.
      • 예를 들어, DB에 해당 도메인 객체가 존재하는지를 물어보는 것을 도메인 객체에게 물어보는 것은 어색하다. 이를 도메인 서비스에게 물어본다고 생각하면 된다.
  • 5장 리포지토리
    • 도메인 객체를 저장하고 복원하는 퍼시스턴스 역할을 한다.
    • 관리되는 저장소는 RDB 뿐만 아니라 NoSQL도 포함된다.
  • 6장 애플리케이션 서비스
    • 도메인 객체와 협업해서 애플리케이션에서 요구하는 비즈니스(유스케이스)를 해결하기 위한 작업을 진행한다.
    • 중요한 포인트는 유스케이스만 넣고 도메인의 중요한 규칙을 애플리케이션 서비스에 유출하면 안된다.
      • 여러가지 유스케이스에 똑같은 도메인 규칙이 여러번 남발될 수 있기 때문에

7장 ~ 11장

의존 객체에 대한 설명을 하면서 의존 관계를 설정하는 것에 대한 중요성과 설정하는 방법에 대해서 설명한다. 그 외에 사용할만 패턴이나 팁 등을 알려준다.

  • IoC 컨테이너
  • MVC 패턴
  • 단위 테스트
  • 팩토리 패턴

등에 대한 설명이 있다.

12장 애그리게이트

애그리게이트에 대한 설명을 해준다. 하지만 내가 이해하기에는 충분한 설명을 해준다라는 느낌을 받지 못해서 이건 블로그를 읽어보고 이해하는 것이 좋을 듯 하다.

  • 관련이 있는 도메인 모델끼리 묶은 단위
  • 라이프사이클이 비슷하거나 같다.
  • 애그리게이트는 경계를 갖는다.
    • 하나의 애그리케이트에만 속하고 관리한다.
    • A를 B가 갖는다. 라고 하면 보통 A와 B가 하나의 애그리케이트에 속하지만 꼭 그런 것은 아니다.
  • 애그리게이트는 중심이 되는 루트 객체가 있다.
  • 다른 애그리게이트와의 관계는 응용 계층에서 ID와 함께 해결한다.

13장 명세

객체에 대해서 좀 더 복잡한 Validation을 하고 싶을 때 Specification이라는 개념을 사용하기도 한다. 이 명세에 대한 역할과 범위에 대해 설명한다.

14장 아키텍처

DDD와 함께 자주 거론되는 아키텍처에 대한 설명을 한다.

  • 계층형 아키텍처
  • 클린 아키텍처
  • 헥사고날 아키텍처

15장 앞으로의 학습

DDD에서 사용하는 패턴만 도입하는 것이 아니라 실제 도메인 전문가 일하기 위해 어떻게 해야되는지에 대해 설명한다.

마지막으로..

개인적으로 DDD를 처음 접하는 사람에게 아주 큰 도움이 되는 책인 것 같다. 나는 전체적으로 개념을 파악할 수 있는 것은 어느정도 부분 부분에 대한 개념을 이해해야 전체적으로 폭 넓게 바라볼 수 있다고 생각하는데 이 책은 DDD에 대한 부분적인 개념을 잘 설명하고 있어 매우 좋은 책이라고 생각이 든다.