본문 바로가기

Back-End/도메인 주도 개발 시작하기21

[DDD] 도메인 주도 개발 시작하기 Ch3 Chapter 3 애그리거트 3.1 애그리거트 ∘ 상위 수준에서 모델을 정리한 것이 관계를 이해하기 더 쉬움 ∘ 모델을 이루고 있는 객체들을 보는 것보다 보다 상위 수준에서 바라보게 되면 관계 파악이 수월해짐 ∘ 추후에 코드 변경 및 확장을 하려면 도메인 모델의 관계 파악이 되어야 함 ∘ 코드를 고칠 때 전체적인 것을 고려하지 않고 바꾸려는 세부적인 부분만 보면 안 됨 ∘ 애그리거트 : 모델을 상위 수준에서 볼 수 있는 방법. 관련된 객체를 군으로 묶음. ∘ 애그리거트로 묶으면 상위 수준에서도, 그보다 구체적인 수준에서도 모델 파악에 용이함 ∘ 한 애그리거트에 속한 객체는 유사하거나 동일한 라이프 사이클을 가짐 ∘ 하나의 객체는 하나의 애그리거트에만 속할 수 있음 ∘ 도메인 규칙과 요구사항에 따가 경계 .. 2024. 3. 18.
[DDD] 도메인 주도 개발 시작하기 Ch2 Chapter 2 아키텍처 개요 2.1 네 개의 영역 ∘ 아키텍처를 설계할 때 표현, 응용, 도메인, 인프라스트럭처가 필요 - 표현 영역(UI 영역) : 사용자의 요청을 받아 응용 영역에 전달함, 응용 영역의 처리 결과를 사용자에게 보여줌 - 응용 영역 : 시스템이 사용자에게 제공해야 할 기능을 구현함, 도메인 영역의 도메인 모델 사용 - 도메인 영역 : 도메인 모델을 구현함 - 인프라스트럭터 영역 : 기술의 실제 구현 2.2 계층 구조 아키텍처 ∘ 계층 구조의 아키텍처가 많이 사용됨. 계층 구조에서는 상위 계층에서 하위 계층으로의 의존만 존재하고 하위 계층은 상위 계층에 의존하지 않음 ∘ 인프라스트럭처에 의존하면 ’많은 것을 만들고 나서야 테스트를 해볼 수 있다는 어려움‘, ’기능 확장의 어려움‘이 발.. 2024. 3. 10.
[DDD] 도메인 주도 개발 시작하기 Ch1 Chapter 1 도메인 모델 시작하기 1.1 도메인이란? ∘ 도메인 : 소프트웨어로 해결하고자 하는 문제 영역 ∘ 한 도메인은 하위 도메인으로 나눌 수 있음 ∘ 한 하위 도메인은 다른 하위 도메인과 연동해서 완전한 기능 제공 ∘ 소프트웨어가 도메인의 모든 기능을 제공하는 것은 아님. 외부 시스템과 기능 연동해서 제공하기도 함. ∘ 상황을 고려해서 하위 도메인이 구성됨 1.2 도메인 전문가와 개발자 간 지식 공유 ∘ 개발자가 기능 구현을 위해 코드를 작성할 때 맨 첫 단계는 요구사항 분석 ∘ 요구사항을 올바르게 이해하기 위해서 개발자는 전문가와 직접 대화해야 함 1.3 도메인 모델 ∘ 도메인 모델 : 특정 도메인을 개념적으로 표현한 것. 도메인 자체를 이해하기 위한 개념 모델. ∘ 개념 모델인 도메인 모.. 2024. 3. 10.
[DDD] 도메인 주도 개발 시작하기_Ch11 Chapter 11 CQRS 11.1 단일 모델의 단점 주문 내역 조회 기능을 구현하려면 여러 애그리거트에서 데이터를 가져와야 됨 조회 기능을 구현할 때 식별자를 이용해서 애그리거트를 참조하면 즉시 로딩과 같은 JPA의 쿼리 관련 최적화 기능을 사용할 수 없음. 직접 참조하더라도 조회 화면 특성에 따라 같은 연관도 즉시 로딩이나 지연 로딩으로 처리해야 되므로 고민해야 됨. 이러한 문제는 시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하기 때문 이런 상황에서 구현 복잡도를 낮추려면 상태 변경을 위한 모델과 조회를 위한 모델을 분리하면 됨 11.2 CQRS 시스템이 제공하는 기능 : 상태를 변경하는 기능, 사용자 입장에서 상태 정보를 조회하는 기능 도메인 모델 관점에서 상태 변경 기능은 주로 .. 2023. 5. 8.
[DDD] 도메인 주도 개발 시작하기_Ch10 Chapter 10 이벤트 10.1 시스템 간 강결합 문제 외부 시스템의 서비스를 호출할 때의 문제 - 외부 서비스가 정상이 아닐 때 트랜잭션 처리가 애매함 - 트랜잭션을 롤백할지 말지 - 외부 서비스의 성능에 직접적인 영향을 받음 - 설계상 서로 다른 로직이 섞일 수 있음 컨텍스트 간의 강결합이 있으면 결합된 컨텍스트끼리 영향을 주고받게 됨 이벤트를 사용하면 강결합 제거 가능 10.2 이벤트 개요 이벤트 : 과거에 벌어진 어떤 것. 상태가 변경됐음을 의미. 이벤트가 발생하면 그에 따른 동작이 수행됨 10.2.1 이벤트 관련 구성요소 이벤트 도입을 위해서는 이벤트, 이벤트 생성 주체, 이벤트 디스패처(퍼블리셔), 이벤트 핸들러(구독자)를 구현해야 됨 - 이벤트 생성 주체 : 엔티티, 밸류, 도메인 서비스.. 2023. 5. 8.
[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.