DDD START! 책도 좋지만, 제이슨의 DDD 명강의를 들으면 DDD를 훨씬 잘 깨우칠 수 있다.
제이슨 감사합니다! DDD를 알게 됐어요
제이슨의 강의를 듣자.
이걸로 후기는 마치도록 하겠다.
라고 마치면 제목이랑 불일치하니까 (ㅋㅋㅋ) DDD START! 책에 대한 후기를 작성해보겠다.
참고로, 우아한테크코스 과정을 거친다면 10월 쯤에 이 책 내용과 거의 유사하게 학습하며 리팩터링해보는 시간을 가져볼 수 있을 것이다.
최범균님이 쓰신 DDD START! 책을 읽어보았다.
우아한테크코스 기간동안 의존성을 줄이기 위한 이벤트 발행, 객체지향 설계 실력의 중요성을 깨닫게 되어 읽어보게 된 책이다. 그리고 2023년에 진행하는 에릭 에반스의 도메인 주도 설계 책 스터디에서의 이해도를 높이기 위함도 있다. 에릭 에반스 책 후기를 봤을 때, 너무나도 어렵다는 평들이 많았다.
아직 DDD 입문에 불과했던 나한테는 꽤 어려울 것이라 판단하여 입문용으로 적합하다는 평이 많은 최범균님의 DDD START! 책을 먼저 읽게 됐다. 결과는 만족!
읽는 데는 하루 2시간 씩 4일 정도 투자한 듯하다. 7~8시간 정도 걸렸다고 보면 된다.
책 내용에 대한 후기 & 좋았던 점
1~2장에서 객체지향 설계에 대하여 간단하게 훑고 가는 워밍업이 있어서 좋았다.
DIP 원칙을 이용하여 인터페이스-구현체를 각각 다른 패키지에 놓는 추상화의 장점, VO와 Entity, Repository와 Aggregate에 대한 간단한 용어 설명이 나온다.
3장부터 본격적인 Aggrigate 설명이 나오면서 DDD에 대한 설명이 시작된다.
특정 애그리거트에서 자기 자신 외에 다른 애그리거트를 변경시키는 높은 의존성을 가지는 코드를 지양해야 한다. 또, 트랜잭션 범위 역시 작을수록 좋다는 점 등등 다양한 상황을 코드로 설명해준다. 호불호가 조금 갈릴 수 있는데, 이 책은 코드로 예시 상황을 제시하는 케이스가 상당히 많다. 나는 개인적으로 이 부분이 되게 친절하다고 생각됐다. 글로만 봤을 땐 아리쏭하다가 코드를 통해 예시를 보여주니 확 와닿는 경우가 좀 있었기 때문이다. 다만, 코드를 이해하는 데에 시간을 많이 투자해야 되기 때문에 코드가 포함된 부분들을 읽는 데는 좀 오래걸리긴 했다.
4~5장은 JPA를 이용한 설계가 나온다. 객체지향 설계를 위해 VO, 상속 등 다양한 스킬들이 나오는데, 이 때 JPA로 설계하는 방법들에 대해 나온다. 나 역시 JPA로 그동안 프로젝트를 해왔기 때문에 공감하며 책을 읽을 수 있었다. 또, 처음 보는 어노테이션 및 기술들도 꽤 많았기 때문에 많은 공부가 됐다. 다만, 이 책이 나온지 좀 됐기 때문에 버전에 따른 차이도 일부 있는 듯하다.
6장은 도메인 계층이 아닌, 비즈니스 로직을 처리하는 응용계층 얘기가 나온다. 응용 영역과 표현 영역의 역할 및 책임 분리는 명확해야 하며, 그렇지 않으면 중복 코드가 발생하고 가독성 저하를 가져오게 된다. 입력 값 검증, 트랜잭션 AOP에 대한 얘기도 나온다. DDD에 대한 내용뿐만 아니라 스프링 AOP에 대해서도 배워갈 수 있다는 점이 만족스러웠다. 뒤에는 트랜잭션 관련된 내용도 많이 나온다.
7장은 도메인 서비스에 대한 얘기가 나온다. 이 부분은 개인적으로 익숙치 않아서 조금 어렵게 느껴졌다. 신기했던 점은 도메인 서비스는 service layer가 아닌 domain layer에 포함된다는 것이었다. 한 에그리거트에 넣기 애매한 로직이자, 비즈니스 로직이 아닌 도메인 로직으로 사용되기 때문이라 한다. 도메인 서비스 코드의 예시로, 우아한테크코스 지원플랫폼 코드를 첨부하겠다.
8장은 애그리거트와 트랜잭션 얘기인데, 사실상 트랜잭션과 락에 대한 설명이라 생각하면 될 듯하다.
9~11장은 BOUNDED CONTEXT에 대한 얘기가 추가되면서 강결합을 제거하기 위한 이벤트 발행 방법, 성능을 위한 CQRS 등 여러가지 방법들을 알려준다. 메시지큐(MQ)를 이용한 내용들도 나온다. 요즘은 글로벌 트랜잭션 기능을 지원하지는 않지만, 성능이 우수하여 kafka를 많이 쓴다고 한다. 실제로 그런 것 같기도 하고. kafka는 진짜 다음에 시간날 때 한번 가지고 놀아봐야겠다.
아쉬웠던 점
사실 책 자체에 대해 아쉬운 점은 없다.
단지, 2016년에 나온 조금 오래된 책이다보니, Spring, JPA 버전 차이가 좀 있다는 점이 있다. 그렇지만 2022년 말 기준으로 엄청 다르지는 않으므로 크게 신경쓰진 않아도 될 듯.
개인적으로 아쉬웠던 점은 중후반부에 가독성이 낮은 JPA Criteria로 예제 코드를 설명한다는 점? ㅋㅋㅋ
추천 대상
- Spring AOP, JPA에 대한 이해도가 있고, 객체지향 SOLID 원칙을 프로젝트에 적용하여 리팩터링해본 백엔드 개발자
- 서로 다른 BOUNDED CONTEXT간의 불필요한 강결합을 동기 또는 비동기 이벤트 처리를 통해 리팩터링해본 백엔드 개발자
- DDD(도메인 주도 설계)가 무엇인지 궁금한 백엔드 개발자
책에서도 아래와 같이 안내돼있다.
이 책을 읽는데 개발 경력은 크게 중요하지 않지만, 적어도 3~4년의 개발 경험이 있으면 책의 내용을 이해하는 데 도움이 된다. 신입이라면 이 책에서 말하는 일부 내용이 와 닿지 않을 수도 있다.
DDD START! 일부 -
물론 위와 같이 적혀있긴 하지만, 신입이나 1~2년차라고 해서 쫄아서 안 읽기엔 너무 아까운 책이라 생각한다.
나도 저 문구를 보고 '아, 내가 이해할 수 있을까?' 고민을 했지만, '일단 읽어보자!' 하는 생각으로 읽어보았다. 그 결과 이 책에서 많은 것을 얻어갈 수 있었다.
이 책 덕분에 에그리거트, BOUNDED CONTEXT가 무엇인지 알 수 있었다. 또, 에그리거트에서의 엔티티(Entity), 값 객체(Value)에 대한 개념, BOUNDED CONTEXT 내에서의 여러 에그리거트가 포함돼있을 때의 상황 등등을 이 책으로나마 맛보며 어떻게 대처해야 하는지 익힐 수 있었다.
읽을 때 쉽지는 않았지만 꽤나 재밌게 읽었으며, 여러 번 보면서 이해도를 높이기에 좋다고 생각되는 책이다. 처음 볼 때 완벽히 이해하려고 하기보단, 여러 번 씹고 뜯고 맛보면서 이해도를 높이면 좋을 듯하다.
이제 다음은...
그 어렵다고 소문난 에릭 에반스의 '도메인 주도 설계'를 읽어봐야겠다.
그나마 다행인 점은 'DDD START!'는 혼자서 이해하기 위해 끙끙대며 읽었지만, '도메인 주도 설계' 책은 실력자분들과 스터디를 통해 같이 공부하며 읽어볼 예정이다.
도움된 코드
https://github.com/woowacourse/service-apply
'독후감 > IT 서적' 카테고리의 다른 글
[후기] SQL 첫걸음 (5) | 2022.11.12 |
---|---|
[후기] 개발자가 반드시 정복해야 할 객체지향과 디자인 패턴 (0) | 2022.04.14 |