2025/06/19 3

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 8. 애그리거트 트랜잭션 관리

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 애그리거트와 트랜잭션서로 다른 스레드/트랜잭션이 같은 애그리거트의 DB를 동시에 수정하면 충돌이 일어날 수 있음‼️ 두 스레드가 동시에 커밋하면 일관성 깨짐➡️ 해당 테이블의 행에 잠금을 걸어 동시 커밋을 막음 예시) 배송 정보 변경더보기시스템: 배송 상태를 배송으로 변경할 때사용자: 배송지 주소를 변경할 경우➡️ 시스템의 애그리거트 객체와 사용자의 애그리거트 객체는 서로 독립적 (개념적으로는 같지만 물리적으로는 서로 다름) 2. 선점 잠금먼저 들어온 트랜잭션이 커밋될 때까지 같은 행을 접근하는 다른 트랜잭션은 잠시 blocking됨 (대기)먼저 들어온 트랜잭션이 커밋되면 잠금이 해제됨➡️ ..

Code 2025.06.19

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

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 여러 애그리거트가 필요한 기능도메인 영역의 코드를 작성하다 보면, 한 애그리거트로 기능을 구현할 수 없을 때가 있음✅ 도메인 / 애플리케이션 서비스에서 처리하기❌ 여러 애그리거트의 데이터/규칙을 한 번에 써야하는 유스케이스는, 한 애그리거트에 집어넣지 말기 예) Order - 결제 금액 계산더보기주문을 확정하려면 주문 애그리거트는 외부 애그리거트 정보를 읽어와서 계산하고, 결과 스냅샷만 자기 내부에 기록함애그리거트주문 시 필요한 정보(읽기)소유/책임비고Product상품 가격, 판매 가능 여부, 카테고리상품 카탈로그/정책가격은 주문 시점 스냅샷으로 Order에 저장Coupon/Promotion..

Code 2025.06.19

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 4. 애그리거트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다.1. JPA를 이용한 리포지터리 구현모듈 위치리포지토리 인터페이스는 도메인 영역에 속함리포지토리를 구현한 클래스는 인프라스트럭쳐 영역에 속함 2. 스프링 데이터 JPA를 이용한 리포지터리 구현3. 매핑 구현4. 애그리거트 로딩 전략1:N 관계가 여러 개 있을 경우Fetch Join 쿼리의 결과는 될 수 있는 모든 경우의 행을 반환함 (카테시안 곱)❌ 실제 필요한 행의 갯수보다 더 많은 행을 얻어옴Hibernate에서는 Fetch Join 시, distinct 처리함같은 엔티티가 중복 생성되지 않게 함⚠️ 성능 부하가 일어날 수 있음 (DB, JVM의 연산이 늘어남) 예시) Order - OrderL..

Code 2025.06.19