Back-End34 [DDD] 도메인 주도 개발 시작하기_Ch8 Chapter 8 애그리거트 트랜잭션 관리 8.1 애그리거트와 트랜잭션 ∘ 운영자는 상품의 배송 상태를 바꾸고, 동시에 고객은 배송지 정보를 바꿈. 서로 다른 애그리거트 객체를 이용하지만 트랜잭션 커밋할 때 두 정보가 다 바뀜 → 애그리거트의 일관성이 깨짐 ∘ 애그리거트 트랜잭션 처리 방식에는 선점 잠금과 비선점 잠금이 있음 8.2 선점 잠금 선점 잠금 : 먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하지 못하게 블로킹 먼저 애그리거트를 사용하던 스레드가 수행하고 트랜잭션을 커밋하면 잠금이 해제됨 데이터 충돌 문제 해결 가능 선점 잠금은 보통 DBMS가 제공하는 행단위 잠금을 사용해서 구현함 JPA 프로바이더와 DBMS에 따라 잠금 모드 구현이 다름 .. 2023. 4. 2. [DDD] 도메인 주도 개발 시작하기_Ch7 Chapter 7 도메인 서비스 7.1 여러 애그리거트가 필요한 기능 ∘ 여러 개의 애그리거트가 필요한 경우가 있음 ex. 결제 금액 계산 로직의 경우 상품, 주문, 할인 쿠폰, 회원 애그리거트가 필요함 ∘ 복잡하다고 기능과 관련 없는 구성 요소가 있는 애그리거트에 기능을 넣으면 안 됨 ∘ 애그리거트가 자신의 책임 범위를 넘어서는 기능을 구현하게 되면 외부에 대한 의존이 높아지고 코드 수정이 어려워짐 ∘ 애그리거트가 여러 개 있을 때 기능을 어디에 구현할지에 대한 문제가 생기면 도메인 기능을 별도 서비스로 구현하면 됨 7.2 도메인 서비스 ∘ 도메인 서비스는 도메인 영역에 위치한 도메인 로직을 표현할 때 사용 7.2.1 계산 로직과 도메인 서비스 ∘ 특정 애그리거트에 넣기 어려운 도메인 개념은 도메인 서.. 2023. 4. 2. [DDD] 도메인 주도 개발 시작하기_Ch6 https://www.notion.so/sssoyeon/Chapter-6-2c669842d363400e84e2eb841c3ff4f9 2023. 3. 23. [DDD] 도메인 주도 개발 시작하기_Ch5 Chapter 5 스프링 데이터 JPA를 이용한 조회 기능 5.1 시작에 앞서 ∘ CQRS : 명령 모델과 조회 모델을 분리하는 패턴 ∘ 명령 모델 : 상태를 변경하는 기능 구현 ∘ 조회 모델 : 데이터를 조회하는 기능 ∘ 앞 부분에서 봤던 도메인 모델은 명령 모델로 주로 사용됨 ∘ 정렬, 페이징, 검색 조건 지정과 같은 기능은 주문 목록, 상품 상세와 같은 조회 기능에 사용됨 5.2 검색을 위한 스펙 ∘ 검색 조건의 조합마다 find를 정의하는 것은 좋지 않음 ∘ 스펙 : 검색 조건을 다양하게 조합할 때 사용, 애그리거트가 특정 조건을 충족하는지를 검사할 때 사용하는 인터페이스 ∘ 스펙을 리포지터리에 사용하는지, DAO에 사용하는지에 따라 검사 대상이 되는 객체가 다름 ∘ isSatisfiedBy() .. 2023. 3. 23. [DDD] 도메인 주도 개발 시작하기_Ch4 Chapter 4 리포지터리와 모델 구현 4.1 JPA를 이용한 리포지터리 구현 ∘ 자바의 ORM 표준인 JPA를 이용해서 리포지터리와 애그리거트를 구현하는 방법 4.1.1 모듈 위치 ∘ 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속함 ∘ 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속함 4.1.2 리포지터리 기본 기능 구현 ∘ 리포지터리가 제공하는 기본 기능 - ID로 애그리거트 조회하기 : findBy프로퍼티이름(프로퍼티 값) - 애그리거트 저장하기 : save() ∘ JPA는 트랙잭션 범위에서 변경한 데이터를 자동으로 DB에 반영 ∘ 애그리거트를 삭제하는 기능을 만들 수 있음 4.2 스프링 데이터 JPA를 이용한 리포지터리 구현 ∘ 스프링 데이터 JPA는 지정한 규칙에 맞게 리포지.. 2023. 3. 17. [DDD] 도메인 주도 개발 시작하기_Ch3 Chapter 3 애그리거트 3.1 애그리거트 ∘ 상위 수준에서 모델을 정리한 것이 관계를 이해하기 더 쉬움 ∘ ERD : Entity Relationship Diagram ∘ 후에 코드 변경을 하기 위해서는 도메인 모델의 관계 파악이 바탕이 되어야 함 ∘ 애그리거트 : 모델을 상위 수준에서 볼 수 있는 방법. 관련된 객체를 군으로 묶음. ∘ 한 애그리거트에 속한 객체는 유사하거나 동일한 라이프 사이클을 가짐 ∘ 한 각체는 하나의 애그리거트에만 속할 수 있음 ∘ 도메인 규칙과 요구사항에 따가 경계 설정 3.2 애그리거트 루트 ∘ 애그리거트의 루트 엔티티 : 애그리거트에 속한 모든 객체가 일관된 상태를 유지하도록 애그리거트 전체를 관리 3.2.1 도메인 규칙과 일관성 ∘ 애그리거트 루트는 애그리거트의 일관.. 2023. 3. 17. [DDD] 도메인 주도 개발 시작하기_Ch2 Chapter 2 아키텍처 개요 2.1 네 개의 영역 ∘ 아키텍처를 설계할 때 표현, 응용, 도메인, 인프라스트럭처가 필요 - 표현 영역(UI 영역) : 사용자의 요청을 받아 응용 영역에 전달함, 응용 영역의 처리 결과를 사용자에게 보여줌 - 응용 영역 : 시스템이 사용자에게 제공해야 할 기능을 구현함, 도메인 영역의 도메인 모델 사용 - 도메인 영역 : 도메인 모델을 구현함 - 인프라스트럭터 영역 : 기술의 실제 구현 2.2 계층 구조 아키텍처 ∘ 계층 구조의 아키텍처가 많이 사용됨. 계층 구조에서는 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않음 ∘ 인프라스트럭처에 의존하면 ’많은 것을 만들고 나서야 테스트를 해볼 수 있다는 어려움‘, ’기능 확장의 어려움‘이 발.. 2023. 3. 11. [DDD] 도메인 주도 개발 시작하기_Ch1 Chapter 1 도메인 모델 시작하기 1.1 도메인이란? ∘ 도메인 : 소프트웨어로 해결하고자 하는 문제 영역 ∘ 한 도메인은 하위 도메인으로 나눌 수 있음 ∘ 한 하위 도메인은 다른 하위 도메인과 연동해서 완전한 기능 제공 ∘ 소프트웨어가 도메인의 모든 기능을 제공하는 것은 아님. 외부 시스템과 기능 연동해서 제공하기도 함. ∘ 상황을 고려해서 하위 도메인이 구성됨 1.2 도메인 전문가와 개발자 간 지식 공유 ∘ 개발자가 기능 구현을 위해 코드를 작성할 때 맨 첫 단계는 요구사항 분석 ∘ 요구사항을 올바르게 이해하기 위해서 개발자는 전문가와 직접 대화해야 함 1.3 도메인 모델 ∘ 도메인 모델 : 특정 도메인을 개념적으로 표현한 것. 도메인 자체를 이해하기 위한 개념 모델. ∘ 개념 모델인 도메인 모.. 2023. 3. 11. 이전 1 2 3 4 5 다음