<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>실습 예제 on Advanced Beginner</title><link>https://advanced-beginner.github.io/ko/docs/ddd/examples/</link><description>Recent content in 실습 예제 on Advanced Beginner</description><generator>Hugo</generator><language>ko-KR</language><managingEditor>d8lzz1gpw@mozmail.com (kimbenji)</managingEditor><webMaster>d8lzz1gpw@mozmail.com (kimbenji)</webMaster><lastBuildDate>Mon, 23 Mar 2026 19:08:15 +0900</lastBuildDate><atom:link href="https://advanced-beginner.github.io/ko/docs/ddd/examples/index.xml" rel="self" type="application/rss+xml"/><item><title>프로젝트 설정</title><link>https://advanced-beginner.github.io/ko/docs/ddd/examples/setup/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/ddd/examples/setup/</guid><description>&lt;h1 id="프로젝트-설정"&gt;프로젝트 설정&lt;a class="anchor" href="#%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ec%84%a4%ec%a0%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;DDD 계층형 아키텍처(Domain, Application, Infrastructure, Interfaces)로 패키지 구성&lt;/li&gt;
&lt;li&gt;Spring Boot 3.2.x + Spring Kafka + JPA 기반 의존성 설정&lt;/li&gt;
&lt;li&gt;AggregateRoot, DomainEvent, Entity 기반 클래스 구현&lt;/li&gt;
&lt;li&gt;Docker Compose로 Kafka + PostgreSQL 개발 환경 구축&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="대상-독자-및-선수-지식"&gt;대상 독자 및 선수 지식&lt;a class="anchor" href="#%eb%8c%80%ec%83%81-%eb%8f%85%ec%9e%90-%eb%b0%8f-%ec%84%a0%ec%88%98-%ec%a7%80%ec%8b%9d"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;요구 수준&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;DDD 패턴을 Spring Boot에 적용하려는 백엔드 개발자&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Java 17+ 문법, Record, Stream API&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spring Boot&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Spring Boot 기본 구조, DI, @Service, @Repository&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Gradle&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Kotlin DSL 기본 문법&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;docker-compose up/down 실행 경험&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;DDD 예제 프로젝트의 구조와 의존성을 설정합니다.&lt;/p&gt;</description></item><item><title>주문 도메인</title><link>https://advanced-beginner.github.io/ko/docs/ddd/examples/order-domain/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/ddd/examples/order-domain/</guid><description>&lt;h1 id="주문-도메인-구현"&gt;주문 도메인 구현&lt;a class="anchor" href="#%ec%a3%bc%eb%ac%b8-%eb%8f%84%eb%a9%94%ec%9d%b8-%ea%b5%ac%ed%98%84"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Order&lt;/strong&gt;: Aggregate Root. 주문의 일관성 경계를 관리&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OrderLine&lt;/strong&gt;: 내부 Entity. Order를 통해서만 생성/변경 가능&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Money, ShippingAddress, OrderId&lt;/strong&gt;: Value Object. 불변이며 값으로 비교&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;불변식&lt;/strong&gt;: 주문 항목 1개 이상, 최대 금액 1억원, 수량 1~999&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도메인 이벤트&lt;/strong&gt;: OrderCreatedEvent, OrderConfirmedEvent 등 상태 변경 시 발행&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="대상-독자-및-선수-지식"&gt;대상 독자 및 선수 지식&lt;a class="anchor" href="#%eb%8c%80%ec%83%81-%eb%8f%85%ec%9e%90-%eb%b0%8f-%ec%84%a0%ec%88%98-%ec%a7%80%ec%8b%9d"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;요구 수준&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;DDD 전술적 패턴을 코드로 구현하려는 개발자&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;DDD 기초&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Aggregate, Entity, Value Object, Domain Event 개념 이해&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Record, Optional, Stream API 사용 경험&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;선수 문서&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/ddd/examples/setup/"&gt;프로젝트 설정&lt;/a&gt; 완료&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;DDD 패턴을 적용하여 주문 도메인을 구현합니다.&lt;/p&gt;</description></item><item><title>애플리케이션 계층</title><link>https://advanced-beginner.github.io/ko/docs/ddd/examples/application-layer/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/ddd/examples/application-layer/</guid><description>&lt;h1 id="애플리케이션-계층-구현"&gt;애플리케이션 계층 구현&lt;a class="anchor" href="#%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98-%ea%b3%84%ec%b8%b5-%ea%b5%ac%ed%98%84"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OrderService&lt;/strong&gt;: Use Case 조율. 도메인 로직 호출, 트랜잭션 관리, 이벤트 발행&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Command 객체&lt;/strong&gt;: CreateOrderCommand 등 요청을 불변 객체로 캡슐화&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DTO&lt;/strong&gt;: OrderResponse 등 응답을 도메인과 분리하여 표현&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JPA Repository&lt;/strong&gt;: Domain Repository 인터페이스의 구현체. Mapper로 Entity 변환&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이벤트 핸들러&lt;/strong&gt;: @TransactionalEventListener로 커밋 후 Kafka 발행&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="대상-독자-및-선수-지식"&gt;대상 독자 및 선수 지식&lt;a class="anchor" href="#%eb%8c%80%ec%83%81-%eb%8f%85%ec%9e%90-%eb%b0%8f-%ec%84%a0%ec%88%98-%ec%a7%80%ec%8b%9d"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;요구 수준&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Application Service와 Infrastructure 계층 구현을 배우려는 개발자&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spring&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;@Service, @Transactional, @Repository 애노테이션 사용 경험&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;JPA&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Entity, @Embedded, CascadeType 이해&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;선수 문서&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/ddd/examples/setup/"&gt;프로젝트 설정&lt;/a&gt;, &lt;a href="https://advanced-beginner.github.io/ko/docs/ddd/examples/order-domain/"&gt;주문 도메인&lt;/a&gt; 완료&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Use Case를 조율하는 Application Service와 인프라 계층을 구현합니다.&lt;/p&gt;</description></item><item><title>Event Sourcing 실습</title><link>https://advanced-beginner.github.io/ko/docs/ddd/examples/event-sourcing/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/ddd/examples/event-sourcing/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Event Sourcing&lt;/strong&gt;: 상태 대신 이벤트를 저장. 이벤트 재생으로 상태 복원&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event Store&lt;/strong&gt;: 이벤트 영속화 저장소. 버전 기반 낙관적 동시성 제어&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event-Sourced Aggregate&lt;/strong&gt;: apply/when 패턴으로 이벤트 적용 및 상태 변경&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Snapshot&lt;/strong&gt;: 성능 최적화를 위해 주기적으로 상태 스냅샷 저장&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;시점 복원&lt;/strong&gt;: 특정 버전까지의 이벤트만 재생하여 과거 상태 조회 가능&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="대상-독자-및-선수-지식"&gt;대상 독자 및 선수 지식&lt;a class="anchor" href="#%eb%8c%80%ec%83%81-%eb%8f%85%ec%9e%90-%eb%b0%8f-%ec%84%a0%ec%88%98-%ec%a7%80%ec%8b%9d"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;요구 수준&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;대상 독자&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Event Sourcing 패턴을 실제로 구현해보려는 개발자&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;DDD&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Aggregate, Domain Event 개념 이해&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Java&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Switch Expression, Pattern Matching 문법&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;선수 문서&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://advanced-beginner.github.io/ko/docs/ddd/examples/order-domain/"&gt;주문 도메인&lt;/a&gt;, &lt;a href="https://advanced-beginner.github.io/ko/docs/ddd/examples/application-layer/"&gt;애플리케이션 계층&lt;/a&gt; 완료&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Event Sourcing 패턴을 실제 주문 도메인에 구현합니다. 상태 대신 이벤트를 저장하고, 이벤트를 재생하여 상태를 복원합니다.&lt;/p&gt;</description></item></channel></rss>