메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

도메인 주도 개발 시작하기

DDD 핵심 개념 정리부터 구현까지

한빛미디어

집필서

판매중

  • 저자 : 최범균
  • 출간 : 2022-03-21
  • 페이지 : 356 쪽
  • ISBN : 9791162245385
  • 물류코드 :10538
초급 초중급 중급 중고급 고급
4.8점 (36명)
좋아요 : 5

가장 쉽게 배우는 도메인 주도 설계 입문서!

 

이 책은 도메인 주도 설계(DDD)를 처음 배우는 개발자를 위한 책이다. 실제 업무에 DDD를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성했다. 이 책으로 도메인 모델을 이용하여 애플리케이션을 구현하면서 DDD에 대한 이해를 넓힐 수 있을 것이다.

 

10538_detail.jpeg

 

 

 

 

최범균 저자

최범균

코딩을 좋아하여 나이를 먹고 백발이 되어도 개발을 하고 싶은 개발자다. 좋은 책 쓰는 것을 목표로 꾸준히 블로그와 브런치에 글을 쓰고 있으며 많은 강연 활동도 하고 있다.

 

전) 아이스크림에듀, 에스씨지솔루션즈, 위메이드엔터테인먼트, 다음커뮤니케이션 개발자

현) 에스씨지랩 개발실장

Chapter 1. 도메인 모델 시작하기

 1.1 도메인이란?

 1.2 도메인 전문가와 개발자 간 지식 공유

 1.3 도메인 모델

 1.4 도메인 모델 패턴

 1.5 도메인 모델 도출 

 1.6 엔티티와 밸류 

  1.6.1 엔티티 

  1.6.2 엔티티의 식별자 생성

  1.6.3 밸류 타입 

  1.6.4 엔티티 식별자와 밸류 타입 

  1.6.5 도메인 모델에 set 메서드 넣지 않기 

 1.7 도메인 용어와 유비쿼터스 언어 

 

Chapter 2. 아키텍처 개요

 2.1 네 개의 영역

 2.2 계층 구조 아키텍처

 2.3 DIP

  2.3.1 DIP 주의사항

  2.3.2 DIP와 아키텍처

 2.4 도메인 영역의 주요 구성요소

  2.4.1 엔티티와 밸류

  2.4.2 애그리거트

  2.4.3 리포지터리

 2.5 요청 처리 흐름

 2.6 인프라스트럭처 개요

 2.7 모듈 구성

 

Chapter 3. 애그리거트

 3.1 애그리거트

 3.2 애그리거트 루트

  3.2.1 도메인 규칙과 일관성

  3.2.2 애그리거트 루트의 기능 구현

  3.2.3 트랜잭션 범위

 3.3 리포지터리와 애그리거트

 3.4 ID를 이용한 애그리거트 참조

  3.4.1 ID를 이용한 참조와 조회 성능

 3.5 애그리거트 간 집합 연관

 3.6 애그리거트를 팩토리로 사용하기

 

Chapter 4. 리포지터리와 모델 구현(JPA 중심)

 4.1 JPA를 이용한 리포지터리 구현

  4.1.1 모듈 위치

  4.1.2 리포지터리 기본 기능 구현

 4.2 스프링 데이터 JPA를 이용한 리포지터리 구현

 4.3 매핑 구현

  4.3.1 엔티티와 밸류 기본 매핑 구현

  4.3.2 기본 생성자

  4.3.3 필드 접근 방식 사용

  4.3.4 AttributeConverter를 이용한 밸류 매핑 처리

  4.3.5 밸류 컬렉션: 별도 테이블 매핑

  4.3.6 밸류 컬렉션: 한 개 칼럼 매핑

  4.3.7 밸류를 이용한 ID 매핑

  4.3.8 별도 테이블에 저장하는 밸류 매핑

  4.3.9 밸류 컬렉션을 @Entity로 매핑하기

  4.3.10 ID 참조와 조인 테이블을 이용한 단방향 M-N 매핑

 4.4 애그리거트 로딩 전략

 4.5 애그리거트의 영속성 전파

 4.6 식별자 생성 기능

 4.7 도메인 구현과 DIP

 

Chapter 5. 스프링 데이터 JPA를 이용한 조회 기능

 5.1 시작에 앞서

 5.2 검색을 위한 스펙

 5.3 스프링 데이터 JPA를 이용한 스펙 구현

 5.4 리포지터리/DAO에서 스펙 사용하기

 5.5 스펙 조합

 5.6 정렬 지정하기

 5.7 페이징 처리하기

 5.8 스펙 조합을 위한 스펙 빌더 클래스

 5.9 동적 인스턴스 생성

 5.10 하이버네이트 @Subselect 사용

 

Chapter 6. 응용 서비스와 표현 영역

 6.1 표현 영역과 응용 영역

 6.2 응용 서비스의 역할

  6.2.1 도메인 로직 넣지 않기

 6.3 응용 서비스의 구현

  6.3.1 응용 서비스의 크기

  6.3.2 응용 서비스의 인터페이스와 클래스

  6.3.3 메서드 파라미터와 값 리턴

  6.3.4 표현 영역에 의존하지 않기

  6.3.5 트랜잭션 처리

 6.4 표현 영역

 6.5 값 검증

 6.6 권한 검사

 6.7 조회 전용 기능과 응용 서비스

 

Chpater 7. 도메인 서비스

 7.1 여러 애그리거트가 필요한 기능

 7.2 도메인 서비스

  7.2.1 계산 로직과 도메인 서비스

  7.2.2 외부 시스템 연동과 도메인 서비스

  7.2.3 도메인 서비스의 패키지 위치

  7.2.4 도메인 서비스의 인터페이스와 클래스

 

Chapter 8. 애그리거트 트랜잭션 관리

 8.1 애그리거트와 트랜잭션

 8.2 선점 잠금

  8.2.1 선점 잠금과 교착 상태

 8.3 비선점 잠금

  8.3.1 강제 버전 증가

 8.4 오프라인 선점 잠금

  8.4.1 오프라인 선점 잠금을 위한 LockManager 인터페이스와 관련 클래스

  8.4.2 DB를 이용한 LockManager 구현

 

Chapter 9. 도메인 모델과 바운디드 컨텍스트

 9.1 도메인 모델과 경계

 9.2 바운디드 컨텍스트

 9.3 바운디드 컨텍스트 구현

 9.4 바운디드 컨텍스트 간 통합

 9.5 바운디드 컨텍스트 간 관계

 9.6 컨텍스트 맵

 

Chapter 10. 이벤트

 10.1 시스템 간 강결합 문제

 10.2 이벤트 개요

  10.2.1 이벤트 관련 구성요소

  10.2.2 이벤트의 구성

  10.2.3 이벤트 용도

  10.2.4 이벤트 장점

 10.3 이벤트, 핸들러, 디스패처 구현

  10.3.1 이벤트 클래스

  10.3.2 Events 클래스와 ApplicationEventPublisher

  10.3.3 이벤트 발생과 이벤트 핸들러

  10.3.4 흐름 정리

 10.4 동기 이벤트 처리 문제

 10.5 비동기 이벤트 처리

  10.5.1 로컬 핸들러 비동기 실행

  10.5.2 메시징 시스템을 이용한 비동기 구현

  10.5.3 이벤트 저장소를 이용한 비동기 처리

 10.6 이벤트 적용 시 추가 고려 사항

  10.6.1 이벤트 처리와 DB 트랜잭션 고려

 

Chapter 11. CQRS

 11.1 단일 모델의 단점

 11.2 CQRS

  11.2.1 웹과 CQRS

  11.2.2 CQRS 장단점

이 책은 도메인 모델을 이용하여 애플리케이션을 구현하는 데 필요한 내용을 다루며 전체 11

장으로 구성되어 있다.

 

 

★이 책의 내용

 

1장과 2장에서는 도메인 모델을 구현할 때 알아야 할 기본적인 내용을 다룬다. 1장에서는 도메인 모델이 무엇인지 알아보고 엔티티와 밸류에 대해 알아본다. 2장은 상위 수준에서 아키텍처의 네 영역과 DIP 패턴을 설명하고 도메인 영역의 구성 요소에 대해 살펴본다.

 

3장부터 5장은 애그리거트와 리포지터리를 설명한다. 애그리거트는 복잡한 도메인 모델을 관리 가능한 단위로 묶어주는 역할을 담당한다. 3장에서는 애그리거트가 무엇이고 구현을 어떻게 하는지 알아본다. 4장에서는 애그리거트의 논리적인 저장소인 리포지터리를 구현하는 방법을 알아보고 5장에서는 검색 조건을 위한 스펙, 정렬, 페이징 등 조회 기능을 구현해본다.

 

6장은 응용 서비스와 표현 영역에 대해 설명한다. 응용 서비스가 어떻게 도메인 모델을 사용하고 어떤 역할을 수행하는지 알아보고 표현 영역과 응용 서비스의 연동에 대해 설명한다.

 

7장은 도메인 영역의 구성요소 중 하나인 도메인 서비스가 필요한 이유와 구현에 대해 설명한다.

 

8장에서는 애그리거트의 트랜잭션 범위에 대해 살펴본다. 애그리거트의 트랜잭션 처리를 위해 DBMS를 이용한 선점 잠금과 버전을 이용한 비선점 잠금을 구현하는 방법을 소개한다.

 

9장은 애그리거트와 더불어 가장 중요한 개념 중 하나인 바운디드 컨텍스트에 대한 내용을 다룬다. 바운디드 컨텍스트가 무엇이고 각 컨텍스트의 통합과 관계에 대해 배워본다.

 

10장과 11장은 각각 이벤트와 CQRS에 대해 설명한다. 

10장은 도메인 이벤트를 이용해서 시스템의 결합도를 낮추고 기능을 확장하는 방법을 설명하며 비동기로 이벤트를 처리하는 몇 가지 구현 방법도 살펴본다. 11장은 CQRS가 무엇인지 알아보고, 이를 통해 어떤 효과를 얻을 수 있는지에 대해 설명한다.

 

 

★ 다루는 내용

 

☑ 도메인 모델의 이해, 엔티티와 밸류의 개념

☑ 아키텍처의 주요 영역 구성요소와 DIP 패턴

☑ 애그리거트, 리포지터리 등 DDD 주요 패턴의 이해와 구현 방법

☑ 응용 서비스와 표현 영역을 연동하는 방법

☑ 도메인 서비스의 필요성과 구현 방법

☑ 도메인 모델의 트랜잭션 충돌을 처리하는 방법

☑ 도메인 이벤트를 이용하여 시스템의 결합도를 낮추고 기능을 확장하는 방법

☑ CQRS의 개념과 명령 모델/조회 모델을 나누는 방법

 

 

★ 대상 독자

 

이 책은 DDD를 처음 접하는 개발자를 위한 책으로 DDD 입문자를 대상으로 한다. DDD 고수가 되는 법을 알려주는 책은 아니다. 이미 DDD 기초를 마스터했다면 다른 책을 통해 DDD의 심오함을 느끼길 바란다. 아직 DDD를 잘 모르지만 관심이 있다면 이 책을 통해 DDD에 대한 호기심을 채울 수 있을 것이다.

 

 

★ 예제 소스

 

예제 코드는 메이븐, 자바 17, 스프링 부트, JPA(하이버네이트), 타임리프, MySQL을 이용해서 작성했다.

https://github.com/madvirus/ddd-start2

  •  

    KakaoTalk_20220429_013243169.jpg

     

     

    최범균님의 DDD START라는 도서를 읽어야한다는 생각을 가지신 분들이라면,

    예전 지앤선 출판사에 문의해서 재출간 일정을 물어봤던 분들이라면,

    이번에 출간된 도메인 주도 개발 시작하기를 읽으세요!

     

    기존에 저는 마침 절판된 DDD START라는 도서를 도서관에서 우연히 빌려보게 되었는데요.

    어떻게 개편되어 출간되었는지

    예전지식이 쓸모없어지는것은 아닌지 조마조마하면서 읽었습니다.

     

    두 도서 모두 목차는 동일하지만

    이번에 다시 나온 도메인 주도 개발 시작하기는 JPA를 자세히 다루어서

    예전 버전보다 좀 더 자세하게 접할 수 있었어요.

     

    읽으면서 사심을 많이 담아 읽게 되었는데 

    DDD 주요패턴과 도메인 모델에 대한 이해를 확장 할 수 있는 도서를 소장하고 읽게되어서

    너무나도 기쁘게 읽었습니다.

     

    개발을 할 때, 좀 더 확장성을 고려하시고 계시는분

    그리고 DDDSTART라는 도서가 절판되어서 읽고싶은데 못읽고 계시는분들은

    꼭 같은 저자가 쓴 도메인 주도 개발 시작하기를 읽어주세요!

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  • KakaoTalk_20220425_172758529.jpg

     

    “한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

     

    이 책은 자바 언어를 기반으로 도메인 주도 개발에 대해 설명하고 있다.

    도메인은 비즈니스가 가지는 특징을 잘 나타내는 것으로 생각하면 쉽다. 책의 초기에는 간단한 도메인 몇 개의 연관관계를 가져가면서 빌드업을 하며, 그 이후로 점점 심화된 내용들을 덧붙여나가 독자가 읽는데 어려움을 느끼지 않게 노력한 것이 느껴진다.


    또한 이 책에서는 어떻게 작성해야 도메인 주도 개발을 할 수 있는지 가이드를 제시해주고 있다. 사실 어떤 서비스를 개발하냐에 따라 달라질 수 있는 설계 분야이지만, 큰 틀에서 어떻게 설계해나가면 좋을지 고민할 수 있는 좋은 기회가 된다.



     

     

    이 책을 읽기 위해서는 어느정도 자바 언어를 알고 읽는 것이 좋지만, 객체 지향 언어 한가지를 숙달한 상황이라면 자바를 몰라도 읽는데 큰 무리는 없다.

     

  • KakaoTalk_20220425_085813719.jpg

    아주 오랫만에 자바에 관련된 리뷰인듯 하다. 자바로 개발일을 시작하였지만 오래전이다. 최범균님 책은 참으로 유용하고 적절한 시기에 잘 나오듯 하다. 

     

    항상 자바 개발에 많은 도움을 주는 책을 많이 쓰시는 듯 하다.

     

    이 책은 DDD 즉 도메인 주도 개발에 대한 내용으로 구성이 되어있다.

     

    어느 정도는 자바에 대하여 익숙한 독자여야 할 듯하다.

     

    내용이 소스 코드와 함께 설명이 되어지기에 다소 어려울 수도 있다.

     

    이 책은 저자의 많은 고민과 철학이 적절하게 녹아져 있다고 할 수 있다.

     

    개발자로 살아가면서 한번쯤 느껴지는 어떻게 하면 좀더 나은 개발과 설계를 할 수 있을지에

     

    대해서 친절하게 풀어간다.

     

    현업에서는 아직 DDD는 어려운 주제로 보인다.

     

    나 역시 현역 시절에는 이 내용으로 개발을 진행해 보지는 않았다.

     

    그래서 이 책은 첨 개발을 시작하는 독자는 어렵다.

     

    그래서 추천하지 않는다.

     

    추천하는 독자는 어느정도 개발을 할 줄 알고 좀더 나은 개발 방향성을 가지고자

     

    하는 독자를 대상으로 한다것을 알려주고 싶다.

     

    하지만 DDD에 대해서 어떻게 하지라고 의문을 가지고 도전하고자 한다면

     

    충분히 만족할 만한 내용으로 구성이 되어져 있다고 말하고 싶다.

     

    내용 구성으로는 도메인 모델을 어떻게 시작할것인가로 출발한다.

     

    그리고 아키텍처 구성은 어떻게 할 것인가에 대한 주제로 계속해서 이야기를 풀어간다.

     

    그리고 생소한 애그리거트에 대한 내용과 리포지터리와 모델을 어떻게 구현할 것인지

     

    그리고 스프링 데이를 JPA를 이용한 조회 기능을 구현하는 실습도 진행한다.

     

    다음으로 응용 서비스와 표현 영역에 대하여 설명하고

     

    도메인 서비스는 어떻게 구성하며 어떤 기능으로 구현하는지도 설명한다.

     

    트랜잭션 관리에 대한 내용도 빠지지 않고 설명한다.

     

    계속해서 도메인 모델과 바운디드 컨텍스트에 대한 설명과 이벤트

     

    마지막으로 CQRS 모델의 장점과 단점을 설명하면서 책은 마무리가 된다.

     

    ===============================================================================

     

    도메인 주도 개발에 대한 호기심과 도전을 해보고자 한다면 이 책을 적극 추천한다.

     

    정말 흥미롭지만 다소 어렵기도 하다.

     

    하지만 좀더 나은 개발을 해보고자 한다면 이 책을 가까이 두시고 한 두번 꼭 보시라

     

    추천드리면 글을 마무리 하고자 한다.

     

     

     

     "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  •  

    KakaoTalk_20220425_012659057_01.jpg

     

     

    정말 좋은 사수님이 가르치는 듯한 느낌을 받았습니다.

    업무를 하는 데 무언가 부족함이 느껴지시는 분들에게 추천드립니다.

     

     

    처음에 도메인이 무엇인지, 도메인 주도 개발이 무엇인지, 스프링과 관련한 아키텍처 개념들을 소개합니다.

     

    이후 실제 업무에서 충분히 고민이 될 만한 상황을 제시합니다.

     

    고민이 되는 상황을 돌파할 수 있도록 명쾌한 해답을 예시 코드와 함께 알려줍니다.

     

     

     

    도메인은 어떻게 나눌까, 도메인 끼리 뭉치면 어떻게 작동해야 할까?

     

    잠금 문제를 어떻게 해결하는게 좋을까, 트랜잭션은 어떤 단위로 묶으면 좋을까?

     

    페이징이 필요할 때 어떻게 코드를 구현하면 좋을까, 다른 서버팀과 협업하려면 어떻게 하면 좋을까?

     

    등등..

     

     

     

    스프링 개발자의 매뉴얼 같은 느낌이었어요!

     

    연차가 많은 팀장님이 신입사원에게 차근 차근 알려주는 느낌이었어요.

     

    실제로는 판타지(?)지만 "도메인 주도 개발 시작하기" 책으로 답답함을 충분히 해소할 수 있을 것 같습니다.

     

     

     

    늘 구현할 때 마다 고민이 되었던 것들이 있으니깐 고개를 격하게 끄덕이면서 읽었네요.

     

    팀원들에게도 꼭 공유하고픈 책이에요!

     

     

     

    [ 이런 분들이 읽으면 좋아요! ]

     

     

     

    1. 자바 스프링을 어느 정도 개발해 본 사람

     

    2.  구현할 때 마다 이게 정말 맞는지 확신이 안 서는 사람

     

    3. 케어가 필요한 스프링 개발자 신입 사원

     

    4. 기존 프로젝트를 도메인별로 깔끔하게 정리하고픈 사람

     

     

     

    [ 이런 분들에겐 공감이 안될 것 같아요. ]

     

     

     

    1. 서버 개발이 처음이라 DI, 리포지토리, 빌더, 서비스, ORM, 트랜잭션 등의 서버(스프링 특화) 용어가 낯선 사람

     

    2. 혼자서 작은 규모의 프로젝트만 해 본 사람

     

    3. 자바와 스프링에 익숙하지 않으신 사람

     

     

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  • 도메인 주도 설계(Domain Driven Design) 개념을 정리하는 측면에서 좋습니다.  개발자라면 한 번은 읽어보는 것이 좋은 책이라고 생각합니다. 이 책의 대상 독자는 도메인 주도 설계 입문자를 대상이며 주로 소프트웨어 개발자를 위한 책입니다. 자바와 스프링MVC, JPA 지식을 기반으로 예제 코드가 구성되어 있습니다. 스프링 기반 웹 개발 프로젝트 경험이 있다면 이해하기가 좋게 쓰여져 있습니다. 저자 분이 한국인이시기에 이해하기 쉽고 명료하게 잘 쓰여져 있습니다. 이해가 안 되거나 오타가 있다면 한국어로 답변을 받을 수 있는 것도 큰 장점입니다.

  • 책 소개

    • 책 제목 : 도메인 주도 개발 시작하기
    • 글쓴이 : 최범균
    • 출판사 : 한빛미디어
    • 초판 1쇄 : 2022년 03월 25일

    책의 특징

    해당 책은 도메인 주도 설계 DDD를 소개하는 책이다.

    DDD가 다소 이해하기 어렵고 관련 책도 많지 않으므로,
    (에릭 에반스 저의 도메인 주도 설계 가 거의 유일하지만, 해당 책은 번역본으로 초보자가 다소 이해하기 어렵다)
    DDD를 이해하고 싶은 입문자들에게는 단비같은 책이 아닐 수 없다.

    [차근차근 나아가는 설명]


    입문서라고 말했다싶이, 해당 책은 매 장마다 차근차근히 단계를 밟아간다.

    다른 책들보다 섬세하게 단계를 밟아간다고 느낄 수 있었던 것이, 본인은 DDD를 처음 접해봄에도 불구하고
    1-3장까지 설명된 도메인 모델의 개념 및 구성 요소에 대해 이해하는데 어려움이 없었다.

    해당 책은 약 400장 중, 3장인 애그리거트 까지 약 150페이지 정도를 초반 개념 다지기에 쏟고있다.

    따라서 그만큼 초반 설명이 섬세하고 자세하기 때문에, 처음 접하는 입문자들도 두려움 없이 시작할 수 있을 것이다.

     

     

    [섬세한 조언]


    현업에서 JAVA 를 사용하는 본인의 경우 JAVA에 익숙하지 않은 독자들과 느끼는 바가 다를 수 있으나,

    해당 책은 JAVA 를 기반으로 설명이 진행되기에, 책에서 개념을 설명하며 여러 조언을 건내는 것이 매우 와닿았다.

     

    책에서는 설명을 하며 다소 섬세하게 컨벤션 및 습관에 대해 조언을 건넨다.

     

    예시를 들자면 get/set 메서드를 습관적으로 무조건 추가하는 좋지 않은 습관에 대한 것이라거나, 생성한 도메인 모델을 공유 시에 위키 등의 도구를 사용해 접근성을 높인다는 등, 현업의 시니어 개발자로써 같은 개발자들에게 소소한 조언들을 제공하는 것이 내용만큼 와닿았다.

     

    그럼과 동시에 메인 내용인 DDD의 설명도 매우 꼼꼼하게 기술하고있어, 어떤 DB를 사용할지 등 내용과 직접적으로 관련이 없을 수 있는 부분까지 놓치지 않았다.

     

    또한, 소단원을 많이 나누어 스프링 쪽의 내용을 다룰 때에는 독자들이 아는 부분을 넘어가거나 필요한 부분을 찾기 좋게 구분하는 섬세한 배려도 녹아있다.

     

    추천 대상

    해당 책은 JAVA를 어느정도 아는 개발자이면서 DDD에 관심이 있는, 혹은 탄탄한 개발자가 되고 싶다면 강하게 추천하고 싶다.

    DDD의 목적은 소프트웨어의 복잡성을 최소화하는데 있다. 사용자가 사용함의 목적이 있는 소프트웨어의 복잡성을 최소화하기 위해, 목적에 맞게 기술보다 도메인이 더 높은 우선순위를 갖고, 그를 바탕으로 설계하여 개발해야한다.

     

    따라서, DDD는 소프트웨어의 기본 목적을 이해하고 프로젝트를 완성하기 위한 사고방식일 것이다.


    그렇기에, 모든 개발자가 한번쯤 기반을 접해보길 권하고 싶다.

    그 시작에 해당 책이 친절한 입문서로써 자리하고 있으니, 어려운 서적 및 개념을 밟기 전, 좋은 시작이 될 것이다.


    책의 한줄평

    DDD로 가는 첫 걸음, 그 친절한 시작

     

  • 111.jpg

     

     

    TDD, BDD, DDD 등의 개발 방법론 중에 DDD를 다룬 책이다.

     

    DDD는 도메인 모델과 로직에 집중하는 방법론이다. 핵심 개념부터 구현까지 다룬 책이기 때문에 DDD의 입문으로도 손색이 없다. 도메인이 무엇인지부터 차근차근 알려주며 도메인으로 부터 모델을 추출하는 방법 등을 차근차근 알려주고 있다. 초중급을 대상으로 하는 만큼 쉽게 설명하려고 노력한 것 같다.

     

    모델을 시각화하여 이해하는데 도움이 많이 되고 추후 실제 업무 등에 적용할 때도 동일한 방법으로 시각화하면 좋을거 같다는 생각이 든다.

     

    실습 코드는 스프링 부트를 기준으로 작성되어 있다.

     

    자바만 알아도 어느정도 이해할 수 있는 부분도 많다. DDD에 입문하고 실무에 적용하길 원하는 사람에게 추천한다.

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  • "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    IMG_4955.jpeg

     

     

     

    도메인 주도 개발 - 약자로 DDD를 이번에 처음 접한 건 아니었는데대략 5~6 전쯤인가에 DDD start! 라는 서적으로 처음 접했었던 기억이 있다.

    알고보니 같은 분이 지은 책이 었었다.IMG_5033.jpeg

    이런저런 개발 기법이 나오고 보이고 했었던 차에 DDD가 눈에 들어왔는데 당시에는 뭔가 이것저것 알고 싶은 욕심은 컸지만 아무래도 자료가 많지가 않았고 적용하기에는당시 쓰던 개발론도 배우는 시점이고 일이 바빴던지라 개념정리가 잘 안되었었던 기억이 있다.다시 정신없이 살다보니 점점 DDD의 개념이 부상하고 다시 생각 나던 참에 한빛 리뷰단으로 도메인 주도 개발 시작하기책을 리뷰할 기회가 생겼고 보니 같은 지은이여서 반가웠다.도메인 주도 개발 시작하기에서 제일 핵심으로 생각했던 건 가장 앞에서 나왔던Garbage in, Garbage out 인 것 같다.제대로된 또는 요구사항이 정리되고 받아야 제대로된 제품이 나오게 하기 도메인을 정의하고 모델을 도출하고 영역을 구분하는 것 아닐까 싶었다.책에서는 초중급의 개발자들에게 해당 책을 권하고 있다.어느정도 개발 경력이 있고 개발론에 대해서 생각해 볼 시기에 익히면 더 좋을 것도 같고 초중급 뿐만 아니라 그 이상에게도 개념 정리하기에 참 좋아 보였다.이 책은 총 11개의 단원이 기다리고 있다.1. 도메인 모델 시작하기2. 아키텍처 개요3. 애그리거트4. 리포지터리와 모델 구현5. 스프링 데이터 JPA를 이용한 조회 기능6. 응용 서비스와 표현 영역7. 도메인 서비스8. 애그리거트 트랜잭션 관리 9. 도메인 모델과 바운디드 컨텍스트10. 이벤트11. CQRS 책을 읽어가며 각 단원 별로 DDD로의 변경할 때의 문제와 개선점을 제시해주며 왜 DDD로 가야하는 지를 알려주는데원하는 부분을 조금씩 변경해가면서 더 나은 방향으로 갈 수 있도록 활용할 수 있겠다 싶었다.그리고 코드와 다이어그램 등이 적절히 적용되어 더 이해하기 쉽게 풀어져 있었다.DDD를 시작하고 관련 개발론으로 가야할 지 고민된다면 전체적으로 훑어보면 참 많은 도움이 될 것으로 보였다.

     

  • 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다...만

    진심이 담겨있습니다. 허위 사실 유포는

  •  

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

    20220424-230238-6602-LR84.jpg

     

    범균님의 DDD 입문서가 재발간 되었다. 개인적으로는 스프링 입문을 이분 책✳︎으로 하게 되서 반가운 마음에 읽게 되었다. 에릭 에반스의 DDD를 바로 보는 것이 가장 베스트지만 서점에서 몇 번을 시도 했다가 나에게 문턱이 너무 높아 매번 후순위로 밀려났다. (그 외에 Effective Java, Clean Code, Designing Data Intensive Applications 가 있다) 범균님 특유의 자극적이지 않고 나긋나긋한 문장과 이해하기 쉬운 예시를 드는 빌드업이 좋다.

    도메인은 쉽게 말해 각 비즈니스가 요구하는 바를 소프트웨어로 해결하기 위한 단위를 말한다. 사업 분야에 따라 커머스, 금융, 보안, 플랫폼, 통신 등이 있다. 이에 따라 커머스 개발자, 플랫폼 개발자 등으로 일컫는다. 책에서는 온라인 서점인 커머스 도메인을 예시로 든다. 커머스 도메인의 예를 들어 다시 상품, 회원, 결제, 물류, 클레임, 정산 마케팅 등의 하위 도메인으로 나눌 수 있다. 하위 도메인에 따라 영업, 마케팅, MD, 디자인, 기획, 경영지원 등의 전문가들의 비즈니스적 요구사항을 소프트웨어적으로 풀어나가는 것이 개발자의 역할이다.

    하위 도메인은 다시 상태 다이어그램으로 분해 할 수 있다. 가령 주문 프로세스의 경우 장바구니, 결제, 출고지시, 배송, 구매확정 같은 순서도를 가질 수 있다. 이 작은 모델들을 묶어 애그리거트(집합)으로 칭한다. 애그리거트는 도메인 하나를 표현하기 때문에 객체의 영속성을 처리하는 리포지터리는 애그리거트 단위로 존재한다.

    4장 리포지터리와 모델 구현, 5장 스프링 데이터 JPA를 이용한 조회 기능, 6장 응용 서비스와 표현 영역에서는 Spring과 Spring Data JPA를 이용해서 구현할 시 조심해야 하는 부분과 애그리거트를 확장하는 부분에 대해서 예시를 들어 설명한다. UUID 사용, N+1 이슈, 1-N 관계, Lazy Loading, Validation 전략, 응용 서비스에서 의존관계 해소 방법 등 여러 노하우들을 소개한다. 이렇게 세 파트가 이 책의 핵심인듯 하다. 특히 JPA를 다루는데 있어 많은 내용이 나오니 JPA가 어떻게 사용되는지 정도는 알고 보는게 좋을 것 같다.

    11장은 CQRS로 조회/명령 모델의 분리에 대한 설명을 담고 있다. 모델이 분리되니 구현역시 분리할 수 있다는 이야기다. 주문, 배송지변경, 회원수정 같은 명령 모델엔 JPA같은 ORM을, 성능이 중요한 각종 조회 모델은 MyBatis, JDBCTemplate같은 Mapper를 이용 할 수 있다.

    더불어 책에 나오는 예제들은 모두 GitHub에 공개되어 있으니 전체 코드를 볼 수 있다.

    이 책을 추천하는 이유

    이 책을 한번 보면 좋을 것 같은 사람들

    • MyBatis, JDBC와 RDB를 이용해 서비스를 구현 해 본 사람들
    • (ORM을 아는 상태에서) 어플리케이션 설계에 대한 입문이 필요한 사람들
    • Java와 Spring 으로 웹 개발을 하는 사람들

    아직은 읽을 대상이 아닌 것 같은 사람들

    • JPA를 들어본 적 없는 사람들
    • JPA 필패론자
    • JPA 만능론자

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

  • 몇 년 전까지만 해도 내가 아는 도메인이라는 단어는 웹사이트의 주소인 도메인을 의미했다.
    실제적인 도메인의 사전적인 의미는 지방 정부의 관할, 학문 영역, 활동 영역, 인터넷 주소 등으로 정의되어있으며, 이 책의 주제인 DDD에서의 Domain은 크게 보아 영역을 구분하는 의미로 사용되며, 소프트웨어로 해결하고자 하는 문제 영역을 나타낸다.

    한 도메인은 다시 하위 도메인으로 나눌 수 있으며 각 하위 도메인은 또 다른 하위 도메인을 포함하기도 한다.

    이 책은 DDD에 입문하는 사람에게 DDD가 무엇인가부터 시작하여 어떤식으로 구성하고 구현하는지는 상세한 예를들어 설명하고 있기에, 약간의 프로그래밍 지식이 있다면 공부하는데 어려움 없이 책의 진도를 나갈 수 있다.

    책 내용의 진행은 객체 기반으로 DDD를 설명하고 있으며 JAVA 코드로 설명이 이뤄지기에 기존에 자바에 익숙한 독자라면 익숙하게 책장을 넘길 수 있을 것 같다.
    하지만 잘 모른다 해도 큰 틀을 이해함에는 부족함이 없다고 한다. (실제로도 그런 것 같다.)

    DDD에서는 도메인 전문가와 개발자간의 지식 공유가 활발하게 이루어져야하며 상호간에 요구사항을 명확하게 이해하고 진행하는 것이 중요하다. 그렇지 않을 경우 제품 개발에 실패하거나 일정에 차질이 생기는 일이 부지기수이기 때문이다.

    책을 넘기며 도메인 모델, 도메인 모델 패턴, 도메인 모델 도출의 순서로 모델을 구상하고 구체화해가는 과정을 익힐 수 있으며, 도출한 모델의 엔티티와 벨류를 구분하는데 있어서 주의해야할 사항 등을 세심하게 설명하고 있어서 이 개념에 익숙하지 않은 독자라 하더라도 손쉽게 감을 잡을 수 있을 것 같다.

    도메인 모델에 대한 내용이 마무리되고 나면 아키텍쳐, 애그리거트, 리포지토리와 모델 구현에 대한 내용이 나오고 스프링 JPA를 이용한 조회기능, 응용 서비스와 표현 영역, 도메인 서비스, 애그리거트 트랜젝션 관리, 도메인 모델과 바운디드 컨텍스트, 이벤트, CQRS 의 순서로 내용들이 진행된다.

    짧은 시간이었지만 책을 한번 읽고보니 막연하기만 했던 DDD에 대해 좀 더 나은이해를 할 수 있게 되었고, DDD로 프로젝트를 진행해보고 싶다는 생각이 든다.
    DDD 자체를 이해하는게 쉽지만은 않다보니 한 번 읽고 모두 흡수할 수 없기에 참고서처럼 옆에 두고 궁금할때마다 열어봐야겠다.

    DDD 입문서가 흔치 않은 현재 상황에 가뭄의 단비같은 존재인 것 같다.

    [한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.]

  •  

    20220424_223043.jpg

     

    이번 서평은 어려웠으나 재미있고, 유용했다고 말할 수 있다.
    저번달에 한빛미디어 소프트웨어 아키텍처 101를 읽어면서 많은 도움을 받았기에, 또한번 아키텍처에 도전하였다.
    ㅎㅎ 그런데 이번 책은 다소 어려웠다.
    그 이유는 저번책은 이론적인 이야기가 많았는데, 이번 책은 소스 코드가 많았다.
    개발자라면 소스 코드가 나왔다고 좋아해야 하지 않을까? 싶지만, 자바를 공부 안 한지 오래되었고, 제대로 공부한 것이 아니라, 슬쩍슬쩍 본 것이 다고, 파이썬 쪽으로 좀 더 많이 보다 보니, 다 잊어버려서, 대충 이해가는 정도로 이해하려다 보니, 중간에 힘이 많이 들었다.
    그러나, 평소 자바를 보시는 분이라면, 오히려 이 점이 많은 도움이 되시리라고 본다.
    저번 책은 소스 코드가 없어서, 실제 구현이 어떻게 이루어지는지 감이 안 잡혔는데, 이번 책은 이론적인 관점을 소스 코드로 모두 보여주기 때문에 직접 개발을 하시는 분들에게는 도움이 될 것 같다.

    20220424_223101.jpg

     

    소프트웨어 아키텍처 101를 읽고 이 책 제목을 보면서 도메인 주도 개발이 그 도메인 일 것이라고 생각했는데, 예상은 적중하였다.
    우리가 보통 이야기하는 도메인, 산업 영역이 맞다. 그래서 초반에 읽을때는 다소 쉬울것이라 생각했는데,
    그 도메인 영역을 자바의 개발 방법인 표현 - 응용 - 도메인 - 인프라스트럭처에 맞추어 깊게 들어가면서, 소스 코드를 이해하기가 복잡하고 어려웠다.
    이론적인 전개 흐름은 소스 코드를 몰라도 이해가 갔다.
    이 부분은 이 책 저자 분도 이런 이론 책을 처음 읽었을때에도 똑 같은 느낌이라고 했으니까, 초반에 이해가 안 되더라도 몇번이고 반복해서 노력하면 점차 나아질 것이라고 생각한다.
    이 책의 좋은 점이 주문이라는 도메인 영역을 가지고 현실 세계에서 개발을 하기 위해 필요한 여러 세부 도메인 영역으로 나누어 서로 어떻게 유기적으로 연결하고,
    각 영역에서 개발해야 하는 부분, 그리고 유동적으로 만들고, 하지 말아야 할 팁 들도 매우 상세하게 이유를 들어가면서 설명한다는 점이다.
    보통 이론과 소스 코드만 있는 책들도 많은데, 개발하다 갈림길에 들어섰을때 어떻게 하는 것이 좋은지 이유를 잘 설명한다. 그러다 보니 자바는 모르지만, 아키텍처 측면에서는 눈이 많이 넓혀졌다.

    MS 파워 플랫폼으로 개발하고 있는데, 로우 코드 기반이라서 도메인 주도 방식으로 생각해야 할 것들도 늘어나고,
    이 책에 따라 어느 부분이 적용하기 쉽고, 어려운지에 대한 궁금점이 일어나기도 했다. 도메인 주도 보다는 컴포넌트 방식이 더 주요할 것 같지만,
    개발할 때 상속이라든가, 아키텍처의 각 영역에서 잘못 선택해버리면, 소스 코드의 중복이라든가, 충돌이 쉽게 일어날 수 있다는 것도 알게 되었다.
    앞으로는 사용자 인터페이스, 응용, 도메인, 인프라를 잘 구분해서, 개발하려고 노력해야겠다.
     

    20220424_223129.jpg

     

    위 그림과 같이 책은 적절한 도형과 설명, 소스코드로 이루어진 것을 볼 수 있다.
     
    이 책은 자바로 주문 관련 개발을 하려고 하는 3년차 개발자가, 각 도메인 영역에서 어떻게 시작해서 개발을 시작하고, 영역을 묶음을 가지고 가고, 전 개발 과정에서의 원활한 협업을 위해 본인이 개발하는 부분이 어떻게 진행해야 되어야 하는지 알려주는 좋은 책이라고 본다.
    문제는 각 산업 영역에서의 도메인 지식이 부족하기 때문에 완전한 도메인 주도 개발이 되기 위해서는 현업과의 많은 이야기와 배움이 필요할 것으로 보여진다.

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

  • 스프링을 공부하면서 도메인이라는 용어가 나올 때 DDD라는 개념를 함께 알아두면 좋다고 해서 궁금했는데 마침 좋은 기회가 생겨서 DDD에 관한 책을 읽어보게 되었다. !!

     

    # DDD , Domain-Driven Design : 도메인패턴을 중심으로 설계하는 방법

    도메인 전문가(개발을 요구하는)가 도메인에 대한 경험을 바탕으로 원하는 기능 개발을 요구했을때 개발자가 도메인에 대한 지식없이 개발하다보면 요구사항을 정확히 이해하지 못하고 잘못 개발할 수 있다. 잘못 개발된 코드는 수정해서 고치려면 많은 노력이 든다.  이런 문제점을 해결할 수 있는 방법 중 하나로 DDD가 나왔다. 

    개발자와 도메인 전문가가 계속해서 소통하며 개발자가 도메인 전문가가 원하는 요구사항을 정확히 이해할 수 있다록 도메인과 구현을 만족하는 모델을 만든다. 

     

     

    # 총평

    이 책에서는 DDD를 통한 설계를 예제코드를 이용해서 설명한다. 따라서 실제로 어떻게 구현되는지 배울 수 있다. 어떤 언어나, 프레임워크를 배울때만큼 상세한 주석과 함께하지는 않지만 기존방식으로 설계시 생기는 문제와 이를 DDD로 해결하는 방식, 이유를 명확히 설명해준다. 또한 테이블로 구조를 계속 보여주면서 설명을 이어나가 예제코드가 어떤 구조로 이루어지고 있는지 잘 따라갈 수 있었다. 나같은 경우는 이 책을 통해 처음 공부하는 개념이라 모르는 용어가 많았는데 DDD를 위해 알아야하는 용어들을 의미를 파악하기 쉽게 그림으로 예를 들어 설명하여 쉽게 이해할 수 있었다. 

    대상 독자로 DDD에 대해 입문자, 초중급, DDD에 대해 잘 모르지만 관심이 있는 사람을 설정했다고 한다. 예제코드는 JAVA이며 스프링과 JPA를 기반으로 구현되어 있다. 저자는 자바와 스프링은 잘 몰라도 책에서 설명하는 내용을 따라가는데 어려움은 없으며 JPA가 무엇인지 정도는 알고 보는게 좋다고 이야기한다. 맞는 말이다. 어려움은 없으나 이론에 집중해있기보다는 예제코드를 통해 어떤 식으로 설계되는지에 집중되어 있기 때문에 규모가 작더라도 스프링으로 설계를 할 수 있는 정도에서 이 책을 읽으면 이해가 훨씬 빠르고 적용이 잘 될거라고 생각한다. DDD를 정말 생판 처음보아서 아무런 지식이 없다면 이론적인 개념만 압축적으로 설명하는 글을 한번보고 이 책을 읽으면 눈에 더 잘 들어올 것 같다.   

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  •  

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

    책을 읽기 전에

    최근 소프트웨어 개발에 있어 다양한 설계 방법론들이 제시되고 있는데, 그 중 제법 핫한 키워드인 도메인 주도 개발(DDD)에 대해 다루는 책이라서 많은 기대를 품었습니다.

    단순 이론이 아닌 실전

    소프트웨어 설계 방법을 다루는 기존 도서들 중에는 개념만을 위주로 깊게 설명하는 책들이 많았는데, 내용 자체는 유익하지만 어떻게 실무에 적용해야 할지 막막해지는 경우가 있었습니다. 하지만 이 책의 경우 ‘도서 구매 쇼핑몰’을 구현하는 것을 실제 코드와 함께 예시로 설명하고 있어 실제 적용이 훨씬 수월합니다.

    다이어그램을 활용한 개념 소개

    또한 단순 텍스트로만 설명하면 와닿지 않을 수 있는 설계 패턴을 다이어그램을 통해 시각화하여, 한눈에 구조를 파악할 수 있도록 도와줍니다. 또한 DDD에서 사용되는 여러 키워드들을 비유와 예시를 통해 알기 쉽게 설명하고 있습니다.

     

  • 도메인 주도 개발 시작하기

     

    백엔드 개발을 하다 보면 서비스가 확장될 때마다 레거시 코드의 수정이 필요한지 안 하는지 고민하게 됩니다.

     

    옛말에도 ‘바퀴를 다시 발명하지 말라는 말’처럼 이미 만들어져 잘 되는 것을 처음부터 다시 만들 필요는 없다는 것이죠.

     

    하지만 도메인이 전반적으로 달라지면 코드 크게 고쳐야 하므로 MSA형식으로 분할해서 개발하는 것이 더 편하다는 생각이 듭니다.

     

    그럼 이러한 상황이 덜 오게 하려면 어떻게 해야 할까요? 제일 중요한 것은 서비스 로직의 변화를 예상하는 것입니다.

     

    예를 들어 결제 시스템이 있습니다. 10년 전만 해도 카드 및 계좌이체만 생각했을 시스템이 지금은 각종 페이부터 간편 시스템들이 즐비한 시대가 됐습니다.

     

    결제 시스템이 늘어날 때마다 코드 전반을 고치는 것보다 확장성이 좋게끔 변화의 여지를 주는 개발이 필요합니다.

     

    이때 필요한 것은 바로 도메인 주도 개발입니다.

    에릭 에반스가 직접 만든 시스템 설계 방법인데요. 일명 DDD라고도 불립니다.

     

    10년 전에 나온 책(도메인 주도 설계)이 원서를 번역한 책이며 글 위주의 책이라 실무가 적은 개발자들이 보면 이해하기가 쉽지 않습니다.

     

    이 책을 이해를 돕기 위한 책이 나왔습니다.

     

    바로 ‘도메인 주도 개발 시작하기’입니다.

     

    2.jpg

     

    1) 애그리거트

    복잡한 도메인 모델을 관리할 수 있는 단위로 묶는 것을 에그리거트라 말합니다.

     

    애그리거트간 집합 연관을 살펴보기 위한 예시를 들어보겠습니다.

     

    카테고리와 상품 간의 연관이 대표적입니다.

     

    카테고리는 한 개이지만 카테고리에 속한 상품은 여러 개가 될 수 있습니다.

     

    1-N 연관도 있지만 상품의 경우 여러 카테고리에 속할 수 있다 볼 수 있는데요.

    그런 경우에는 M-N 연관도 요구사항을 고려하여 구현에 포함해야 합니다.

     

     

    3.jpg

     

     

    2) 도메인 서비스

    도메인 서비스에 대해 알아보겠습니다.

     

    도메인 서비스는 도메인 로직을 표현할 때 사용합니다.

     

    도메인 로직을 사용하는 예를 몇 가지 알아보겠습니다.

     

    먼저 계산 로직인데요.

    간단한 계산은 한 애그리거트에 넣을 수 있습니다.

     

    하지만 복잡한 계산 로직의 경우 여러 애그리거트에 로직을 넣어야 합니다.

     

    외부 시스템의 경우 구현할 때 타 시스템을 사용해야 할 때가 있습니다.

     

    다음 상황은 외부 시스템을 도메인 로직에 연동해야 합니다.

     

     

     

    1.jpg

     

     

     

    PS

    도메인 주도 개발을 알고자 하는 자바 서버 개발자에게는 큰 도움이 되는 책인데요.

    관련된 예제 소스도 실행이 잘되며 설명도 쉽게 되어 있어서 에릭 에반스의 책을 읽기 전에 이 책으로 개념을 잡고 넘어가면 좀 더 쉽게 잘 읽힐 것입니다.

     

     

  •  

    서론



    입사 1년차 때, 새로운 웹 서비스 개발을 했었다.

    첫 프로젝트였고 DDD(Domain Driven Design)로 구현을 했었다.

    신입이었기에 DDD가 뭔지 잘 모른채 개발을 했었고, 기억에 남은 것은 자바 애플리케이션 패키지 구조 (controller, service, repository) 와 Domain 단위로 나눴었다는 점?

    그래서 DDD를 단순하게 생각했을지도 모른다.

    여태 DDD로 프로젝트를 한 경험이 있다했지만, DDD 그 자체를 이해하지 못했었고, 진짜로 DDD를 적용을 해 구현을 했는가? 이것 또한 잘 모르겠다.

    그래서 이 책을 통해 DDD를 조금이라도 알고 쓰자 싶었다.



    PS. DDD는 여러 IT 회사 모집 공고의 자격 요건에도 간혹 등장한다.

    - DDD 기반 프로젝트 경험





    이 책을 잘 읽으려면

    - Java와 Spring MVC, JPA 기반의 예제로 이루어져 있어, 해당 코드를 읽을 수 있어야 할 것 같다.



    본문

    아래 이미지는 "온라인 서점" 이라는 도메인의 하위 도메인들이다

    도메인은 개발자 입장에서 구현해야 할 소프트웨어의 대상. 소프트웨어로 해결하고자 하는 문제 영역 이다.

    도메인은 다수의 하위 도메인으로 구성된다. 각 하위 도메인이 다루는 영역은 서로 다르며, 같은 용어라도 하위 도메인마다 의미가 달라질 수 있다!

    따라서, 여러 하위 도메인을 하나의 다이어그램에 모델링 하면 안 된다. (하나의 도메인을 이해하는데 방해가 됨)

    (자세한 내용은 책 29 p참고! )

    도메인 모델을 표현하는 방법이 두 가지가 있었다. 나는 객체 모델 밖에 몰랐는데 상태 다이어그램을 통해서도 모델링을 할 수 있었다.

    주문이라는 도메인의 상태 주문전, 결제 대기중, 상품 준비중 등 상태 전이를 모델링하는 것도 도메인 모델을 표현하는 방법 중 하나였다.



    1장에는 내가 알고있는 개념들과 헷갈렸던 도메인 관련 개념들이 있다.



    일반적인 애플리케이션 아키텍처를 짚고 넘어갈 수 있었다.

    표현 - 응용 - 도메인 - 인프라 - DB



    쉽게 접할 수 있는 온라인 서점 을 주제로 하여 쉬운 예제들로 설명이 되어있다.

    또한, 코드 가독성 및 이해를 높일 수 있는 팁에 대해서도 많이 소개를 하고 있었다. (예를 들면, 밸류타입)



    6장 응용 서비스와 표현 영역에서 처음보는 좋은 것들이 많았다.

    권한 검사라는 내용이 있다. 서비스 단에서 권한 검사를 하기도 한다는 점과 할 수 있는 법을 처음 알았다.



    정말 이렇게 공부하다보면,, 모르는게 진짜 많다는 걸 알게 된다..



    결론

    우리 회사에서 JPA + Spring Boot 프로젝트를 많이 진행하고 있다. DDD를 보통 적용하려고 하고 있다.

    하지만 나를 포함해 DDD에 대한 이해는 낮은 것 같다. 팀 단위로 같이 이 책을 스터디하여 적용을 한다면 DDD의 좋은 이점을 프로젝트에 많이 적용할 수 있지 않을까 싶다.

    더 꼼꼼히 읽어 팀에 공유해야지~!

    Spring boot + JPA 주니어 개발자 에게 추천합니다~~!!

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 최근 DDD와 관련해 관심이 생기던 찰나였다. 지금 다니고 있는 회사의 프론트엔드 아키텍처가 DDD 방식을 참고한 방향인지라 아키텍처에 대한 이론이나 백그라운드 지식을 얻을 필요가 있었기 때문이다.

     

    근데, DDD와 관련해 내가 딱 읽어보고 싶었던 책이 서평단을 통해 읽을 수 있는 기회가 찾아와 기분 좋게 읽을 수 있었다.  :)

     

    ---

     

    말머리를 쭈욱 훑어보면 도메인 주도 개발(DDD)의 입문자를 위한 초중급자용 개발자 서적이라고 써있는 걸 확인할 수 있다. 나는 이 말이 이 책의 주제와 구성들을 한 문장으로 설명하는 문장이라고 생각한다. DDD에 대한 핵심 개념 예를들어 엔티티와 벨류 타입에 대한 기초 개념, 애그리거트에 대한 기초 개념 등 여러가지를 심도있고 깊숙하게 다룬다 하기보다는 다방면에 걸쳐 찍먹(?)한다.

     

    물론 찍먹이라기엔 부정적인 느낌이 들 수는 있으나 핵심 개념들은 상세히 설명되어있고 오히려 실무에서 어떤 느낌으로 DDD를 사용할 수 있는지 예제 코드와 함께 기능적인 부분에 대한 고민도 함께 수록되어 있다 보니 초중급자 개발자에게는 다른 책보다 더 많은 걸 얻어갈 수 있으리라.

     

    책의 소스 코드는 서버 개발자를 대상으로 자바 스프링 그리고 JPA(orm)로 코드가 작성되어있다. 나는 프론트엔드 개발자라 자바 문법도 모르고 핵심 개념도 모르기 때문에 한 눈에 들어오지는 않았으나 평소 이런 종류의 개발 서적들이 자바로 된 경우가 왕왕 있고, 자바스크립트 코드에 빗대어 나름대로 해석해 가며 읽었기 때문에 완전 까막눈으로 보진 않았다.

     

    하여 프론트엔드 개발자(= 자바스크립트 개발자)가 DDD에 관심이 생겼다면, 게다가 자바 스프링을 모른다하더라도 공통적인 매커니즘은 비슷하므로 이해가 완전히 안되지는 않을 것이다. 만약 스프링을 할 줄 아는 사람이라면 정말 좋은 책이라 자부할 수 있다. 왜냐하면 스프링을 사용해 보지도 않았으나 좋은 책이다라고 느껴졌기 때문이다.

     

    좋은 책이란, 내가 미처 몰랐던 개념을 알려주고 가려웠던 부분들을 긁어주어 새로운 패러다임을 생각할 수 있게 기반을 닦아주는 책이라고 본다. 그런 의미에서 이 책은 DDD에 대해 몰랐던 개념을 알려주고 새로운 아키텍처에 대한 시각을 넓혀준 것 같다.

     

    이 책말고 DDD라고 하면 유명한 외국 서적이 한 권 있다. 그 책을 읽어보지는 않았으나 이런 개발론 or 아키텍처에 대한 책을 한 권만 읽을 생각은 아닐 것이기 때문에... 그 책을 먼저 읽어 기초 개념을 쌓아보는 것도 좋아 보인다. + 국산 프리미엄도 있다.

     

    내 친구 중에 스프링으로 개발 중인 녀석이 있는데, 추천해서 읽어보라 권할 책이다.

     

    ---

     

    **"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."**

  • 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

     

    몇해 전부터 도메인 주도 개발에 대한 이야기를 들어오고 있었고 스프링(Spring) 기반의 도메인 주도 개발을 프로젝트에 적용해 볼까 생각하는 도중에 "최범균" 님의 "도메인 주도 개발 시작하기"를 읽어보게 되었다. 

     

    우선 최범균님의 다른 책들도 꾸준히 읽어 봤고 기초 개념 확립 및 프로젝트 개발, 운영에서 많은 도움이 되었었는데 이번 책 "도메인 주도 개발 시작하기" 도 기본 개념을 잡기가 쉬웠으며 관련 내용을 조금만 응용하면 개발, 운영 프로젝트에 적용이 가능할 정도로 좋은 내용이 많았다.  

    언제나 최범균님의 책은 기초와 개념 정리가 잘 되어 있어 업무에 적용하기위한 핵심을 쉽게 익힐수 있는것 같다. 

     

    "도메인 주도 개발 시작하기" 책에도 언급하고 있지만

    "도메인 주도 개발 시작하기" 책의 대상 독자는 초중급이며  

    예제코드는 자바, 스프링(Spring MVC), JPA(ORM)을 기반으로 설명을 하고 있다. 

    책을 전체적으로 읽어봤는데 해당 언어나 기술을 몰라도 책을 읽는데는 큰 문제는 없었다. 

    JPA는 현재 업무에 사용을 하지 않아서 잘 모르지만 개념 및 전체적인 소스 및 설명을 읽어보니 도메인 주도 개발을 알기에는 큰 문제가 없었다. "도메인 주도 개발 시작하기" 책 에서는 JPA의 개념 및 간단한 예제만 설명하고 있다. 

    하지만 "도메인 주도 개발 시작하기" 개념 및 기초를 익히고 JPA를 추가 공부한다면 도메인 주도 개발에서도 JPA를 100% 활용할 수 있다고 본다. 

    또한 다른 언어를 학습한 사용자도 "도메인 주도 개발 시작하기" 책을 통해 도메인 주도 개발 주제를 쉽게 학습하고 기본 개념 및 활용 방법을 도출할 수 있다고 생각한다. 

     

    "도메인 주도 개발 시작하기" 책의 목차 는 11개로 구성되어 있는데 각각 단원마다 도메인 주도 개발을 위한 기본 개념과 어떻게 설계 및 그리고 어떤 방식으로 도메인 주도 개발을 진행할 수 있는지 자세히 설명하고 있다.  

    1. 도메인 모델 시작하기

    2. 아키텍처 개요

    3. 애그리거트

    4. 리포지터리와 모델 구현

    5. 스프링 데이터 JPA를 이용한 조회 기능

    6. 응용 서비스와 표현 영역

    7. 도메인 서비스

    8. 애그리거트 트랜잭션 관리 

    9. 도메인 모델과 바운디드 컨텍스트

    10. 이벤트

    11. CQRS 

     

    각 목차별로 객체지향, 데이터베이스 개발 설계에서 도메인 주도 개발로 변경하면서 각각에 대한 문제점 및 개선 방향을 제시하고 왜 도메인 주도 개발로 나아가야 하는지 그리고 각각 방식에 대한 설명함으로써 해당 방법을 왜 써야 하는지 알 수 있게 쓰여 있었다.

    도메인 주도 개발을 전부는 적용하지 못해도 하나씩 업무에 적용하여 개선할 수 있는 주제로 쓰여있고 부분적으로 활용해 볼 수 있다고 생각한다.   

     

    "도메인 주도 개발 시작하기" 책을 읽으면서 도메인 주도 개발과 현재 개발, 운영하는 프로젝트를 비교해 봤는데 회사 프로젝트가 업무중심이라 도메인 주도 개발 처럼은 진행을 하고 있는것을 알게 되었고 몇개의 설계 문제점 등을 "도메인 주도 개발 시작하기" 책을 통해 알게 되었다. 

    그리고 책을 읽으면서 JPA도 이제는 적용을 할수 밖에 없는 것을 알 수 있었다. SI 프로젝트에서는 아직 Mybatis를 사용하고 있는데 이제는 JPA 혼용 방식등도 생각해봐야 할 것 같다. 

      

    마지막으로 책은 전체적으로 세세하게 읽기 편하게 구성되어 있었다.

    1. 그림에 의한 프로세스 설명 

    2. 소스에 대한 설명

    3. 소스에 대한 기능개선을 진행하면서 설명 

    그림을 통해 프로세스를 설명하고 반복하면서 도메인 주도 개발에 대한 개념 및 기능을 학습하게 할 수 있게 구성되어 있으며 조금씩 구조를 바뀌어서 올바른 방향 및 더 좋은 방법에 대한 것을 소스코드 및 관련 설명을 읽으면서 학습할 수 있게 쓰여 있었다. 

     

    도메인 주도 개발에 관심이 있고 방향성을 고민해 본다면 이 책을 한번 읽어보기를 권하고 싶다. 

  • > 진행에 앞서

    모바일 개발자. 특히 안드로이드 개발자로 지내오면서, 도메인이란 무엇인지, 설계가 어떻게 되어야 하는지 깊게 고민하기 시작한 것은 그리 오래되지는 않은 것 같다. 한.. 6~7년전? 그 전까지는 그냥 피쳐 개발이라는 것에 집중되어 있었다는 생각도 들고, 그 이후로도 그냥 단건의 문제 해결에 집중하면서 앱이든 라이브러리든 개발을 해 왔던 것 같다. 모바일 개발자 전체적으로도 그런 분위기가 크게 대두된건 그리 오래지 않은 느낌이다.


    처음엔 MVC, MVP, MVVM과 같은 뷰와 관련되어 어떻게 개발을 해야 하는지에 좀 더 포커싱이 맞춰졌다면, 그보다는 더 큰 틀 안에서 어떻게 더 구조화된 프로그래밍이 가능할지 논의 및 연구가 활발하게 진행된 것으로 보인다. 그러다가 클린 아키텍처라는 용어도 많이 회자되면서, 그 안에 포함된 도메인이라는 개념을 이해하기에 많은 시간을 할애하였던 기억이 난다. 아직도 제대로 이해하고 있다는 생각이 들지는 않지만, 그래도 관심갖고 꾸준히 보아온 영역이기에, 그 도메인 주도 개발은 어떻게 시작할 수 있을지 궁금함을 가지고 이 책을 접해보았다.


     

    > 책에 대한 간단한 정보

    간단한 디자인의 표지

    도메인 주도 개발을 의미하는 DDD(Domain Driven Development)를 형상화하여 표지에 표현하였다. 예쁘다는 표현은 어울리지 않을지 모르지만, 간단하고 책 속의 내용이 연상된다는 점에서는 잘 와 닿았다.



    > 인상깊은 부분들

    이 책의 대상에 대한 머릿말

    DDD에 대한 책임을 말함과 동시에, 이 책을 보기에 적절한 독자 수준을 말하고 있다. DDD 자체에 대해서는 저자가 말한 것과 같이 초중급에 적합해 보인다. 다만 글에서는 DDD 입문자를 대상으로 하고 있다고 하여 무슨말인지 하는 의문은 들었다. 개인적으로는 입문자보다는 어느정도 가볍게라도 접했던 독자가 적합해 보인다고 생각은 든다.

    또한 최소 지식 요구사항도 말하고 있다. 저 부분은 어느정도 납득은 간다. 제대로 보기위해서는 스프링과 JPA 등의 지식이 필요하다. 하지만, 일단 모르는건 넘어가는 방식으로 읽어도 된다면 그렇게 중요하지는 않을지 모른다.


    도메인의 위치

    책의 앞 부분에서 말하고 있는 도메인의 위치이다.

    표현, 응용, 도메인, 인프라스트럭쳐는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역이다.

    아키텍처 공부를 해본 사람이라면 이런 비슷한 그림은 많이 접했을 것이다. 그 중에 중간 다리 역할 정도로 도메인이 포지셔닝하고 있음을 보여준다. 아주 기초적인 지식이겠지만, 이러한 개념 정립 없이 다음에서 서술하는 많은 개념들을 접하다보면 내 위치와 방향을 잊어버릴 수 있기 때문에, 좋은 나침반이 된다. 또한 이런 비슷한 그림이 후에도 많이 제공되고 있다.

    그리고 이 책의 시작부분에서는 온라인 서점을 대상으로 사례를 들어 설명하였다. 우리가 개발에서 도입하는 도메인은 해당 도메인의 모든 기능을 제공하는 것을 전제로 하지 않았다.


    엔티티 설명

    엔티티에 대해 대략적으로 다루었던 기억으로 이 내용을 보았던 터라 다행히 제대로 이해할 수 있도록 도움을 주었다.

    엔티티와 밸류에 대해 이야기 해 주었던 부분인데, 일단 도메인 모듈에 대한 설명이 앞서서 필요하였다.

    도메인에서 모델을 도출할 수 있다. 모델이란 도메인 자체를 표현하는 개념적인 모델을 의미하지만, 도메인 계층을 표현할 때 사용하는 객체 모델을 언급할 때에도 도메인 모델 이라는 용어를 사용한다. 따라서 이 책에서도 ‘도메인 모델’이라는 용어로 명확하게 구별하여 사용하고 있다.

    그리고, 엔티티에 대한 부분인데, 엔티티의 가장 큰 특징은 식별자를 가진다는 사실이다. 식별자를 가지는 객체 개념이므로 투 엔티티 사이의 차이점을 표현할 수 있는 equals() 혹은 haseCode()를 재정의하여 사용하는 것으로 표현하면 좋다.

    밸류에 대한 간단한 정의로는 식별자가 포함되지는 않아도 개념적으로 완전한 하나를 표현할 때 쓰는 객체이다.


    모듈 구성하는 방법에 대한 설명

    모듈을 어떻게 구성하는 것이 좋을지에 대한 설명이다. 이 부분과는 다른 곳에 나온 설명이지만, 설계적 관점에서 볼 때 추가로 DIP를 언급한 내용이 인상적이었다.

    DIP를 설계의 중요한 원칙으로 삼고 있는데, DIP는 Dependency Inversion Principle, 즉, 의존 역전 원칙이다. 자세한 것은 SOLID로 명명되고 있는 객체지향 설계 5원칙을 참고하면 되며, 여기에서는 이것을 어떻게 적용해야 잘 적용된 것인지 말해주고 있다. 도메인 레이어에서의 참조가 인프라스트럭처를 향해있지 않도록 설계하기 위한 방법으로 DIP를 사용하는 방법이 중요하다고 말하고 있다.


    추가로 도메인 영역의 주요 구성요소는 다음과 같다. 엔티티, 밸류, 애그리거트, 리포지토리, 도메인 서비스이다.

    이 중 애그리거트란 도메인을 쉽게 이해하기 위해서 상위 수준에서 모델을 조망할 수 있도록, 관련된 객체를 하나의 군으로 묶어주는 방법이다. 이렇게 하면 상위수준에서 도메인 모델 간의 관계를 파악할 수 있다. 모듈 설계에서는 이 애그리거트를 잘 이용해야 한다.


    실제 설계 및 구현시 주의사항

    시스템간 강결합 문제를 포함하여 이벤트, 핸들러, 디스패처, 동기 이벤트 처리 등에 대한 문제도 설계적 관점에서의 처리 방법을 다룬 내용이 인상적이었다.

    이와 함께 CQRS 패턴에 대한 내용도 있는데, 명령(Command) 모델과 조회(Query) 모델을 분리하는 패턴이다.

    이 곳에서 모두 다룰 수 없는 부분이지만 실제 개발에서는 유용한 기법이라고 생각이 들었다.


    그리 어렵지 않다고 강조하는 듯한 뒷표지

    아키텍처와 리팩토링 등의 지식에 관심이 있는 사람이라면 이 내용도 관심을 가질 수 밖에 없을 듯 하다.



    > 괜찮은 부분

    1. 도메인 주도 개발을 위한 기초 및 응용 지식을 쌓을 수 있다.

    개발자라면 도메인 주도 개발에 대한 용어를 한 번쯤은 듣거나 찾아본 적이 있을 것이다. 아니면 밀접하게 이미 개발에 활용하고 있을지도 모른다. 그런 모두에게 다시금 이 개념에 대해 생각해보고 다시 기초를 쌓을 수 있는 기회를 제공한다. 혹은 본인이 이해하고 있는 개념에 대해서 다른 부분을 찾을 수도 있을 것이다. 그런 경우 실무에 적용하면 좋은 지식도 충분히 찾을 수 있다.


    2. 각 용어에 대해 의미를 설명하고, 접근을 시작한다.

    용어를 대강 안다고 가정하고 넘기지 않았다. 특히 인상적이었던 부분은 엔티티와 밸류, 애그리거트에 대한 부분이었다. 그냥 객체화를 잘 시키면 그것이 엔티티라고 생각했던 나에게 정확한 개념을 알려주었으며, 애그리거트 또한 애그리게이트(Aggregate)와 동일한 스펠링을 가진 상태라서 당연히 애그리게이트 정도로 생각할지 모르지만, 이곳에서는 정확하게 발음기호까지 추가하여 애그리거트로 해야 명사의 의미로 접근이 가능하다고 하며 이해를 구하였다. 이 밖에도 여러 개념들을 가볍게 넘기지 않음으로써 막히는 부분이 없도록 노력한 흔적이 인상적이었다.


    3. 책의 흐름이 난이도 및 관심도부터 시작하여 자연스럽게 흐른다.

    아마 내가 구성했더라면, 딱딱하지만, 전체 개념부터 시작해서 전체 용어와 그걸 차근히 내려가는 방식으로 서술했을지 모른다. 하지만, 그렇다면 재미가 반감했을 것이 뻔하다. 이 책에서는 도메인 모델, 엔티티, 밸류 등으로 시작하여 관심을 유도하고, 그것으로 주요 구성요소를 도출해내며, 다시 그 안에 있는 내용을 하나씩 펼침으로써 자연스럽게 흐름에 동참하도록 하였다. 개인적으로는 스프링에 적용했던 내용을 제외하곤 전체적으로 필요성과 지식이 자연스럽게 축적되었기에 좋은 흐름이라고 생각되었다.

     

    > 아쉬운 부분

    1. 실전 프로젝트 설계를 함께 진행했으면 좋았을 것 같다.

    물론 일부 모듈 구성에 대한 설계가 되어있기는 하였다. 하지만 그 내용 또한 부분적으로 해당된 내용이며, 만약 실제 프로젝트를 구성하는 방식의 부록이나, 예제코드를 만드는 과정을 하나의 내용으로 할애하였다면, 좀 더 실무적인 측면에서의 갈증도 채우지 않았을까 하는 생각이 든다. 물론 이 책의 내용이 모두 정답일수는 없기에 자유도를 열었다는 생각은 들지만, 사람에 따라 실재적인 것을 확인하면서 이해를 쉽게 하는 경우도 많기 때문에 이러한 접근도 있으면 좋지 않았을까 생각이 들었다.


    2. 테스트에 대한 부분도 따로 나와있지는 않아서 아쉬웠다.

    테스트는 도메인 주도 설계의 큰 장점 중 하나라고 생각했기에 이러한 언급이 왜 없을까 생각이 들었다. 스프링이나 서버 관점에서는 테스트를 달리할지도 모르지만, 그렇다해도 단위테스트는 의미가 있을것이다. 플랫폼이나 프레임워크에 종속되지 않는 테스트 방법에 대한 것을 알려주었다면 좀 더 도움이 되었을 것 같다.

     

    > 추천 독자

    - 구조적인 설계를 고민하는 중급 이상의 개발자

    - 도메인 주도 개발이 반영된 코드를 베이스로 하는 팀에 소속된 팀원

    - 트렌드한 개발에 관심있는 개발자

     

    > 개인적인 평점

    - 가격: 8 / 10

    - 내용: 9 / 10

    - 디자인: 7 / 10

    - 구성: 9 / 10

     

    > 정보

    저자: 최범균

    출판사: 한빛미디어

    가격: 28,000원

    전체 페이지: 356페이지

     

    ** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

  • 이 책은 과거에 출간 되었다가 최범균님의 노력으로 재출간된 책이다.

     

    널리 알려져 있듯이, 최범균님은 자바 진영의 네임드 개발자 중 한 분이시고,

     

    페이스북을 통해 여러 개발자들과 소통하고 있는 분이다. 이 책의 재출간 소식을 

     

    처음 알게 된 것도, 최범균님의 페이스북 피드였다.

     

     

     

     

    평소 도메인 주도 설계란 용어만 알고 있던 나에게는 흥미가 동하는 책이었다.

     

    재출간 되었다고 하니, 필시 매력이 있는 책일 것이다란 기대를 가지고 리뷰 신청을 

     

    하게 되었다. 그 동안의 리뷰가 책을 간략히 소개하는 관점이었다면,

     

    이번 리뷰는 조금 다른 관점(어떻게 이 책이 다시 출간하게 되었는지?)에서 접근하고자 한다.

     

     

    책을 간략히 소개하는 리뷰는 다른 분들이 충분히 써줄 것이기 때문이다.

     

    책을 받은 후에, 지은이의 말부터 펼쳐 보았는데...

     

    그 곳에서 최범균님이 이 책을 다시 출간하게 된 계기를 엿볼 수 있었다.

     

    DDD를 학습하려고 할 때 가장 어려웠던 점은 DDD 자체를 이해하는 것이었다.

     

    처음 책을 읽을 때에는 이해되지 않는 내용이 많아서 무작정 여러 번 반복해서 읽었다.

     

    지금도 DDD를 완전히 마스터 했다고 할 수는 없지만 이런 식으로 조금씩 이해의 폭을 넑혔다.

     

    두 번째로 어려웠던 점은 구현이었다. 그 당시만 해도 DDD에 대한 구현 예제가 많지 않았다.

     

    DDD에 대한 이해가 부족한 상황에서 참고할 만한 코드도 없었기에 여러 시행착오를 겪으며 

     

    구현을 시도했다. 이후 많은 시간이 흘렀지만 여전히 많은 개발자가 DDD와 도메인 모델 구현을 

     

    어려워 하고 있다. DDD가 어렵게 느껴지는 여러 이유가 있겠지만 무엇보다 징검다리 역할을 

     

    하는 DDD 입문서가 없다는 것이 가장 큰 이유 중 하나라고 생각한다. 

     

    <<지은이의 말 중 발췌>>

     

     

    << 총평 >>

    이 책은 DDD에 관심이 있지만 아직 DDD에 대한 이해가 부족한 개발자라면

     

    무조건 읽어야만 하는 책이다. 지은이의 말에도 언급되어 있지만, 이 책은 어려운 DDD 

     

    개념을 이해하기 위해서 징검다리 역할을 하는 책이기 때문이다. 2주 남짓의 짧은 리뷰 

     

    기간이라 DDD 징검다리를 다 건너지는 못하였지만, 다시 시간을 내어 반복하고 싶은 책이다.

     

     

    한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.




  • "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

    도메인 주도 개발 시작하기

     

    • 우선 이 책은 예전에 김영한님의 JPA 아님 QueryDSL 강좌를 듣던중에 추천해줬던 책이라 기억합니다.

     

    • 당시 서점에서  빠르게 스캔했는데, 설명하는 기술 구현체가 회사 기술스택이랑은 맞지 않아 잘 익히지 않아서 책을 사지는 않았습니다.

     

    • 아마 개정된 버전인 거 같은데 이전 버전보다 가독성이 좋아진 것 같습니다. 

     

    • 예제도 이전 버전보다 좀 더 잘 읽힙니다.

     

    • 깃허브 링크도 제공되어서 빠르게 소스가 어떤 식으로 구성되어있는지 볼 수 있어서 좋습니다.

     

    • 기술 구현체로 JPA 예제도 있어서 도움이 됩니다.

     

    • 관심이 있었던 부분은 애그리거트 트랜잭션 관리 부분입니다.

     

    • 최근 낙관 비관  관련하여 공부 중이었는데  부분은   반복적으로 읽어서 제것으로 완전히 소화해야 겠다는 생각이 듭니다.

  •  

     

    이 책의 독자는 DDD의 입문자를 위한 책입니다. 이 책은 Java, Spring 그리고 JPA코드로 주로 설명이 되어 있어서 해당 기술들을 조금 알고 있으면 도움이 될 것 같습니다. (객체 지향의 다형성, 상속, 캡슐화, DIP 개념도 알고 있으면 좋을 것 같습니다.)

     

     

    사실 이 책이 재출간되기 전 DDD start!란책을 갖고는 있었지만 읽지는 못한 상태였습니다. 이 책을 재출간된다는 소식을 알고는 있었는데 4월 도서 리뷰 리스트에 이 책이 있는 걸 보자마자 주저 없이 바로 선택했습니다. 요즘 하고 있는 우아한테크코스 pro 프리코스에서도 도메인 단위로 기능 명세를 만들고 그 순서대로 테스트, 구현을 매우 중요하게 요구하고 있었는데, 그런 점으로 보아 도메인의 중요성은 크구나 느꼈습니다. 

    사실 DDD는 예전에 MSA 스터디할 때 조금 공부해본 것 말고는 잘 모르지만 이 책을 읽으면서 그때 공부했던 기억을 리마인드 할 수 있었던 게 개인적으로 좋았습니다. "마이크로 서비스 아키텍처는 도메인 중심으로 서비스를 모델링하는 것이 중요하다."라고 공부했던 게 기억이 나는데 서비스가 충분히 커서 MSA로 갈 때 그만큼 중요한 것이 도메인이라는 것이 다시 한번 생각났습니다. 개인적으로는 리뷰하기 어려운 상급(?) 난이도의 책인 거 같은데... 생각보다 두께가 두껍고 기술적인 내용이 거의 다여서 그냥 중요하다고 생각되는 일부분만 정리하고 마무리하려고 합니다. 

     

    내용 정리

    도메인이란 소프트웨어로 해결하고자 하는 문제 영역입니다. 도메인은 여러 하위 도메인으로 구성되면 도메인끼리 연동하여 기능을 제공합니다. DDD 하면 떠오르는 것 중에 하나가 각각 Layer별 특징이 있는데 아래와 같습니다.

    사용자 인터페이스 계층 : 사용자의 요청을 처리하고 사용자에게 정보를 보여준다. 여기서 사용자는 소프트웨어를 사용하는 사람뿐만 아니라 외부 시스템일 수 도 있다.

    응용 계층 : 사용자가 요청한 기능을 실행한다. 업무 로직을 직접 구현하지 않으며 도메인 계층을 조합해서 기능을 실행한다.

    도메인 계층 : 시스템이 제공할 도메인 규칙을 구현한다.

    인프라스트럭쳐 계층 : 데이터베이스나 메시징 시스템과 같은 외부 시스템과의 연동을 처리한다.

    위 DDD에서 네 영역 중 가장 핵심은 아무래도 도메인 계층입니다. 도메인 계층의 주요 구성요소는 아래와 같습니다.

    엔티티(Entity) : 고유의 식별자를 갖는 객체로 자신의 라이프 사이클을 갖는다. 

    밸류(Value) : 고유의 식별자를 갖지 않는 객체로 주로 개념적으로 하나인 값을 표현할 때 사용된다.

    애그리거트(Aggregate) : 애그리거트는 연관된 엔티티와 밸류 객체를 개념적으로 묶은 것이다.

    리포지토리(Repository) : 도메인 모델의 영속성을 처리한다. 예를 들어 DBMS 테이블에서 엔티티 객체를 로딩하거나 저장하는 기능을 제공한다.

    도메인 서비스(Domain Service) : 특정 엔티티에 속하지 않는 도메인 로직을 제공한다.

     

      "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

  • 20220424_171526.jpg

     

    가장 쉽게 배우는 도메인 주도 설계 입문서를 표방하는 이 책은, 실제 업무에 DDD를 바로 적용해 볼 수 있도록 기본적인 DDD의 핵심 개념을 익히면서 구현을 통해 학습할 수 있게 구성된 도서인데요.

     

    비즈니스 도메인별로 나누어 설계하는 방식에 대해 저처럼 언뜻 들어본 적만 있거나, 혹은 들어본 적도 없이 늘 하던 대로 dto - dao - service - controller 방식으로만 웹 애플리케이션을 만들었었다면, 새로운 설계 방식을 익혀 볼 수 있는 기회를 주는 도서입니다.

     

    도메인 주도 개발 시작하기 책은 DDD를 처음 접하는 개발자를 위한 책으로 도메인 주도 개발 입문자를 대상으로 한다고 해요. 저처럼 DDD를 처음 공부해 보려는 사람에게 적합한 책!

     

    3~4년의 개발 경험이 있다면 내용을 이해하는데 좀 더 수월할 거라고 적혀있더라고요. 저는 요즘 자바 공부를 안 한 지도 좀 됐고, 개발 분야 공부 경력이 길지 않아서 확실히 그동안 리뷰했던 다른 책에 비해 진도가 느리게 나가고 있어요.

     

    그래도 이해에 시간이 더 걸려 진도만 느릴 뿐, 막상 각 잡고 공부하려고 이 책을 볼 때 설명이 쉽게 풀어져 있어 이해 안 가는 부분은 몇 번 다시 읽고 코드 따라 쳐보고 하면 어느 정도 알겠네 싶어 다음 진도로 넘어갈 수 있었습니다.

     

    저자의 깃허브에 도메인 주도 개발 시작하기 책의 전반적인 내용이 담긴 예제 코드가 올라가 있어요. 개발 도서는 다 그렇긴 하지만 책 앞부분에 예제 소스를 내려받아 어떻게 사용하면 되는지에 대한 설명도 자세해서 좋았습니다. 예제 코드는 메이븐, 자바 17, 스프링 부트, JPA, 타임리프, MySql이 사용되었다고 해요. 그래서 확실히 JPA, 타임리프 사용을 해보셨던 분들이라면 공부할 때 한결 수월할 듯.

     

    ​도메인 주도 개발 시작하기 도서에서는 도메인 모델을 표현할 때 알아야 할 기본적인 내용부터, 복잡한 도메인 모델들을 관리 가능한 단위로 묶어주는 역할인 애그리거트가 무엇이고 구현을 어떻게 해서 적용해야 하는지, 애그리거트의 논리적인 저인 리포지터리는 또 어떻게 구현하는지 등에 관해 단계별로 각 장마다 차근차근 따라갈 수 있도록 적혀있어요.

     

    그러니 이 책을 완독하며 직접 코드를 쳐가며 실습해 본다면 DDD가 무엇이고 어떻게 사용하면 되는지 익히기 아주 좋습니다. 중간중간 보충 설명이나 참고사항, 유용한 팁, 주의할 점등에 관해서도 적혀있어서 도메인 주도 개발 입문자가 DDD 개발을 하면서 올바른 방식으로 사용할 수 있게 도와주더라고요.

     

    흐름 좋게 도메인 주도 개발 방법이 적혀있는 도서이므로 웹 어플리케이션 개발 시 기존 DTO-DAO-서비스- 컨트롤러 방식에서 벗어나 도메인 주도 개발을 익혀보고 싶었다면, DDD 입문서로 이 책을 꼭 한 번 읽어보면 좋을 것 같습니다.

     

    ** 본 리뷰는 한빛미디어 <나는 리뷰어다> 리뷰어 활동으로 도서만을 제공받아, 리뷰어의 주관적인 견해로 작성 된 리뷰입니다. **장소

  • Intro

    학교 선배가 백엔드 공부를 할 거라면 최범균님의 DDD Start!라는 책을 DDD 입문서로 추천한다고 말했던 기억이 있습니다. 근데 아쉽게도 지금은 절판됐고 지금은 막 리셀가로 팔리기 때문에 도서관이라도 가서 꼭 읽어보라고 말하더라고요. 백엔드 공부하다 보면 언젠가 읽어보겠지 싶었는데 이번에 한빛미디어에서 새롭게 나오게 되어 읽어보게 됐습니다.

    Book Review

    기본 지식

    이 책의 예제 코드는 자바로 쓰여져 있으며 스프링 MVC와 JPA를 기반으로 구현되어 있습니다. 초반에는 개념에 대한 내용이 많아서 코드에 대해 정확히 모르시는 분이 읽어도 괜찮지만, 후반으로 갈수록 코드로 구현하면서 설명하는 부분이 많고 불필요한 설명은 생략되어 있으니 Spring과 JPA에 대한 경험이 어느정도 있으신 분께 추천드리는 책입니다.

    신입 개발자

    이 책은 DDD 고수가 되는 법을 알려주는 책이 아니며 DDD를 처음 접하는 입문자를 대상으로 하는 책이라고 합니다. DDD 입문자가 읽기에는 좋은 책이지만 백엔드 개발자를 목표로 하는 대학생 입장에서는 신입 개발자가 읽기에는 좀 어려운 책이라고 느꼈습니다. 후반으로 가면 갈수록 제가 JPA에 대한 이해가 낮아서 그런지 점점 읽기 힘들었습니다. 또한, DDD에 대한 개념적인 내용은 대략적으로 이해가 됐으나 이걸 어떻게 구현해야 할 지는 아직도 막막하다라고 느꼈습니다. 그러나 저자의 깔끔하고 자세한 설명 덕분에 충분히 공부해서 읽어볼 만한 책이라 생각합니다.

    대상독자

    대상독자는 아무래도 이 책의 저자께서 설명하신 것처럼 대략 3~4년의 개발 경험이 있다면 내용을 이해하는 데 어려움은 없을 것 같습니다. 또한, Spring에 관심 있고 자바 백엔드 개발자가 되고 싶은 대학생이라면 한 번쯤 읽어볼 만한 책이라 생각합니다.

  •  TDD, DDD, MSA 등 최신 트랜드에 맞춤 이런 용어들을 많이 들어봤다. DDD 또한 오래전부터 있던 개념이긴 하지만 SI를 주로 했던 나에게는 생소한 개념이라고 할 수 있겠다.

     예전에 봤던 글 중에서 절차지향 개발 방법과 객체지향 개발 방법을 보고 충격을 받은 것과 비슷할 것이다. 같은 결과가 나오는 데 객체지향 개발 방법을 보면 제대로 이해할 수가 없었다.

     도메인 주도 개발 또한 많이 써보지 않은 개념이라서 많이 생소했다. 저자분께서는 대상 독자를 초·중급이라고 표현한 것으로 보아 나는 초급인듯하다.

     책을 보면 볼수록 간단한 개념은 대략 넘어갈 수 있지만 그것을 실제로 구현된 소스 코드를 보니 하나씩 따라가다 보면 이해는 가지만 내가 작성하라고 하면 못 할 듯하다.

     좋은 책이지만 동시에 어려운 책인 듯하다. 하지만 당장 내가 안 쓰더라도 이런 개념은 익히고 숙달하는 것은 자신의 성장에 많은 도움이 될 것이다.

     

      "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


  • "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

     

    제목 : 도메인 주도 개발 시작하기(DDD 핵심 개념 정리부터 구현까지)


    리뷰 요약

    DDD가 무엇인지 몰랐거나 애매하게 알고 있었다면,

    '도메인'을 네트워크 호스트 이름으로만 알고 있었다면,

    개발은 좀 해봤지만 DDD를 적용해서 좀 더 나은 구조를 만들고 싶다면,

    초보에서 벗어나기 위해 한단계 더 업그레이드 하고 싶다면

    이 책으로!

     

    이 서적의 핵심

     

    1. '이 책은 DDD를 처음 접하는 개발자를 위한 책으로 DDD 입문자를 대상으로 한다.

    DDD 고수가 되는 법을 알려주는 책은 아니다.'

     

    - '몇 년 전부터 도메인 주도 개발(설계), DDD에 대한 이야기를 많이 들었다.

    하루가 다르게 더 괜찮은 설계, 개발 방법과 기술들이 나오는 와중에서도

    가장 많이 들었던것은 그만큼 검증되고 잘 쓰이는 기술이었다고 생각하지만,

    눈앞의 위기가 먼저였기 때문에 배우지 못했다.' 같은 생각을 가진 사람이라면

    많은 도움이 될 것이라 생각 됨.

     

     

    2. '예제 코드로 사용한 언어는 자바이며, 스프링 MVC와 JPA를 기반으로 구현,

    SQL에만 익숙하다면 JPA가 무엇인지 정도는 학습하고 이 책을 읽기 바란다'

     

    - 자바를 공부 했거나, 어느정도 개발 공부를 해봤던 사람이라면

    충분히 읽을 수 있는 정도의 난이도이지만 JPA를 한번도 사용해보지 않았거나 잘 모르고 있다면

    어려움을 겪을 수 있음(JPA를 모르면 좀 돌아가야되는 수고가 있을 수 있음...!)

     

     

    3. 도메인 모델을 구축하는 내용

     

    - 사실 이 책을 읽기 전까지 DDD를 몇번 찾아보긴 했지만 뭔소린지 모르겠고, 당장 필요하지 않아서

    접었던 기억이 있음, 그리고 이 책을 처음 읽기 시작하면서 가장 당황스러웠던건

    '도메인' 이란 단어인데, 처음에 '도메인' 하면 우리가 흔히 접하는 '한빛미디어', '네이버', '카카오' 같은

    네트워크 호스트 이름을 의미하는줄 알았는데, 그게 아니었다는것에 충격을 받음.

    (이런 사람들을 타겟으로 하는거겠지?)


    간단하게 도메인은 영역 분야, 범위의 뜻을 갖고 있으며,

    위에서 말한 '네트워크 호스트 이름'이란 정의가 하위 범위 안에 들어감.

    이 책에서는 특정 기능이 속한 범위, 어떤 행동을 하는 객체 등이라고 할 수 있을 것 같다.

    (말로 표현하기가 참 어렵다 어려워)

     

     

    4. 설계(구조), 방법 등에 대한 내용이기 때문에 지루할 수 있으나

    개발을 하는데 있어서 매우 유용하고 알찬 내용들로 가득함.

     

    - 대상 타깃이 DDD를 배우는 초급자임에도 설계 구조 등을 설명해야 하기 때문에 어려움을 느낄 수 있음.

    하지만 읽고 알아두면 개발에 매우 유용한 지식들이 대부분, 글로만 설명하기 에매한 부분은 코드와 그림 등으로

    조금이라도 쉽게 이해할 수 있도록 설명.

    (실무에선 기획서나 설계서를 작성하는 살람이 아니라면 잘 보지 못했던 구조와 관련된 그림이 많이 나옴)

    학교 다닐 때 분석 설계 같은 과목에서 많이 봤던...

    마무리

     

    '유용한데 어렵다'

    이게 아직 나의 수준이라고 생각한다.

    책 후반부로 갈 수록 내용이 어려워진다.

    '애그리거트', '바운디드 컨텍스트', 'CQRS' 등

    처음보는 단어들도 너무나 많다.


    하지만 확실히 설계와 관련된 공부를 하면 몰랐던것을 알게되고,

    애매했던 부분이 확실해지면서 실력이 조금이라도 향상된 기분이 든다.


    테스트 주도로 하는 방법 TDD나 지금 보고있는 DDD나

    누가 정답이고 더 좋고, 먼저라고 할 순 없을 것이다.

    다양한 프로그램 개발 기법과 설계 기법을 배우고,

    배운것을 써서 더 단단하고 아름다운 프로그램을 개발하게 된다면

    그것보다 뿌듯한 개발자의 삶이 없을거라 생각한다.

     

    이 책은

    한번 읽고 책장속에 보관될 책이 아닌

    수십번 읽고 적용해봄으로써

    더 나은 개발자로 만들어줄 책이라고 생각한다.



  •  


    [도서 소개]


    가장 쉽게 배우는 도메인 주도 설계 입문서!

    이 책은 도메인 주도 설계(DDD)를 처음 배우는 개발자를 위한 책이다. 실제 업무에 DDD를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성했다. 이 책으로 도메인 모델을 이용하여 애플리케이션을 구현하면서 DDD에 대한 이해를 넓힐 수 있을 것이다.


    [대상 독자]

    - DDD를 처음 접하는 개발자

    - DDD에 대해 잘은 모르지만 관심이 있는 독자


    [주요 내용]

    - 도메인 모델의 이해, 엔티티와 밸류의 개념

    - 아키텍처의 주요 영역 구성요소와 DIP 패턴

    - 애그리거트, 리포지터리 등 DDD 주요 패턴의 이해와 구현 방법

    - 응용 서비스와 표현 영역을 연동하는 방법

    - 도메인 서비스의 필요성과 구현 방법

    - 도메인 모델의 트랜잭션 충돌을 처리하는 방법

    - 도메인 이벤트를 이용하여 시스템의 결합도를 낮추고 기능을 확장하는 방법

    - CQRS의 개념과 명령 모델/조회 모델을 나누는 방법


    [서평]


    이 책은 도메인 모델을 이용하여 애플리케이션을 구현하는 데 필요한 내용을 다루고 있으며 전체 11장으로 구성되어 있다. 처음 1장과 2장에서는 도메인 모델을 구현할 때 필요한 기본 개념을 다루고 있다. 1장에서 도메인 모델이 무엇인지, 엔티티와 벨류에 대해서 알아본다. 2장은 상위 수준에서 아키텍처의 영역과 DIP 패턴을 설명하고 도메인 영역의 구성 요소에 대해서 배운다.


    3~5장은 애그리거트와 리포지터리를 설명한다. 애그리거트는 복잡한 도메인 모델을 관리 가능한 단위로 묶어주는 역할을 담당한다. 3장에서는 애그리거트가 무엇이고 구현을 어떻게 하는지 배운다. 4장에서는 애그리거트의 노리적인 저장소인 리포지터리를 구현하는 방법을 알아보고 5장에서는 검색 조건을 위한 스펙, 정렬, 페이징 등 조회 기능을 구현해 본다.


    6장은 응용서비스와 표현 영역에 대해 설명한다. 응용 서비스가 어떻게 도메인 모델을 사용하고 어떤 역할을 수행하는지 알아보고 표현 영역과 응용 서비스의 연동에 대해 설명한다.


    7장은 도메인 영역의 구성요소 중 하나인 도메인 서비스가 필요한 이유와 구현에 대해 설명한다.


    8장에서는 애그리거트의 트랜잭션 범위에 대해 살펴본다. 애그리거트의 트랜잭션 처리를 위해 DBMS를 이용한 선점 잠금과 비전을 이용한 비선점 잠금을 구현하는 방법을 소개한다.


    9장은 애그리거트와 더블어 가장 주용한 개념 중 하나인 바운디드 컨텍스트에 대한 내용을 다룬다. 바운디드 컨텍스트가 무엇이고 각 컨텍스트의 통합과 관계에 대해 배워본다.


    10장과 11장은 각각 이벤트와 CQRS에 대해 설명한다. 10장은 도메인 이벤트를 이용해서 시스템의 결합도를 낮추고 기능을 확장하는 방법을 설명하며 비동기로 이벤트를 처리하는 몇 가지 구현 방법도 살펴본다. 11장은 CQRS가 무엇인지 알아보고, 이를 통해 어떤 효과를 얻을 수 있는지에 대해 설명한다.




     "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

  •  

    • 개발 세계에는 여러가지 개발 방법론이 많다. 가장 유명한 건 아무래도 TDD이겠지만, 최근 가장 각광받는 건 DDD라고 생각한다. 그 이유는 아마 세상의 수많은 software는 대부분 현실의 문제를 해결하기 위해 만들었을텐데, 그걸 해결하는 게 여전히 힘들기 때문이라고 생각한다.
    • 현실의 문제를 해결하는 게 아직도 힘든 이유도 여러가지가 있겠지만, 그 중 하나는 비즈니스를 하는 사람들과 개발자들간의 간극에 있다. 개발자들은 요구 사항에 맞춰 서비스를 만들(었다고 생각하)지만, 비즈니스를 하는 사람들은 내가 요구한 게 아니라는, 이 업계가 탄생한 순간부터 발생했던 문제. 애자일 방법론도 사실 이 문제 때문에 나오지 않았던가. 동작하는 소프트웨어를 전달하기 위해서.
    • DDD는 이런 간극을 좁히기 위한 고민의 산물이다. 그래서 오히려 초반에 ‘Garbage in garbage out’이라는 이 업계의 유명한 문구와 함께 도메인 전문가가 같이 개발에 참여해야 한다는 걸 이야기한다. 또 도메인 전문가의 요구 사항도 항상 옳은 건 아니라는 점을 알려준다. 즉 개발자와 도메인 전문가는 같은 도메인의 비즈니스 문제를 해결하기 위해 상호 작용을 하며 고민을 통해 문제를 해결해야 한다는 지극히 상식적인, 커뮤니케이션 문제부터 짚고 간다(그리고 이게 사실 애자일 선언문의 이야기이기도 하다) . 또 서로간의 소통을 해결하기 위해 용어를 통일해 모호함을 줄이고 이런 용어 역시 계속 업데이트해야 한다는 점도(소프트웨어 뿐만 아니라 문서도 지속적인 업데이트가 필요한데 이걸 모르는 경우가 참 많다).
    • 도메인, 애그리거트, 계층 구조, 바운디드 컨텍스트 등 각 용어의 의미와 구조를 그림과 코드를 통해 설명하기 때문에 하나씩 따라가기도 좋다. 또 이 책을 읽다보면 처음부터 생각할 수도 있겠지만, 결국 이런 도메인 구조에 따라 코드를 작성하는 게 MSA와 바로 연결된다는 걸 알 수 있다. DDD를 계속해서 파고들었던 저자가 쓴 책인데다가 번역서가 아니라서 참 읽기도 자연스럽고 편하다는 점이 더 좋기도 하다.
    • 여담으로 저자의 책 중에 DDD Start라는 책이 있는데, 그래서 그런지 이번 책의 github repository 이름이 ddd-start2이다.

    한빛 미디어 “나는 리뷰어다” 활동을 위해서 책을 제공받아 작성한 서평입니다.

  •  

    도메인 주도 개발하기.png

    개발을 하면서 많은 요구사항을 만납니다. 다양한 요구사항을 잘 풀어나가기 위해 한번쯤은 고민해 봤을 법한 내용들을 만날 수 있습니다.

     

     

    요구사항을 처리하기 바빠 당장 변경은 해 놓았는데, 변경하고 난 뒤에 오히려 생각이 많아져 이런저런 아이디어를 적용해 보다가도 다른 요구사항이나 시간에 쫓겨 잊어버렸던 기억이 되살아납니다.

     

    프로세스의 일부를 변경해야 하는데 프로세스가 다루는 변수들 가운데 숫자 값을 가지는 변수가 무엇을 다루는지 모호해서 코드를 뒤적였던 경험,

    진행 상태를 바꿔달라는 요청을 받고서 변경하는 메서드를 찾아서 보완해 놓았는데 상태가 안 바뀐다는 피드백을 받아 다시 들여다보니 상태를 바꾸는 코드가 한두 군데가 아니고, 여기저기 흩어져 있어 열 받았던 기억 같은 것들이 떠오를 수 있습니다.

     

     

    개발을 하다 보면 심심치 않게 만나는 개념들이 있습니다. 디자인 패턴, 리팩터링, 아키텍처, 테스트 주도 개발, 도메인 주도 설계가 떠오를 수 있습니다. 이 가운데서 도메인 주도 설계가 지향하는 방향을 보여주고 접근하는 방법을 알려주는 책입니다.

     

    도메인 주도 설계를 한마디로 정의하기는 쉽지 않습니다.

    책에서도 이론적 배경 같은 건 나오지 않습니다.

    오랜 개발 경험이 있는 저자가 실무적인 예를 들어가며 도메인 주도 개발을 하나씩 풀어나갑니다.

     

    저자도 처음부터 도메인 주도 개발 개념을 적용한 개발을 한 것은 아니라고 합니다.

    도메인 주도 개발을 알게 된 후에도 이해하기 어려웠고 구현하기도 힘들었다고 합니다. 그래서인지 먼저 알게 된 내용을 좀 더 다가가기 쉽게 풀어서 알려주고 있습니다.

     

    내용을 따라가다 보면 익숙한 느낌도 받으실 수 있습니다. 개인마다 차이가 있겠지만 익히 알고 있었거나 어렴풋이 감만 잡고 있었던 부분이지만 딱히 뭐라 꼬집어 설명하기 애매했던 생각들을 도메인 주도 개발을 통해 어떻게 정리하고 풀어나가는지 보여주기 때문입니다.

     

     

    책 뒤표지에도 언급되어 있지만 도메인 주도 설계 입문서입니다. 그럼 핵심은 무엇이고 얼마를 더 알아야 하는지 의문이 들 수 있습니다. 너무 성급해하지 않아도 괜찮지 않을까요.

     

    도메인 주도 개발은 지식의 영역이라기보다 지혜의 영역에 가깝다고 생각합니다.

    수영 같은 운동이나 연애처럼 책으로만 배워서는 할 수 없는, 부딪치고 겪으면서 알아나가는 것들과 비슷하다고 봅니다.

     

    이론이 나오고 그 이론을 적용하는 여러 사례가 만들어지며 적용 영역을 넓혀가기보다, 다양한 사례와 그에 대해 고민하는 시간들이 쌓여가는 가운데 개념이 정리되고 구현을 통해 발전해 나가는 쪽에 있다고 보입니다.

     

    '도메인 주도 설계'라는 소프트웨어가 가진 복잡함을 풀어나가는 지혜에 다가 가는데 좋은 길잡이가 되리라 생각합니다.

     

     

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

  •  

    객체지향 개발론, 함수 지향 개발론,절차 지향 개발론 등 수많은 개발론이 있다.

    솔직히 개발론이라 함은 그냥 이제껏 쌓여왔던 경험이 누적되어 특정 이름을 중심으로 묶여진 것이리라 생각된다. 특히 막 개발자에 입문한 사람들에게 있어서 새로이 등장한 개발론은 실전 개발에 꼭 적용해야 하는 대상으로써그리고 신봉해야 할 대상으로써 다가가는 부분이 적지 않은 것 같다. 특히 이전에 등장했던 개발론은 더이상 쓸모가 없거나 퇴물로 여겨지는 경우가 많은 것 같다.

    필자가 생각건대, 그러한 관점은 본인의 사고의 틀을 확장시키는 데에하나도 도움이 안 될뿐더러 신기술 만능주의라는 잘못된 오류에 빠지는 누를 범하기에 필요충분조건이라 생각된다.

    신규로 등장한 이론이 아무래도 각광받는 것은 당연할 수밖에 없단 생각이 들긴 한다. 아무래도 새로이 등장한 이론에는 요즘 개발 트렌드가 반영되었을 것이며 또한 신기술의 동향에 맞춰 구성되었을것이기 때문이다.

                                                                                       

    하지만 그렇다 하여, 앞서 언급한 것과 같이 이전에 등장했던 개발론들이전혀 쓸모없고 시대에 뒤떨어진 퇴물들이라고는 생각지 않는다. 이전 개발론 들이 있었기에 새로운 개발론이등장한 것이고, 새로 등장한 개발론들이 반드시 모든 개발 상황과 케이스에 딱 들여 맞는 것도 아니기때문이다.

    그렇기에 필자는 이번에 리뷰를 진행하게 될 "도메인 주도개발"에 대한 내용을 기존 이론과 비교하며 나의 사견을 밝히기보단, 오로지 도메인 주도 개발이 무엇인지에 대한 관점에서 리뷰를 진행하려 했었고 그리했다.

    도메인 주도 개발 이론은 학부 때 많이 배우는 MVC, MVP, MVVM 이론과비슷한 또 다른 하나의 패턴 법이라고 보면 편할 것 같다.

    다만, 위의 패턴들은 웹 개발을 할 때에 많이 경험할 수 있는 패턴들이며특히나 회사에 가서 코드들을 보면 대부분의 위의 패턴들을 기반으로 개발되었기에 사전에 알아두면 많은 도움이 된다.

    솔직히 학부 때 위 이론들은 그저 책에 쓰여있는 내용일 뿐, 실제로는많이 안 와닿을 수도 있겠다는 생각이 든다. 왜냐하면 대규모 트래픽을 직접 서비스를 구축하여 경험해보기 어렵고 또한 웹 서비스를 개발하더라도 개인의 영역에서 개발되기 때문에 협업의 기회 역시 많지 않기 때문이다.

    하지만 그렇다 하더라도 이론을 차치하고 컴퓨터 학문은 실용학인 만큼 꼭 책의 내용들을 직접 실습해 보고 나아가자신만의 서비스들을 개발해 보길 권장한다.

    【책의 구성】 '도메인 주도 개발 시작하기' 책은 어떤 책일까?

     이 책은 우선 구성이 정말 좋은 책이고 또한 저자가 독자를상당히 배려해서 쓴 책임이 한눈에 보이는 책이다.

    구성이 좋은 책이라 평한 이유는 책을 읽어 내려감에 있어서 불편한 부분이 없었기 때문이다. 보통 전공서라 함은 내용이 너무 딱딱해서 한 장 읽기도 상당히 버든이 들기 십상이다. 하지만 이번에 이 책을 공부하면서 필자는 단 한 번도 흐름이 멈추거나 중간에 답답했던 적이 없었던 것 같다.

    또한 앞서 언급한 것처럼 컴퓨터학은 실용학이다. 따라서 글로만 백날배워봐야 실제 환경에서 코드로 그리고 알고리즘으로 문제를 잘 풀이하지 못한다면 배웠던 이론은 전혀 쓸모가 없게 되는 학문이라는 것이다. 이런 점에서 이 책은 실제 상황과 유사한 예시들을 코드로 풀어가며 독자들에게 설명하고 있다. 이 말인즉슨 위 책의 내용은 독자들이 추후, 혹은 이미 대면하고있는 회사에서 겪게 될 코드 구성과 개발론에 대한 팁들이 잘 녹아들어 있음을 의미한다.

    책은 이론에 대해서 그 배경과 저자의 사견을 시작으로 각 상황별 적절한 코드 예와 엔티티 다이어그램, 시퀀스 다이어그램 등을 적절히 사용해가며 친절히 풀어가고 있다.

     

     

    1챕터 : 도메인 모델시작하기

     이 장에서는 이 책의 주 내용이 될, DDD 핵심 개념에 대해서 설명하는 장이다. 또한 이 책에서 앞으로전개하며 사용할 어휘들에 대해 자세히 설명되어 있다.

    무엇보다 엔티티와 벨류의 정의가 무엇인지에 대해서 잘 정리되어 있는데, 이부분에 대해서는 필자도 많이 공감 가는 부분이어서 독자들이 꼼꼼히 공부하고 넘어가시길 권장한다.

    마지막 부분에서는 각 오브젝트 생성 시에 getter와 생성자의 역할에대해서 설명하고 있다. 왜 객체 정의 시에 getter를남용하면 안 되는지 그리고 생성자의 역할이 얼마나 중요한지에 대해서 잘 나와있으니 이 부분도 꼼꼼히 챙겨가시길 권한다.

    챕터 전반의 내용은 도메인 모델을 이용한 개발에 대한 시나리오를 설명하고 있으므로 도메인 지향의 개발 시 어떤부분을 고려해야 할지 그리고 각 레이어별 어떤 구성을 해야 할지 (,서비스, 모델, 인프라)에 대해서 나만의 식견으로 한번 그려보도록 하자.

     

     

    3챕터 : 애그리거트

     이 장에서는 "애그리거트"에 대한 이론과 실무 환경에서의 구성에 대해서 설명하고 있다. 보편적으로각 엔티티에 대해서는 웹 개발을 어느 정도 개발해 본 사람들이라면 잘 알고 있는 것 같다. 하지만 애그리거트를어떤 식으로 구성해야 되는지 또한 특정 도메인을 중심으로 어떻게 구분해야 하는지에 대해서는 많은 개발자들이 생소해하리라 생각된다.

    필자도 아직 도메인 단위로 엔티티를 구성하고 재조립하여 확실한 도메인 중심의 고립과 분리를 하라 하면 쉽사리모든 규약을 준수하진 못하리라 생각된다.

    이 장에서는 이러한 구성법에 대한 팁과 노하우에 대해서 잘 설명하고 있다.

     

     

    6챕터 : 응용 서비스와표현 영역

     이 장은 응용 서비스 레이어와 표현 레이어에서의 역할을확실히 구분 지어 설명하고 있다. 일반적으로 응용 서비스 레이어를 보편적인 용어로는 서비스 레이어라고통상 사용한다.

    서비스 레이어는 해당 서비스 REST-API에 맞는 Service들로 구성하여 목적한 바에 맞는 로직을 구성하는 레이어이다. 이또한 많은 개발자들이 잘 인지하고 있는 사항이지만 정확히 표현 영역과의 구분을 애매모호하게 이해하는 사람들 역시 적지 않은 것이 현실이다.

    표현 영역은 사용자의 화면으로부터 입력을 받아서 서비스 레이어에 진입하기 직전 그리고 서비스 레이어에서 모든로직을 끝내고 표현 영역으로 값을 내려주는 그 직후의 모든 영역을 의미한다.

    표현 영역에서 서비스 영역으로 넘어가는 그 사이에 과연 표현 영역은 어떤 값을 넘겨줘야 되는 것일까?

    그냥 표현 영역에서 받은 모든 오브젝트들을 넘겨주면 안 되는 것일까?

    필자의 생각과 동일하게 저자 역시 절대로 그리해서는 안된다고 말하고 있다. 위와같은 형태로 표현 레이어에서 서비스 레이어로 값을 전송해 주면 강한 커플링이 두 레이어 사이에 발생하게 되고, 추후 TC 구성이나 독립적인 단위로서의 동작에 큰 어려움이 발생하기 때문이다.

    그렇다면 어떤 형태의 값을 넘겨줘야 되는 것일까?

    그것은 책의 내용을 살펴보시길 권장한다.

     

     

    "도메인 주도 개발 시작하기"를 읽고 나서…….

     DDD MVC나오브젝트 지향 개발론이나 절차 지향 개발론이나 그 모습과 형태는 아주 제각각이며 다양하다. 하지만 대부분의아키텍처 패턴 법과 개발론이 공통으로 가지고 있는 특징이 있다면 그것은 바로 추상화를 잘하라는 점이다.

    즉 어떤 모듈의 동작을 커플링 도는 환경 속에 노출되지 않게 하며 최대한 독자적으로 동작할 수 있게 구성함으로써추후의 확장성과 이식성 그리고 신규 기술의 도입을 용이케 하라는 것이다.

    DB와 서비스 로직을 구성하는 데에는 다양한 Lib로부터 가져온 기능과 클래스 등이 사용된다. 이것들은 언제든새로운 기술의 등장으로 변경이 필요한 요소들이다. 하지만 자신이 구축한 나만의 알고리즘은 그보다 뛰어난알고리즘이 나오지 않는 이상 쉽사리 변경될 일은 없다. (아직도c++ sort quick sort를 이용하고있지 않은가?) 그렇기에 해당 알고리즘을 이용한 모듈을 최대한 독립시켜 외부 기능들과의 커플링을 제거함으로써추후 이식성을 높인다면 공인된 코드로써 많은 사람들에게 사랑받을 수 있을 것이리라 생각된다.

    각 패턴의 가장 중요한 부분은 코드의 리사이클링과 코드의 독립성을 고도화함으로써 이식성과 확장을 함께 가져가는것임을 잊지 말자.

     

  • 먼저 이 책은 DDD를 처음 접하는 개발자를 위한 책으로 DDD 입문자를 대상으로 하는 책이다.

    DDD의 호기심을 채워주는 책

    책에서 사용한 언어는 JAVA , Spring MVC, JPA(ORM)이다.

    또한 maven, java 18, spring boot, jpa, 타임리프, MySQL을 이용해서 예제 코드를 작성한다.

     

    예제 코드는 위의 깃허브에서 볼 수 있다.

    책은 총 11 chapter로 구성이 된다.

    chapter 1 도메인 모델 시작하기

    chapter 2 아키텍처 개요

    chapter 3 애그리거트

    chapter 4 리포지터리와 모델 구현

    chapter 5 스프링 데이터 JPA를 이용한 조회 기능

    chapter 6 응용 서비스와 표현 영역

    chapter 7 도메인 서비스

    chapter 8 애그리거트 트랜잭션 관리

    chapter 9 도메인 모델과 바운디드 컨텍스트

    chapter 10 이벤트

    chapter 11 CQRS

     

    로 구성되어 있다

     

     

    책 자체가 굉장히 깔끔하게 되어있다.

    그림도 많이 있고 코드도 깔끔하게 나와있다.

     

    또한 책의 가독성 또한 좋아서 잘 읽힌다.

     

     

    책에 "잠깐"이라는 부분이 있는데

    책을 읽다가 놓치기 쉬운 것들을 "잠깐'에서 알려줘서

    한 번 더 생각할 수 있게 해준다.

    읽는 이를 많이 신경 쓴 것 같다. 나 또한 전혀 생각지 못 한 부분이었는데

     

    "잠깐"을 보고 왜 코드를 이렇게 짰는지를 알 수 있었다.

     

    NOTE에서는 개념을 정리해 주거나 새로운 개념들에 대해서 자세히 알려준다.​책은 크게 위와 같이 그림, 코드, 잠깐, Note로 구성되어 있다.​책을 빠르게 한 번 읽어보았다.DDD가 무엇인 지에 대해서도 감을 잡을 수 있었을 뿐만 아니라개발하면서 몰랐던 개념들이나 헷갈렸던 개념들에 대해서도 자세히 알려주어서 좋았다.실제로 DIP가 무엇인 지 많이는 들어봤는데 제대로 이해는 못 한 상태였는데이 책을 읽고 이해할 수 있게 되었다.​책에서 실제 애플리케이션 또한 구현하기에클론 코딩하면서 책을 따라 읽으면 DDD에 대한 지식뿐만 아니라실제 구현 방식에 대해서도 알 수 있어서 좋을 것 같다.

    다만 위에서도 말했듯이java, spring, jpa을 가지고 설명을 하기에아무것도 모르면 읽기 힘들 것 같다.DDD의 기초를 배우고 싶으면 이 책을 읽는 걸 추천드립니다.

     

     "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

     

     

     

     

     

  • 도메인 주도 개발 시작하기

     

     

    이전부터 도메인드리븐 개발은 스프링과 잘 맞지 않다고 생각했다.

    정확히는 '제한적'으로 적용할 수 밖에 없다고 생각했다. 왜냐하면 기존의 루비온레일즈와 같이 도메인드리븐 개발을 하는데에 구조적으로 조금 더 '편리하다'라는 것은 분명 존재하기 때문이다.

    그렇지만 이 책은 훌륭히 스프링다운 코드로 DDD가 가능하다 라는 것을 훌륭히 설명한다.

     

    이 책은 흔히 무분별하게 사용되는 '도메인'이라는 것의 정의부터 시작한다. 그리고 그것과 연관된 수 많은 가지들, DTO, 엔티티, 밸류, 상태 등의 설명과 함께

    우리가 개발을 할 때의 전체적인 개념을 관통하여 하나하나 realworld의 예제에 가까운 사례로 설명을 한다.

    이전에 보았던 이런 류의 책들 중 가장 큰 문제는 '도메인' 이라는 것에만 집착해서 현실에서 하기 힘든 방법, 퓨어하게 JPA를 사용해서 한다라던지 하는 퍼포먼스 또는 생산성을 고려하지 않은 구조를 제안한다는 것이다. 그런데 이 책은 과감히 확장성을 생각해 '마세라티 문제'의 상황에 빠지지 않고 현실에서 수행가능한 수준의 타협안을 제시하는 점이 좋았다.

     

    그리고 시작은 DDD지만 책의 중반부터는 확장을 하면서 발생하는 문제들과 그 해결책을 가볍게나마 제시한다. Locking과 이벤트드리븐, CQRS등의 방식으로 말이다.

    물론 이 책의 다 읽는다고 해서 시작할 때 부터 저것들까지 한번에 적용하는 것을 고민하고 실행한다면 정말 배보다 배꼽이 더 큰 사태가 발생하게 될 것이다. 그렇지만 근래 보았던 책 중에서는 가장 깔끔한 예시와 설명으로 발생하게 될 문제를 지적하면서도 그 해결 방법을 자연스레 설명하는 점이 매우 좋았다. 

     

     

    잡설1. 이 책의 좋은 점 중 하나가 예시로 나온 코드의 퀄리티 그 자체에 있다. 

    immutable을 리턴한다던지, 깔끔한 코드 분리라던지, 디자인패턴 적용이라던지 하는 부분에서 훌륭한 코드의 전형을 본 듯하다랄까.

    한 명의 개발자로서 보면 행복해지는 느낌의 코드들 이었다. 

    즉 단순히 도메인 드리븐을 설명하는 것 외에 그 도메인 드리븐 개발을 위해 필요한 다른 기술들까지 볼 수 있는 훌륭한 책이라고 생각한다.

     

    잡설2. DDD를 위한 번역본 등에서 볼 수 없는 재미있는 디테일도 좋았다. 가령 AGGREGATE의 발음관련 이야기라던지. 정말 한국사람을 위해 쓰여진 책과 같은 느낌이지 않는가.

    확실히 더 잘 읽히는 책이다.

     

    잡설3. 애초에 이 책을 '찾아서' 볼 정도라면 이 책에서의 독자 권장 레벨인 초중급은 절대 아닐 것이라고 생각되지만, 서비스 개발에 대하여 A부터 Z까지 한번 맛을 보고 겪었던 어려움을 이러한 방식으로도 풀 수 있구나 라는 관점에서 보는 것을 권장한다.

     

  • 출처 : 네이버

     

     

    #. 들어가기 전에

    소프트웨어 개발에 있어 다양한 개발 방법론이 있습니다.

    흔히 알고 있는 TDD를 비롯해서 DDD, BDD 등이 있는데 이번에 본 책은 DDD (Domain-Driven-Design)에 대해 다루고 있는 책 입니다.

    DDD는 10여년 전에 엔터프라이즈 아키텍처 기술에 있어서 Eric Evans가 Domain Driven Design 라는 책에서 도입된 개념으로 스프링2.0에서 소개되며 개발자들 사이에서 화제가 되었는데요.

     

    #. 개인적인 접근

    얼마 전 상무님/팀장님이 외부에서 새로 오시면서 우리 조직을 다시 리빌딩하는 작업을 하고 있습니다.

    그러면서 DDD 관점으로 비즈니스 영역을 정리하는 작업을 하였는데, 마침 좋은 기회로 본 도서를 접하게 되었습니다.

     

    #. 구성

    이 책은 총 9개 챕터로 구성되어 있습니다.

    우리가 집중해야 할 '도메인'이 무엇인지 설명하고,

    주요 패턴에 대한 설명과 다양한 모델링 방법을 예제를 통해서 풀어나가고 있습니다.

     

    처음 DDD에 대해 접하는 초보자라면 빠르게 책을 훑어가면서 읽어보는 방법을 추천합니다.

    저 또한 DDD에 대해 처음 접하다보니 빠르게 여러 번 읽으면서 자연스럽게 익히려고 하였습니다.

    (사실 머리가 좋지 않아서 여러 번 읽어 줘야 해요 ㅠㅠ)

     

    총 356페이지로 구성된 책으로 크게 두꺼운 책은 아니며,

    출퇴근 시 들고 다니며 읽을 수 있을 분량입니다.

    (그러나 이번 에는 끝까지 읽지는 못했습니다 ㅠㅠ)

     

    본 도서를 통해 접한 내용을 실제 업무 수행 시 접해볼 수 있어서 좋은 기회였고, 

    남은 분량을 모두 읽어봐야겠어요!

     


    <총평>

    1. DDD 를 처음 배우는 개발자이다!

    2. 아키텍처를 설계하는데 객체지향적으로 '잘' 설계해보고 싶다!

     

    https://book.naver.com/bookdb/book_detail.nhn?bid=22291738 

     

    도메인 주도 개발 시작하기

    가장 쉽게 배우는 도메인 주도 설계 입문서!이 책은 도메인 주도 설계(DDD)를 처음 배우는 개발자를 위한 책이다. 실제 업무에 DDD를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을

    book.naver.com

     

    ※ 참고 사이트

    https://zdnet.co.kr/view/?no=00000039170214 

     

     

    한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.



  • 도메인 주도 개발은 회사에서 항상 적용해보고 싶었는데 내가 가진 지식이 많지도 않고 실제 경험도 없다보니 쉽게 해볼수는 없던 영역이었다. 책도 읽어볼 엄두가 나질 않아서 책도 많이 안읽은 주제중에 하나 였다. 그런데 이번에 새롭게 나온 이책을 읽어볼 기회가 생겨서 도메인 주도 개발을 다시 접해볼 수 있었다. 

    저자가 책에 써넣은대로 이 책은 초중급을 대상으로 쓰여진 책이다. 말 그대로 도메인 주도 개발에 대해서 알고 싶고 각각의 의미가 무엇인지 개념을 알고 싶고 어떻게 적용하는지 알고 싶은 분들을 위한 책이다. 그리고 책에 나오는 예제 코드들은 java, spring boot, jpa 등을 기반으로 설명을 해주고 있다. 따라서 책을 좀더 잘 이해하고 싶다면 앞에 말한 것들에 대한 사용경험이 있는것이 좋다. 특히 초반에는 개념에 대한 내용이 많다면 후반으로 갈수록 코드로 구현해 나가는 형식으로 설명을 하는 부분이 많기 때문에 spring boot, jpa 에 대한 경험은 필수적이라고 할 수있다.

    내가 이 책을 읽으면서 가장 좋았던 부분들은 각각의 개념에 대한 설명들이었다. 도메인 주도 개발을 위한 필수적인 개념이지만 좀처럼 이해하기가 쉽지 않은 내용이었다. 그리고 개발과 연관해서 생각을 하다보니 헷갈리는 개념들도 많았다. 그런데 그런 부분들을 잘 설명을 해줬다. 

    특히 도메인 주도 개발에서 내가 가장 중요하다고 생각했던 바운더리 컨텍스트와 애그리거트 에 대한 개념을 잘 이해할 수 있었다. 개념적으로 이해를 하더라고 실제 코드로 적용을 해보기에는 내가 부족한 부분이 많긴 하지만 이론을 바탕으로 잘 적용을 해볼수 있을것 같다는 생각이 들었다. 

    도메인 주도 개발에 관심이 있고 이걸 적용해보고 싶은 분들은 한번쯤 읽어보기를 권하고 싶다. 

    "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


  • https://www.hanbit.co.kr/store/books/look.php?p_code=B4309942517 

     

    도메인 주도 개발 시작하기

    실제 업무에 도메인 주도 설계(DDD)를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성한 DDD 입문서

    www.hanbit.co.kr

    이번에 리뷰하게 된 책은 '도메인 주도 개발 시작하기 - 최범균' 라는 책이다. 최범균님의 DDD Start!를 통해 도메인에 대해서 공부를 했고 DDD를 공부하고 싶은 사람들에게 추천했었는데 절판되어 슬퍼하던 중 한빛미디어에서 새롭게 출판하셨다는 소식을 듣고 내심 기분이 좋았다. 이전 책 'DDD Start!'와 비교해서 보니 삭제된 목차도 있고 추가로 생긴 목차도 있었다. 그렇다고 크게 다르지는 않아 이전 책을 리마인드 하는 느낌으로 책을 읽을 수 있었다.

     

     

    도메인에 대한 개념이 전혀 없던 시절 나에게 도메인 개념을 채워준 책이다. 이 책은 여전히 도메인에 대한 개념을 쉽게 설명하고 있다. 이전 책보다 좋은 점은 그림이 깔끔하고 책이 조금 더 깔끔해진 느낌이라 가독성이 좋아졌다. 

     

    도메인 주도 설계의 개념은 에릭 에반스가 쓴 '도메인 주도 설계'라는 책에서 부터 시작되었고, 도메인을 이해하는 것 어려운 일이다. 도메인에 대한 기본 개념을 이해하고 시간을 들이다보면 도메인 이해 폭이 넓어지는 것 같다.

     

    도메인에 대한 개념을 잡아주면서 그 이후 개발에서 일어날 수 있는 다양한 문제점과 고민점을 같이 고민해주는 책이다.

    도메인 개념이 없는 분들이라면 책을 보면서 도메인에 대한 개념을 이해하는데 도움을 받을 수 있고, 도메인에 대한 개념이 어느정도 있는 사람이라면 그 도메인을 어떻게 '구현' 할 것인지에 대한 내용을 배울 수 있을 것 같다.

     

    Spring JPA를 사용하는 방법과 발생할 수 있는 문제점.

    트랜잭션 처리에 있어서의 고민해볼 점. 

    시스템과의 강결합을 어떻게 풀 것인지.(이벤트)

     

    등 다양한 내용들을 다루면서 도메인에 대해서 설명하고 있다. 에릭에반스도 그렇지만 책에서 이야기하는 부분은 도메인주도 개발 뿐아니라 이벤트 기반 개발로도 이어질 수 있는 발판을 마련해주고 있다.

     


    총평

    개인적으로 나는 이 책의 1판인 DDD Start라는 책으로 도메인의 개념을 익혔고, 지금은 도메인에 대한 이해로 개발을 진행하고 있다. 그리고 개발에 있어서 이 책을 통해 배운 개념을 항상 기억하며 개발을 하고 있다. 도메인을 이해하고 개발하는 것과 모르고 개발하는 것은 많은 차이를 보였고 나 스스로도, 팀원들도 그렇게 느꼈던 것 같다.

     

    도메인이라는 개념이 어색하고 익숙하지 않은 분들에게는 개념을 배우기 위해 추천하고 싶은 책.

    도메인이라는 개념은 이해하지만 구현을 어떻게 해야할 지 고민하는 분들에게는 구현 방법을 배울 수 있는 책.

     

    한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

  • IMG_2687.jpg

     

    이 책은 도메인 모델을 이용하여 애플리케이션을 구현하는 데 필요한 내용을 다루며, DDD를 처음 접하는 개발자를 위한 책이다.

    참고로 예제 코드는 자바로 되어 있는데, 자바를 몰라도 OOP나 다른 언어에 대한 개념에 있는 개발자라면 이해하는 데에 큰 무리는 없다.

    데이터에 종속적인 애플리케이션 개발의 경우 모델링과 실제 개발과의 불일치가 발생할 수 있다. 이러한 불일치를 해소하기 위한 노력 중 하나가 바로 DDD이다. 그리고 도메인 주도 설계는 공통의 언어(*유비쿼터스 언어)를 사용하여 도메인과 구현을 충분히 만족하는 모델을 만든다.

    여기서 공통의 언어라는 것은 사용자와 개발자가 동일한 언어로 소통하는 것을 말한다.

     

    이 책의 각 챕터는 다음과 같다.

    1. 도메인 모델 시작하기

    2. 아키텍처 개요

    3. 애그리거트

    4. 리포지터리와 모델 구현(JPA 중심)

    5. 스프링 데이터 JPA를 이용한 조회 기능

    6. 응용 서비스와 표현 영역

    7. 도메인 서비스

    8. 애그리거트 트랜잭션 관리

    9. 도메인 모델과 바운디드 컨텍스트

    10. 이벤트

    11. CQRS

     

    이 책에서 다루는 내용중 개념적인 내용은 다음과 같다.

    - 도메인과 도메인 모델

    - 도메인 아키텍처: 표현, 응용, 도메인, 인프라스트럭처

    - 도메인 영역의 주요 구성요소: 앤티티, 밸류, 애그리거트(복잡한 도메인 모델을 관리 가능한 단위로 묶어주는 역할), 리포지터리, 도메인 서비스

     

    왜 이런 형태를 사용하는지를 잘 고민해 보면 좋을 것 같다. 왜냐면 소프트개발 방법론이라는 것이 보다 좋은 소프트웨어를 만드는 것이므로, 방법론에 대한 깊은 이해없이 따라하기 식이거나 구조를 맞추는 정도라면 오히려 비효율적일 것 같다.

부록/예제소스
자료명 등록일 다운로드
DOWNLOAD 예제소스 2022-05-11 다운로드
결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

도서판매처

리뷰쓰기

닫기
* 도서명 :
도메인 주도 개발 시작하기
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
도메인 주도 개발 시작하기
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
도메인 주도 개발 시작하기
구입처*
구입일*
부가기호*
부가기호 안내

* 인터넷 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실