Life/Book Record

[서평] 도메인 주도 개발 시작하기 : DDD 핵심 개념 정리부터 구현까지

샤아이인 2023. 1. 20.

저의 돈으로 직접 사서 직접 완독해 본 후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할 것이며, 단점은 단점대로 언급할 것입니다.

 

도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

몇 해 전부터 도메인 주도 개발에 대한 이야기를 들어오고 있었고 스프링(Spring) 기반의 도메인 주도 개발을

이번 Toy프로젝트에 적용해 볼까 생각하는 도중에 "최범균" 님의 "도메인 주도 개발 시작하기"를 읽어보게 되었다.

 

<읽은 기간>

2023/01/09 ~ 2023/01/20

<리뷰 순서>

1) 책의 표지

2) 단원별 구성

3) 읽은 소감

우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다.

Q 이 책을 읽기 전에 필요한 수준/ 지식은?

=> 일단 당연하게 JAVA는 알아야 한다. 그 외로 약간의 스프링 기본과 JPA코드를 읽을 줄 알면 좋다.

 

책에서 말하는 대상 독자는 위와 같다. 일단 나같은 경우 읽는데 기술적인 어려움은 전혀 없었다. 

 

Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까?

=> 원래 애릭 에반스의 DDD를 조금 먼저 읽다가, 너무 추상적이라는 생각이 들어 구체적인 코드를 확인하고 싶어 이 책을 접하게 되었다.

결과부터 말하면 매우 성공적이다. DDD에 대한 개념이 어느정도 잡혔으며, 아직 어렵기는 하지만 바운디드 콘텍스트에 대한 개념이 조금이나마 생긴 것 같다?

 

물론 이해만 한다고 코드가 생산되지는 않는다. 추가적으로 더 학습하며 코드를 작성해보려 노력해야 할 것 같다.

 

Q 이 책을 읽은 후 추후 공부는?

=> 뭐 계속 만들어야 할 것이다. DDD라는 개념은 이해된것 같지만, 이걸 코드로 만들려면 많은 연습이 필요한 것 같다.

또한 개념 자체가 아직 명확하게 확립되지 않은것도 사실이라, 다음 책 또한 읽어봐야 할 것 같다.

다만 내가 약간 뭘랄까... "좋은 게 좋은 거다"라는 느낌의 책들은 안 좋아 하긴 하는데...

위 에릭 애반스의 책은 약간 그런 느낌의 책이라... 걍 다 좋은 소리 기는 한데... 이게 코드가 거의 없는 책이다 보니....

필요한 부분만이라도 읽어볼 예정이다.

 

1. 책의 표지

아 일단 책 진짜 이쁘다. 처음에 디자인만 보고 위키북스의 책인 줄 알았는데, 한빛미디어라 놀라웠다(?)

 

2. 단원별 구성

단원별 구성은 저자가 잘 정리주신 페이지가 있어 공유해볼까 한다?

 

나는  인상 깊게 공부했었던 7장 도메인 서비스를 기준으로 작성하겠다.

 

3. 도메인 서비스

7장의 경우 도메인 서비스, DDD에서는 대부분의 행위가 도메인 자체에 정의되어 있다.

하지만 모든 메서드가 도메인에 정의될 수는 없다. 이런 경우 따로 DomainService를 만들어 사용하게 된다는 것이다.

도메인 서비스를 이용해서 도메인 개념을 명시적으로 드러내면 된다.

 

도메인 영역의 애그리거트나 밸류와 같은 구성 요소와 도메인 서비스를 비교할 때 다른 점은 도메인 서비스는 상태 없이 로직만 구현한다는 점이다.

 

예를 들어 다음과 같은 도메인 서비스(OrdererService)가 있다고 해보자!

  • 계산 로직 : 여러 애그리거트가 필요한 계산 로직이나, 한 애그리거트에 넣기에는 다소 복잡한 계산 로직
  • 외부 시스템 연동이 필요한 도메인 로직 : 구현하기 위해 타 시스템을 사용해야 하는 도메인 로직

 

할인 계산 서비스를 사용하는 주체는 애그리거트가 될 수도 있고, 응용 서비스가 될수도 있다.

(하지만 도메인 서비스 자체를 애그리거트에 주입하는 쪽은 지양하자...)

 

이러한 애그리거트에 도메인 서비스를 전달하는 것은 응용 서비스를 이용하자

위에서 createOrder() 내부에서 DiscountCalculationService를 사용 중이다.

 

애그리거트 메서드를 실행할 때 인자로 도메인 서비스를 전달하지 않고, 반대로 도메인 서비스의 기능을 실행할 때 애그리거트를 전달해야 한다.

 

또한 도메인 서비스는 도메인 로직을 수행하지, 응용 로직을 수행하지 않는다.

트랜잭션 처리와 같은 로직은 응용 로직이므로 도메인 서비스가 아닌 응용 서비스에서 처리해야 한다.

 

도메인 서비스는 도메인 로직을 표현하므로 다른 도메인 구성요소와 동일한 패키지에 위치한다.

등등 유용한 내용이 한가득한 책이다!

 

4. 읽은 소감

나처럼 기존의 DTO - Cotroller - Service - Repository의 구성에서 벗어나보고 싶은 독자들에게도 좋은 접근법이 될 것 같다.

또한 단순히 DDD뿐만 아닌, 객체 지향적인 사고도 함께 증가시키는 책이라 생각된다.

 

최근 읽은 책중에 가장 인상 깊고, 머리에 남는 게 많은 책인 것 같아서 너무 좋다!

다만, 실질적으로 적용하기 위해서는 좀 더 의식적인 노력이 필요할 것 같다!

 

● 장점

1) 좋은 설명

2) 좋은 실습 코드에 더불어 간략하고 단순한 도식들

3) 초심자에게 알맞은 설명과 깊이

이 책은 그냥 너무 좋아서... 뭐 자세하게 설명할 필요가 없다 생각된다.

Java로 DDD에 입문하기 매우 적합한 책이라 생각된다.

● 단점

음 9장에서 바운디드 컨텍스트에 대한 내용이 한 번에 이해 가지는 않았었다.

이는 설명이 부족하기보다는, 원래 내용 자체가 어려운 개념이라 한 번에 이해하기가 어려운 것 같다.

요약: DDD 입문서로 난 추천 한다. DDD 초심자는 읽어보길 권장한다.

댓글