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

한빛출판네트워크

오래된 내 정보 속 옥의 티를 찾아라(2022.9.22~12.31) / 회원정보 UPDATE하고 선물도 받고!

도메인 주도 개발 시작하기

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

한빛미디어

집필서

판매중

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

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

 

이 책은 도메인 주도 설계(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

이 책은 도메인 주도 설계를 쉽고 빠르게 익힐 수 있다는 장점이 있습니다. 설명이 어렵지 않고 개념에 대한 설명이 많습니다. 자바로 작성된 코드도 있지만 설계 개념의 내용이라 자바를 잘 모르더라도 읽는데 어려움은 없었습니다.

 

온라인 쇼핑몰을 구현하는 것을 목적으로 도메인 주도 설계의 개념을 차례대로 설명합니다. 그래서 지루하지 않고 재미있게 읽을 수 있었던 것 같습니다.

 

한 권의 책으로 모든 것을 익히는 어렵겠지만 시작을 하는 데는 충분한 책이라고 생각합니다.



도메인 주도 개발이란 도메인 패턴을 중심에 놓고 설계하는 방식을 말합니다.

일반적으로 많이 사용하는 데이터중심의 방법을 탈피해서 순수한 도메인의 모델과 로직에 집중하는 것을 말합니다.

보편적인(ubiquitous) 언어의 사용입니다.

도메인 전문가와 소프트웨어 개발자 간의 커뮤니케이션 문제를 없애고 상호가 이해할 수 있고 모든 문서와 코드에 이르기까지 동일한 표현과 단어로 구성된 단일화된 언어체계를 구축해나가는 과정을 말합니다. 이로서 분석 작업과 설계 그리고 구현에 이르기까지 통일된 방식으로 커뮤니케이션이 가능해집니다.

소프트웨어 엔티티와 도메인 컨셉트를 가능한 가장 가까이 일치시키는 것입니다. 분석 모델과 설계가 다르고 그것과 코드가 다른 구조가 아니라 도메인 모델부터 코드까지 항상 함께 움직이는 구조의 모델을 지향하는 것이 DDD의 핵심원리입니다.

 

이 책은 도메인 모델을 이용하여 애플리케이션을 구현하는 데 필요한 내용을 다룹니다.

 

 

 

목차

 

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 조회 전용 기능과 응용 서비스

 

1.jpg

현 시대는 회사 업무를 할 때 노트북, 컴퓨터, 모바일 기기(휴대폰, 갤럭시 탭, 아이패드)등을 사용하여 보다 편리한 생활을 하고 있습니다. 그에 따라 업무가 시스템적으로 발전하면서 업무를 진행할 때 필요한 기능들의 구조와 그러한 기능들을 담당하는 부서들간의 협업이 매우 중요하게 되었습니다. 시스템상에서 이러한 것을 도메인이라고 합니다.

 

도메인이란 정확히는 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력할 수 있도록 문자(영문, 한글 등)로 만든 인터넷 주소를 말하며 인터넷을 이루는 각 구조들을 의미하기도 합니다.

 

제가 이 책을 선택한 이유는 이 책이 DDD(Domain-Driven-Design) 입문자들을 대상으로 제작된 책이여서 DDD를 처음 접하는 개발자들을 학습하기 쉬운 내용으로 구성된 책이기 때문입니다.

 

이 책의 특성은 책 내용이 현재까지도 많은 개발자들에게 생소한 DDD(Domain-Driven-Design)와 도메인 모델 구현라는 분야를 처음 입문하는 사람도 쉽게 학습할 수 있게 내용을 구성하였다는 점입니다. 그래서 어느정도 연차가 있는 개발자들은 물론 신입 개발자들이 처음 개발업무를 접할 때 보다 쉽게 개발을 할 수 있도록 많은 도움이 될것이라고 생각합니다.

 

구성

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

Chapter 2: 아키텍처 개요

Chapter 3: 애그리거트

Chapter 4: 리포지터리와 모델 구현

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

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

Chapter 7: 도메인 서비스

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

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

Chapter 10: 이벤트

Chapter 11: CQRS

 

파트별로 나누어 봤을때 1, 2장은 도메인 모델을 구현할 때 알아야 할 기본적인 내용을 다루고 있으며, 1장에서는 도메인 모델이 무엇인지 알아보고 Entity와 Value에 대해, 2장에서는 상위 수준에서 아키텍처의 네 영역과 DIP패턴을 설명하고 도메인 영역의 구성 요소에 대해 설명하고 있고, 3, 4, 5장은 애그리거트와 리포지터리에 대해 설명하고 있으며, 3장에서는 애그리거트가 무엇이고 구현을 어떻게 하는지에 대해, 4장에서는 애그리거트의 논리적인 저장소인 리포지터리를 구현하는 방법에 대해, 5장에서는 검색 조건을 위한 스펙, 정렬, 페이징 등 조회 기능을 구현하는 방법에 대해 설명하고 있고, 6장은 응용 서비스가 어떻게 도메인 모델을 사용하고 어떤 역할을 수행하는지 알아보고, 표현 영역과 응용 서비스의 연동에 대해 설명하고 있습니다. 7장에서는 도메인 영역의 구성요소 중 하나인 도메인 서비스가 필요한 이유와 구현에 대해 설명하고 있고, 8장에서는 애그리거트의 트랜잭션 범위에 대해, 9장은 바운디드 컨텍스트에 대해, 10장은 도메인 이벤트를 이용해서 시스템의 결합도를 낮추고 기능을 확장하는 방법에 대해, 11장은 CQRS에 대해 설명하고 있습니다.

 

 

개인적인 생각으로 학습은 서버 운영 담당자나 서버 관련 프로그램 개발자로 취업을 희망하시거나 이제 막 개발자로 시작한 초보자이신 분들께서는 JAVA 언어 관련 입문서를 먼저 학습하시고 난 뒤 1장부터 시작하시면 좋을 것 같고 어느정도 경험이 있으신 분들(2년차~)부터는 1장까지는 쭉 보시면서 도메인의 개념과 도메인 모델, Entity, Value에 대해 숙지한다는 방식으로 보시고 2장부터 학습하시는 것이 좋을것 같습니다.

 

 

개인적으로 약간의 단점이 어쩌면 욕심일수도 있는게 좀더 많은 실습 예제 및 비즈니스 케이스가 담겨있으면 더 좋았지 않았을까라는 아쉬움이 있습니다.

 

 

저의 리뷰를 읽어주셔서 감사합니다. 다음에는 좀더 유용하고 좋은 책으로 더 나은 리뷰를 통해 여러분께 책을 소개시켜드릴 수 있도록 더 노력하겠습니다.

 

 

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

이 책은 DDD(도메인 주도 설계)에 관심이 있는 분이라면,

도메인 주도 개발을 모르거나 관심이 없더라도 중급 이상의 개발자라면 매우 재밌는 책이 될 것이다.

개인적으로는 깊이 감명을 받은 책이다. 정말 재미있게 읽은 책이다.


초급이나 자바에 대한 경험이 없으면 책을 읽는 동안 많이 힘들겠다. ^^

자바에 대한 경험이 있더라도, 스프링과 JPA(Java Persistence API)를 경험하지 못했다면, 

사전 지식을 키우고 나서 책 읽기를 추천한다. 반드시 꼭 읽기 바란다.


책의 구성은 전체 11개의 챕터로 구성되어 있으며, 도메인의 정의와 아키텍처 개요부터 

애거리거트 정의, JPA 리포지터리 구현, 스프링 데이터 JPA 조회, 도메인 서비스, 트랜잭션 관리, 

이벤트 처리, CQRS 등으로 구성되어 있다.


먼저 개념과 아키텍처, 용어를 설명하고, 저자의 경험을 토대로 예시 프로그램의 단점을 보완하는

다양한 방법을 DDD 모델과 예제 소스로 설명한다. 프로그램의 단점을 친절하게 설명하고, 

해결 과정도 그림으로 친절하게 설명한다. 또한, 그 과정에서 무조건 DDD 방식을 제안하는 것이 아니고

효과적인 방안이라면 DDD 모델을 포기할 수 있는 선택을 제안한다. 여기에서 신선한 충격을 받았다.


그동안, 큰 의미를 부여하지 않고 개발했던 비효율적인 개발 방식을 인식하게 될 뿐만 아니라

메시지큐, 이벤트, CQRS(명령모델과 조회모델의 분리)에 대한 추가 지식을 얻을 수 있었다.

반성을 포함해서 말이다.


특히, 개발 과정에서 드는 많은 의문점을 이 책을 읽으면서 해결이 된 것 같다.

이 책을 읽은 이후에 고급 개발자로 가는 실마리를 찾지 않을까? 해서

서두에서부터 반드시 읽기는 추천한 것이다.


책을 읽으면서 같은 프로그램이지만 다른 시각으로 더 효과적으로 구현하는 방안을

저자는 끊임없이 제안한다. 연신 고개를 끄덕이면서 재밌게 본 이유이다.


책의 목차에서 보듯이 제목의 단어가 생소하면 읽으면 안 된다.

제목에서 호기심을 가질 때까지 보관하고 공부하자.

그리고 호기심이 생기면 그때 보자.


책 분량 문제로 판단되지만, 책의 예제 소스 설명이나, 실제 구동이 될 수 있었으면 더 나을 것 같다.

시간 관계로 예제소스를 다운로드하고, Eclipse에 Import만 하였는데,

이 부분은 앞으로 추가 리뷰를 작성하겠다.

마지막으로 마무리가 좀 허전하다. 다음 챕터를 계속 읽어야 할 것 같은데, 마무리다.

개정판에는 독자를 위한 마무리가 있었으면 하는 바람이 있다. ^^

그럼에도 나는 저자의 다음 책에 대한 기대가 매우 높다.


책을 읽으면서 가장 마음에 드는 문구로 이번 리뷰를 마무리하고자 한다.



개발자는 요구사항을 이해할 때 왜 이런 기능을 요구하는지 또는 실제로 원하는 게 무엇인지 생각하고 전문가와 대화를 통해 진짜로 원하는 것을 찾아야 한다.

 

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

 

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

 

DDD

위 책은 도메인 주도 개발에 대해서 설명해주는 책입니다.

도메인 주도 개발은 말 그대로 도메인을 중심으로 프로그래밍을 설계해나가는 방법인데요.

도메인이 뭘까요?

 

책에서는 도메인은 소프트웨어로 해결하고자 하는 문제의 영역이라고 설명합니다.

배달의 민족을 예시로 들면 배달 서비스라는 도메인으로 볼 수 있고 또 회원, 가게 검색, 결제, 배달 정보 등등의 하위 도메인으로 구성되어 있다고 볼 수 있겠죠.

또한 각 도메인에는 개발자보다 더 전문가가 있을 수 있습니다. 배달을 할 때는 도로를 안내해주어야 하고, 현재 위치에서 얼마나 걸리는지가 중요하다, 편하다 등의 지식은 저보다는 배달하시는 분들이 더 잘 아실 테니까요.

DDD는 도메인 전문가와 개발자 간의 커뮤니케이션 문제를 해결하고, 서비스를 구축해나가는 방법을 말합니다.

책 소개

책은 DDD를 처음 접하는 사람들을 대상으로 쓰였습니다. 하지만 개발에 대한 지식이 어느 정도 받쳐줘야 합니다.

예제로 사용되는 코드는 Java 17, Spring MVC, JPA와 MySQL을 기반으로 구현되어 있으며 깃허브를 통해 코드를 확인할 수 있습니다.

애플리케이션을 만들어가며 배울 수 있다는 점이 좋은 것 같습니다.

마무리

저는 이전부터 최범균 님의 DDD Start라는 책을 너무 보고 싶었습니다.

16년에 나온 책인데 절판되어서 중고가도 거의 10만원 가까이나 하길래 포기한 상태였거든요.

이번에 한빛미디어에서 이 책을 경험할 수 있는 기회를 주어서 정말 감사하게 생각하고 있습니다.

이번 달은 도메인 주도 개발(DDD)과 관련된 책을 읽게 되었습니다.

 

DDD... 말로는 많이 들어봤지만 공부해볼 엄두조차 나지 않았던 방법론이지만 이번 달 책 리스트에 있어서 선택하게 되었습니다.


언젠가 한번은 마주칠 수 있는 주제이기 때문에 도대체 DDD가 무엇인지라도 알기 위해 선택했습니다.

 

도메인 주도 개발 시작하기

 

저자님의 이름은 최범균으로 들어본 적 있는 성함이었습니다.


스프링 기초책으로 많이 추천받았던 책의 저자 시기도 합니다.


먼저 이 책은 초급자도 좋지만 자바, JPA, Spring 등에 어느 정도 지식이 있는 초중급자가 읽으면 더 많은 것을 이해할 수 있다고 처음에 설명이 되어있습니다.


하지만, 저 기술들을 모른다고 해도 아예 이해가 불가능한 것은 아니기 때문에 도전해봐도 좋을 것 같습니다.


저는 코드를 보고 직접 타이핑해보지는 않았지만 상당히 읽기 편하게 풀어서 설명이 되어 있었고, 특히 초반에 도메인에 대한 개념을 잡을 수 있어서 좋았습니다.


또한, 한 번의 설명으로 끝나는 것이 아니라 중간중간 해당 단어나 주제에 대해 풀어서 설명이 되어 있어서 이해하는데 더 도움을 주고 있습니다.


제 생각에는 단기간에 이 방법론을 익힌다기보다는 책의 예제를 따라 하는 것에 추가로 본인의 프로젝트 등에 고민을 하면서 구현을 해본다면 더 자신에게 학습이 될 것 같습니다.


회사에서 DDD를 적용한다거나, 한 번 공부해보고 싶은 분들은 초반에 이 책으로 개념을 잡은 이후에 실전에 들어가시면 좋을 것 같습니다.

 

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


Domain Driven Design.

도메인 주도 설계.

도메인과 일치하도록 소프트웨어를 모델링하는.

 

DDD의 기본적인 요소들에 대해 알 수 있다.

어떤 것들을 알아야 하는 것인지

무엇이 있는지, 무엇을 어떻게 해야 DDD인 것인지

 

저자가 자바와 스프링 전문가이다보니

친숙한 자바, 스프링MVC, JPA로 구현을 보여줘서

자바개발자들에겐 DDD를

더욱 손쉽게 접할 수 있도록 해준다.

 

 

도메인주도개발시작하기.jpg

 

도메인 모델을 구현할 때 알아야 할

기본인 엔티티와 밸류, 아키텍처,

그 안의 구성 요소들이 무엇인지

자바 코드로 보여주니 이해가 수월하다.

 

어떻게 도메인 모델을 사용해서 연동하는지

트랜잭션과 컨텍스트간의 통합과 확장방법까지

예제 소스와 거기에 필요한 SQL들도 제공하므로

실행시켜보면서며 배우고 이해할 수 있다.

 

 

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

 

 

‘도메인 주도 개발 시작하기’는 그 제목에 맞게 도메인에 대한 설명을 매우 잘 하고 있다.

 

IMG_0160 작게.png

 

도메인 모델을 도출하는 방법이나 도메인 모델과 데이터 모델의 차이 도메인 영역의 구성 요소등을 잘 설명하고 있다.

이러한 설명을 쇼핑몰 도메인 관점에서 예를들어 설명하고 코드 레벨에서의 간략한 설명 등을 통해 이해를 돕고 있다.

일부 서적에서는 장황한 설명을 위해 많은 코드를 사용하는 경우가 많은데 이 책에서는 필요한 부분만 설명을 하고 있어 이해하기도 쉽다.

 

IMG_0161 작게.png

 

IMG_0162 작게.png

 

IMG_0163 작게.png

 

초중급 개발자라면 동안 자신이 설계 구현을 할때 놓치거나 실수한 부분을 체크해 보는 기회가 있을 이라 생각한다.

 

‘도메인 주도 개발’이라는 용어에 흥미가 생겨서 이 책을 읽어보았다.

도메인 패턴을 중심에 놓고 설계하는 방식은 당연한 것 같으면서도 막상 그 실천이 쉽지만은 않다고 생각해왔고, 그렇기에 DDD에 대해 자세히 다루는 이 책은 인상깊게 다가왔다.

그동안 다뤄본 적 없는 영역이기에 목차가 자세하게 나눠진 부분이 큰 도움이 되었다.

또한 이러한 목차는 책날개에서도 간략하게 요약된 형태로 바로 확인할 수 있어서 좋았다.

책을 모두 읽은 후, 정리해 본 각 장의 내용은 아래와 같다.

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

  • 도메인 모델이 뭘까?
  • 도메인 모델에서 사용하는 엔티티와 밸류, 유비쿼터스 언어는 뭘까?

Chapter 2. 아키텍처 개요

  • 어떠한 영역들로 구성된 아키텍처를 구성해야할까?
  • 도메인 영역을 구성하는 요소들은 무엇이 있을까?

Chapter 3. 애그리거트

  • 애그리거트는 복잡한 도메인 모델을 관리 가능한 단위로 묶어주기 위해 사용한다. 이것을 어떻게 구현할까?

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

  • 리포지터리는 애그리거트의 저장소이다. 이것을 어떻게 구현할까?

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

  • 주문 취소나 상품 상세 보기 등의 조회 기능을 구현해보자.

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

  • 도메인 영역을 사용자와 연결하는 응용서비스와 표현 영역에 대해 설계하자.

Chpater 7. 도메인 서비스

  • 도메인 서비스는 어떠한 경우에 어떻게 사용할까?

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

  • 트랜잭션 충돌 문제를 방지하기 위한 방법들을 알아보자.

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

  • 서로 다른 도메인끼리 영역이 맞닿아 있는 컨텍스트를 바운디드 컨텍스트라고 한다. 이것을 어떻게 구현하고 유지할까?

Chapter 10. 이벤트

  • 이벤트 드리븐으로 동작들이 발생한다. 이 이벤트를 어떻게 처리해야할지 알아보자.

Chapter 11. CQRS

  • 도메인이 복잡해질수록 각 모델에 맞는 구현기술을 선택하여 구현하는 것이 중요하다. 이러한 것을 의미하는 CQRS의 장단점은 무엇이 있을까?

도메인주도개발에서만 사용하는 용어가 있고, 그 용어를 알아야 진행이 가능하기에 위 목차를 보면 그러한 용어들에 대해 자세히 다루고 있다는 것을 알아차릴 수 있을 것이다.

이 책이 목표로 하는 독자가 그동안 DDD를 다뤄보지 않은 사람인만큼, 정말 자세하게 용어의 정의 및 사용에 대해 알려준다. 각 챕터에서도 자세히 알 수 있지만, 실제적인 예시(온라인서점)를 통해 간략하게 정리할 수 있어서 좋았다.

자세한 용어 사용 외에도 인상 깊었던 점은 아래와 같다.

  • 자세한 NOTE기능

    • NOTE를 통해 유용한 팁, 참고사항들을 많이 알 수 있었다. 삭제 요청이 있을 때에도 바로 그 데이터를 삭제하는 것보다는 실무에서는 삭제 플래그를 사용한다는 정보를 얻게 되어 흥미로웠다.
  • 실질적인 예시를 통해 이해를 돕는다.

    • 한 가지의 기능을 구현할 때, 그 기능과 연결되어 있는 경우의 수를 생각하는 것이 중요하다. 그렇지 않으면 경우의 수를 보완하기 위해 코드를 짜는 사람조차 구분하기 어려운 조건문들이 나열될 수도 있고, 처음부터 다시 코드를 작성해야할 수도 있기 때문이다.
    • 이 책에서는 자세한 예시를 통해 어떠한 상황에는 어떠한 것을 고려해야하는지에 대해 자세히 알려주고 있어 좋았다.
  • 단일 기능의 구현 뿐만이 아닌 DDD 전체를 조망할 수 있는 시야를 배울 수 있다.

    • 온라인서점의 예시를 통해 각 모델의 세부적인 사항을 알려준다. 그 기능이 어떠한 모델에 포함되어 있고, 어떠한 트랜잭션이 이루어져야하는지에 대해 코드로 자세히 구현한다. 기능 구현을 소분류라고 표현한다면, 소분류에 대해 다루는 동시에 그 소분류가 어느 중분류에 엮여 있고, 이러한 중분류는 어느 대분류에 엮여 있는지를 책 곳곳에서 이미지를 통해 보여준다.
    • 그래서 특정 기능에만 얽매여 있지 않고, 도메인 주도 개발 전체를 훑어볼 수 있는 시야를 가질 수 있도록 도와주는 점에서 인상깊어다.

    도메인 주도 개발에 대해 다뤄본 적이 없음에도 이 책을 통해 다양한 용어에 익숙해질 수 있었다. 특히 스프링 부트를 사용한다면 책 내부의 코드를 이용해 특정 기능을 무척 수월하게 구현할 수 있으리라고 예상된다.

    도메인 주도 개발에 흥미가 있고, 어디서부터 시작해야할지 모르겠다면 이 책을 강력하게 추천한다.

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

 

 

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

 

시간이 가면서 발전하는 것은

우리가 살고 있는 사회와 그것의 유지하기 위한 제도, 그리고 사람들의 문제 의식뿐만 아니라

그 사회도 시스템적으로 발전 한다는 것이다.

가령 어떠한 문제에 대해서 예전에는 판단 할 수 있는 근거가 2~3가지 밖에 없었다다면

현재는 수많은 변수와 환경적 요인 등을 감안하여 그 문제를 분석해야 한다는 것이다.

이러한 변화는 사회적제도 뿐 아니라 우리의 업무에도 많은 변화를 가져온다.

수십년 전에 경리 1명이 처리 할 수 있었던 일을

이제는 다수의 인원이 팀을 꾸려 업무를 봐야 할 정도로 처리해야 할 일의 범위나

업무의 세분화가 일어났고, 관련 법규도 늘어났다.

이것을 이제 시스템적으로 이야기 해보고자 한다.

업무가 다양화되고 세분화 되면, 업무를 지원하기 위한 시스템 역시 그에 맞게 업그레이드 되어야 한다.

하지만 이것은 간단한 일이 아니다.

직원들의 급여 지급과 관련된 일을 생각해 보자

예전에는 인사팀 직원 혼자 처리해도 문제가 없었겠지만(일당만 지급하면 되었기 때문에)

현재는 해당 직원의 근무년수, 출장 등에서 사용한 비용, 업무 성과에 따른 인센티브 등등 감안해야 한다.

단순히 일한 일수 만으로 급여를 지급하는 시기는 지났다는 말이다.

직원들의 급여를 지급하는것이 인사팀의 일이라면

그 직원이 출장으로 인해 사용한 비용의 처리가 과연 인사팀의 일인가? 경리팀의 일인가?

(직원들의 급여 지급 자체가 이제 인사팀의 일인지, 경리팀의 일인지도 애매해진다.)

 

이와 같이 단순했던 업무가 점점 복잡해 지고, 업무의 영역이 고도화되고 타업무와의 연계가 증가할 수록

기존의 개발방법으로는 대처하기가 힘들다.

따라서 개념적으로든 구조적으로든 변화가 일어나야 하는 것은 당연하다.

그 중 하나도 도메인 주도 설계(DDD, Domain Driven Design)가 아닐까 생각한다.

 

난 아직 도메인 주도 개발에 대해 잘 모른다.

사실 도메인에 대한 개념도 제대로 잘 모른다.

하지만 이 책을 접하고 이제야 어렴풋이 감이 오기 시작한다.

 

이 책의 대상은 DDD를 처음 접하는 개발자다.

기본적인 스프링이나 JPA에 대한 설명은 따로 하지 않는다.

따라서 초급 개발자라면 잠시 이 책을 덮고 스프링과 JPA대해 공부를 하고 오는 것도 좋을것이다.

(이 책을 읽고 나면 나도 JPA에 대해 공부해야 겠다.)

 

이책은 DDD를 처음 시작하는 사람들을 위해 

도메인에 대한 개념을 소개하는 것으로 시작한다.

그리고 DDD를 위한 아키텍처에 대해 이야기 한다.

이 시점에 잠시 잊고 지냈던 SOLID의 DIP가 등장한다.

모은 기술은 이렇게 이어지는가라고 감탄하고 있을때 즈음

또 한번 내가 감탄했던 부분은 시퀀스 다이어그램을 이용한 각 도메인간의 업무프로세스 흐름이다.

기존에는 산출물을 위해서 대충 그리던 다이어그램이

이제는 단순한 산출물이 아니라 업무를 이해하는 중요한 도구로 다가오는 순간이었다.

(이제는 필요하다면 열심히 잘 그려 놓도록 하겠다!!)

 

이렇게 개념적인 부분에 이어 해당 내용을 어떻게 구현하는지 코드를 보여준다.

이 코드들에서도 많은 것을 배운다.

특별한 문법을 사용한 것이 아니라 단순히 스프링을 이용한 일부지만

도메인 서비스 영역과 응용 영역의 서비스를 어떠한 식으로 분리하는지 보여준다.

 

그리고 저자의 노하우를 아낌없이 공개하고 있다.

 

 

업무가 세분화되고 영역이 넓어 질 수록 해당 도메인에 대한 이해는 필수 이다.

그렇다고, DDD가 모든 프로젝트에 적합한 방법은 아니다.

하지만 도메인에 대한 개념을 이해하고, 데이터베이스 설계부터 도메인 개념을 적용한다면

추후 시스템이 발전했을때, 조금 더 수월하게 시스템을 업그레이드 할 수 있을 것이다.

 

이 책은 도메인 개발 방법에 대해 이해하고 감을 잡기위한 DDD 입문서로 추천하고 싶다.

 

 

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

 


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

 

KakaoTalk_20220828_012444660.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

소프트웨어 개발 방법론에는 많이 알려진 TDD 뿐만 아니라 DDD, BDDD 등 다양하다.

이 중 이 책은 DDD에 대해서 처음 접하는 개발자들이 입문하는 데에 많은 도움을 받을 수 있는 책이다.

 

이 책은 총 11장으로 구성이 되어있다.

전반부에서는 도메인 모델을 구현할 때 알아야 하는 개념을 다룬다.

도메인 모델을 사용하면 여러 이해 당사자들이 동일한 도메인을 이해하고 관련 내용을 공유하는 데 도움이 된다.

이러한 도메인을 이해하기 위해서 알아야 하는 것들을 통해 모델링을 해본다.

그리고 표현, 응용, 도메인, 인프라스트럭처라는 네 가지 영역에 대해 학습하고, 이 네 가지 영역을 구성하는 데 많이 사용하는 계층 구조와 주요 구성요소에 대해 다룬다.

전반부 내용은 DDD를 이해하는 개념이 소개되기 때문에 놓치지 않고 꼼꼼히 읽어보는 것을 추천한다.

 

 

중반부와 후반부는 DDD를 이루는 패턴들을 소개한다.

특히 중/후반부의 내용은 새로 알게된 용어들과 개념들이 많이 포함되어 있다.

나 또한 새로 접한 용어들과 개념들이 상당수 포함되어 있었다.

책에서 설명하는 내용들을 소스 코드와 다이어그램을 함께 보면서 이해하는 것을 추천한다.

 

책을 처음부터 끝까지 읽어가다보면 실제로 어떻게 구현해 나가는 지 이해하게 된다.

또한 기존 우리가 설계하는 방식에서 발생하는 여러 문제점들을 DDD로 해결하는 방식을 상세하게 설명해주기 때문에 DDD의 이점을 이해해볼 수 있었다.

 

이번에 책을 읽을 때는 DDD를 입문하여 개념을 이해하는 목표로 읽었었다.

다음에 이 책을 한번 더 볼 생각인데 그때는 내용을 정리하면서 읽어볼 계획이다.

DDD가 무엇인가 정도만 알고 있었었는데, 입문자에게 맞는 맞춤 설명 덕분에 DDD에 한발짝 더 다가갈 수 있었다.

 

DDD가 무엇인지 모르는 분들이나, DDD에 대해 입문해보고 싶은 분들에게 추천한다.

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

 

 


DDD!
도메인 주도 개발이라고 해서
단순히 도메인을 중심으로 개발하는 방법론일 것이라고 생각했다

책을 보면서 나의 무지를 깨우치게 되었고
이 책을 접하게 된 것을 행운으로 생각한다

작가인 최범균님의 책은 '스프링5 프로그래밍 입문'을 통해
이전에 접한 적이 있었다
그래서인지 책을 보기 전부터 책에 대한 신뢰는 이미 충분했다


본론으로 돌아가서

 

 

모델링에 대한 설명이 있다
DB 데이터 모델링에 대한 책인가 싶었다

 

 

 

그림과 같이

온라인 쇼핑몰 시스템을 개발할 때

상품, 주문, 회원 등의 모델 간의 관계를 바탕으로 설명하고

또한 자바 코드를 통해 더 쉽게 설명하고 있다

우선 저자는 책에서
이 책은 DDD를 처음 접하는 개발자를 위한 책으로 DDD 입문자를 대상으로 한다
고 설명하였다

개인적인 생각으로는
자바 스프링을 통한 3년 이상의 개발 경험과 (또는 비슷한 수준의 경험) 
JPA에 대한 기본 개념은 이해하고 있어야 이 책을 읽는데 수월할 것으로 판단된다


작가님 특성상 설명은 쉽고 자세히 잘 해주셨지만
용어에 대한 이해와 개발 경험에 따라 어렵게 느껴질 수도 있다

본인은 자바 백엔드 개발을 하고 있으면서도

DDD 기반의 개발 방법론을 채용하지는 않아서 인지
쉽게 진도를 나갈 수는 없었다


개발 업무와 접목시켜 여러 번 읽다 보면
한층 더 깊은 이해가 되지 않을까 싶다

 


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

KakaoTalk_20220825_090445997.jpg

 

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

 

이번 8월 리뷰 책은 도메인 주도 개발 시작하기 책으로 골라 리뷰해보려고 한다. 해당 책은 도메인 주도 개발을 처음 배우는 개발자를 위한 책으로 초보자가 쉽게 접근할 수 있도록 많은 노력을 한 것 같다.C++이나 자바 같은 객체 지향의 언어를 사용한 개발자라면 보다 쉽게 책 내용을 따라갈 수 있을 것이다.

 

SQL에 대한 내용도 알아야 하므로 백엔드 개발자들에게 더 많은 도움을 줄 수 있는 책이기도 하다. 백엔드 개발자들에겐 필수 도서가 아닐까? 또한, 도메인의 중요성과 왜 해당 모델들을 잘 이용해야 하는지 책을 보면 상세하게 서술되어 있다. 매우 추천한다!!

도메인 주도 개발에 대한 책이다.

 

그렇다면 도메인 주도 개발은 무엇인가?

도메인을 핵심 기반으로 개발을 한다는 것이다.

 

아니 그래서 도메인이 뭔데?

라는 궁금증 때문에 읽어보게 된 책입니다.

 

 

아니 도대체 도메인이 뭔데???!?!?

라는 생각으로 아무것도 모르고 책을 펼쳤지만!!!!

 

아니글쎄 개발자뿐만 아니라 기획자에게도 꼭 필요한 책이지 뭡니까.

 

사실 양쪽다 도메인 주도 개발에 대한 이해가 있어야 시스템을 구성하고 개발하는 일이 제대로 돌아가겠구나 싶었습니다!

아무튼 간단히 말하면 이 책은

[ 도메인이 뭔데??!? ] 에서 시작해서

[ 아! 도메인 주도 개발을 이래서 해야되는 구만!! ] 까지 연결고리를 만들어 주는 책입니다.



 

 


 

이 책의 특징!!

 

"JAVA 몰라도 불편하지 않아요!"

 

20220823_130220.jpg

 


JAVA를 기반으로 예시를 들어가며 도메인 주도 개발의 중요성을 설명해줍니다....만!

저는 JAVA의 J도 몰랐어도 책을 읽는데 불편함은 없었습니다.

물론 코드구성에 대한 구체적인 페이지들은 그냥 스킵해버렸지만

핵심 아이디어들을 이해하고 제가 사용하는 언어로 구현하는데 불편함은 없었습니다.

즉! 코드 예시는 정말 아이디어의 이해를 돕기 위한 예시일 뿐!

본질은 '아이디어' 자체에 있음을 잘 보여주는 책입니다.



 

"이해에 도움이 되는 Diagram"

 

 

20220823_130242.jpg

 

 



개발 관련 책을 보면 책에서 이야기 하는 '좋은 사례'만 보여주고 넘어가는 케이스가 많은데

이 책은 나쁜 사례 역시 '시각적으로 표현' 해 두어서 비교해가며 이해하기 좋습니다.

이쁜 그림 / 화려한 색채는 없으나 간결 명료해서 오히려 더욱 좋았습니다.



 

"탄탄한 기본 개념 정리와 근거 제시"



20220823_130205.jpg

 

20220823_130147.jpg

 

 

도메인 주도 개발을 이해하는데 있어서 개별적인 용어의 정의를 명확하게 설명하고 있고

더 나아가 헷갈리기 쉬운 미묘한 차이점도 잘 설명하고 있습니다.

특히 저자가 초보 시절에 스스로 헷갈려했던 부분을 예시로 들어서 설명해주는 것은 정말 좋았습니다.



 

"그래서 누구에게 필요한 책인가?"

 

20220823_130135.jpg

 

 

개발 직군에 있는 사람들을 대상으로 한 책이지만

오.히.려.

저는 기획자들이 읽어봐야할 책이라고 봅니다.

특히 Chapter 1, 2, 3, 6, 7장은 기획자에게 정말 큰 도움이 될 것입니다.

개발팀과의 원활한 의사소통과 중장기적 시스템의 확장 및 개선을 진행하는데 있어서

필수적인 개념입니다.

저 또한 이 책을 읽고나니 그간 개발팀과의 미팅에서 '왜 이 수정이 힘들다고 하는지', '왜 이 간단한 구현을 이렇게 오래 걸려서 하는지' 이해하게 되었습니다.

개발과 기획등 서비스를 만들고 운영하는 관계자들은 꼭 한번 읽어보면 도움이 될 책입니다!



 

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

 

 

도메인 주도 개발 방법론은 현대의 어플리케이션을 위해서 새롭게 만들어진 방법론이 아니다

 

이미 오래전에 정립된 방법론이며 이러한 방법론에 대한 이론이 만들어지고 이것이 실체화되기 까지는 꽤 오랜 시간이 걸리는 편이다

 

현대에 와서 마이크로서비스 개발환경과 더불어 도메인 주도 개발 방법론은 복잡해진 어플리케이션 구조를 단순화하고 일관되게 정리할 수 있는 훌륭한 방법론이라고 할 수 있다

 

 

물론 이런 방법론들이 없어도 개발을 하는 데에는 큰 지장은 없지만 어플리케이션이 복잡해지고 점점 커져가면서 

 

방법론 없이 개발된 어플리케이션의 경우 점점 복잡도가 높아지기 시작한다

 

도메인들은 얽히고 섥혀서 복잡도가 올라가고 중복된 도메인이 즐비하며 또다시 도메인들은 수없이 자기들끼리 규칙도 없이 반복적으로 호출하고 의존성으로 묶이게 되어 나중에는 히스토리도 알기 어려워지고 의존성을 분리해내는 데에도 많은 노력을 들여야 하는 지경에 이르를 수 있다

 

 

선대의 훌륭한 아키텍터들이 정립해놓은 방법론을 잘 받아들이고 어플리케이션에 녹여낼 수 있다면 현재나 미래에도 관리가 매우 용이하고 유연한 소프트웨어를 설계하고 개발할 수 있게 된다

 

 

본인도 저자와 마찬가지로 에릭 에반스의 도메인 주도 설계라는 책을 읽었지만 이론만이 즐비한 책을 읽으면서 지루함을 느꼈고 이론을 이해하고 이를 아키텍처로 풀어내는 것이 매우 힘들었었던 경험이 있다

 

 

이 책은 저자가 도메인 주도 개발 방법론에 대한 반복적인 훈련과 연구를 통해 예제 코드와 함께 

 

매우 이해하기 쉬운 레벨로 풀어서 누구나 이해하기 쉽도록 잘 정리 해놓은 책이다

 

저자의 많은 노력의 결실이며 많은 개발자들이 인정하고 많이들 찾던 책이였다

 

 

앞으로 많은 개발자들에게 좋은 영향을 끼칠 수 있는 훌륭한 책이 재출간 됐다는 소식이 너무나 반갑다

 

아직 구매하지 않은 개발자들은 또 절판되기 전에 구매를 서둘러야 될 것 같다 !!

 

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 등 일부 도서는 인증이 제한됩니다.

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

닫기

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