본문 바로가기

DDD11

[DDD] CQRS - Command 와 Query 의 분리 본 포스팅은 DDD 를 공부하면서 정리하기 위한 포스팅입니다. 출처: 도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지 (저자. 최범균) 1. CRUD 를 처리하는 Service 객체지향을 추구하면서 개발을 하다보면, 가장 힘든 일 중 하나가 "class 들의 역할을 적절히 배분하는 것" 일 것 입니다. 개발을 하다보면 아래와 같이 코드를 작성하는 경우가 자주 발생합니다. @RequiredArgsConstructor @Transactional(readOnly = true) @Service public class CartService { private final CartRepository cartRepository; private final CartQueryRepository cartQue.. 2023. 9. 7.
[DDD] 이벤트 처리하기 : 3. 이벤트 저장소 본 포스팅은 DDD 를 공부하면서 정리하기 위한 포스팅입니다. 출처: 도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지 (저자. 최범균) 이벤트를 비동기 방식으로 처리하는 방법 중 하나는 이벤트저장소를 활용하는 방법입니다. 처리할 이벤트를 DB 같은 저장소에 모아두고, 이벤트를 일정 주기를 두고 조회해가서 이벤트를 실행하는 방식입니다. 위 내용을 그림으로 표현하면 아래 처럼 표현됩니다. 이벤트 저장 : 이벤트 생성 주체에서 이벤트를 생성하고 나서 이벤트 정보를 이벤트 저장소를 저장합니다. 이벤트 조회 : 이벤트를 사용하는 주체에서 저장된 이벤트 목록을 조회한다. 이벤트 실행 : 조회된 이벤트를 실행한다. 이벤트 저장소를 활용하기 위해 필요하다고 생각되는 부분은 바로 "일정 주기를 통해 실.. 2023. 8. 24.
[DDD] 이벤트 처리하기 : 2. 메시지 큐 (Message Queue feat. Kafka) 본 포스팅은 DDD 를 공부하면서 정리하기 위한 포스팅입니다. 출처: 도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지 (저자. 최범균) spring 에서 지원하는 이벤트 기능은 같은 서비스 내에서만 적용이 가능하다는 한계가 존재합니다. 하지만, 서비스가 커져서 각각의 도메인별로 시스템을 나누어 운영하는 MSA 구조를 도입하게 된다면, 이벤트 기능은 사용할 수 없게됩니다. 이럴경우, 시스템 간 메세지를 주고받아 데이터를 동기화하거나 특정 로직의 후처리를 진행하게 되는데 이때 사용하는 시스템을 메시지 큐(Message Queue) 라고 부르고, 대표적으로 카프카(Kafka) 라는 오픈소스 솔루션이 존재합니다. 오늘은 비동기처리를 메세지 큐, 그 중에서도 kafka 로 처리하는 방법을 간단히.. 2023. 8. 1.
[DDD] 이벤트 처리하기 : 1. 동기 vs 비동기 본 포스팅은 DDD 를 공부하면서 정리하기 위한 포스팅입니다. 아래 내용에 사용된 코드는 책에서 인용했거나, 필자의 git에서 확인할 수 있습니다. 출처: 도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지 (저자. 최범균) git : https://github.com/dongha-byun/ddd-start 1. 강결합(High Coupling) 객체지향 프로그래밍 언어를 공부하다보면 결합도(Coupling) 라는 얘기를 한 번 쯤은 듣게 됩니다. 결합도란, 두 객체간의 연관성을 의미하며 어떤 객체 A를 수정했을 때, B 객체도 수정해야 한다면, A객체와 B객체는 결합도가 높다고 표현합니다. 강결합이란 이러한 결합도가 매우 강한 경우를 얘기합니다. 예를 들면, 쇼핑몰에서 주문을 취소하는 로.. 2023. 7. 24.
[DDD] 바운디드 컨텍스트(Bounded Context) 본 포스팅은 DDD 를 공부하면서 정리하기 위한 포스팅입니다. 출처: 도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지 (저자. 최범균) 1. 바운디드 컨텍스트(Bounded Context) 하나의 큰 도메인은 작은 여러 개의 하위 도메인을 가질 수 있습니다. 이 과정에서 각자 다른 도메인이지만, 같은 용어를 다른 의미로 사용하는 경우가 있습니다. 예를 들어, 온라인 쇼핑몰 이라는 하나의 큰 도메인에 회원 도메인과 주문 도메인이 하위 도메인으로 존재한다고 가정해보겠습니다. 그리고 각 도메인에 아래와 같은 기능이 존재한다고 해보겠습니다. 회원 도메인 : 쇼핑몰 회원이 자신의 회원정보를 변경할 수 있다. 주문 도메인 : 쇼핑몰 회원은 상품 주문 시, 배송지를 변경할 수 있다. 두 도메인 모두.. 2023. 7. 19.
[DDD] 애그리거트 트랜잭션과 Lock 기법 본 포스팅은 DDD 를 공부하면서 정리하기 위한 포스팅입니다. 출처: 도메인 주도 개발 시작하기 - DDD 핵심 개념 정리부터 구현까지 (저자. 최범균) 0. 트랜잭션과 Lock 트랜잭션과 Lock 이라는 용어는 보통 데이터베이스와 관련된 용어로 많이 사용됩니다. 트랜잭션(transaction)은 데이터베이스에서 발생하는 작업의 최소단위 를 의미하며, ACID 라고 불리우는 속성을 가지고, Lock은 데이터베이스가 데이터의 무결성와 일관성을 유지하기 위해 다른 트랜잭션이 데이터에 접근하지 못하도록 막는 기법입니다. 즉, 어떤 사용자가 특정 데이터를 수정/삭제/추가 하는 과정을 "데이터의 상태를 변경한다." 라고 했을 때, 데이터의 상태를 변경하는 과정 자체를 "트랜잭션" 이라고 부르고, 이 때 다른 사용.. 2023. 6. 18.