ddd

    도메인주도개발 시작하기 11장 CQRS

    CQRS란 Command and Query Responsibility Segregation 의 약자로, 데이터 저장소로부터의 읽기와 업데이트 작업을 분리하는 패턴을 말한다 여러 애그리거트의 데이터가 필요하면 다양한 방안의 구현방법을 고민해야한다. 식별자를 이용해서 애그리거트를 참조하는 방식을 사용하여 가져와한다. 상태 변경 기능은 주로 한 애그리거트의 상태를 변경한다. 반면, 조회 기능은 두 개 이상의 애그리거트가 필요할 때가 많다. 상태를 변경하는 범위와 조회하는 범위가 일치하지 않기 때문에 단일 모델로 두 종류의 기능을 구현하면 모델이 불필요하게 복잡해진다. 위 복잡도를 해결하기 위해 사용하는 방법이 CQRS이다. CQRS : 명령(Command)을 위한 모델과 조회(Query)를 위한 모델을 분리하..

    도메인주도개발 시작하기 10장 이벤트

    ## 시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불처리를 해야한다. 이때 보통 결제 시스템은 외부에 있으므로 Order 도메인에서 구매 취소에 관련된 서비스를 다음과 같이 파라미터로 주입할 것이다. 위처럼 외부 시스템을 도메인에서 호출 시 3가지 문제가 발생할 수 있다. 1. 외부 서비스가 비정상일 경우 트랜젝션 처리를 어떻게 할까? - 롤백을 해야할까? 일단 커밋을 해야할까?, 아니면 상태만 변경한 후에 나중에 다시 시도를 해야할까? 2. 외부 시스템의 응답 시간이 길어지면 어떻게 할까? - 대기 시간만큼 응답시간이 길어져서 성능에 악영향을 주지 않을까? 3. 도메인 객체에 서비스를 전달하면 설계상 문제가 발생하지 않을까? - 도메인 로직과 외부 로직이 뒤섞이지 않을까? 바운디드 컨텍스트 간 ..

    도메인주도개발 시작하기 9장 바운디드컨텍스트

    # 바운디드 컨텍스트 간 통합 - 인프라 영역에서 외부 시스템과의 연동을 처리 - RecSystemClient에서 도메인 모델 변환하는 작업을 처리 - 두 모델 간 변환 과정이 복잡하면 변환 처리를 위한 별도 클래스 생성 가능 - Rest API를 통해 두 바운디드 컨텍스트를 직접 통합할 수 있고, 메시지큐를 사용하여 간접적으로 통합할 수도 있음 - 비동기적으로 처리 가능 - 단, 두 바운디드 컨텍스트가 사용할 메시지의 데이터 구조를 맞춰야 - 변경 내용을 여러 컨텍스트에 pub-sub 가능 그럼 여기서 , microservice간 restapi 와 message queue로 처리하는 방식의 차이는 뭘까 REST API 통신: 장점: - 간단하고 직관적인 통신 방식으로, HTTP 프로토콜을 사용하여 통신..

    도메인주도개발 시작하기 3장

    - 백 개 이상의 테이블을 한장의 ERD에 모두 표시하면 개별 테이블 간의 관게를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어려움을 겪음 - 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조ㅗ나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다 - 애그리거트는 모델을 이해하는 데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다. - 모델을 보다 더 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하기 때문에, 애그리거트는 복잡한 도메인을 단순한 구조로 만들어 준다. - 복잡도가 낮아지는 만큼 도메인 기능을 확장하고 변경하는데 필요한 노력(개발시간)도 줄어든다 - 애그리거트는 관련된 모델을 하나로 모았기 때문에 한 애그리거트에 속한 객체는 유사하거나 동일..