본문 바로가기
Book

[독서 기록] 도메인 주도 설계로 시작하는 마이크로서비스 개발, 5장

by Renechoi 2023. 5. 30.

 

모듈과 서비스 모두 응집성은 높게, 의존성은 낮게

- 118p 

 

마이크로서비스를 도출할 때 서비스가 소유권을 가진 데이터를 독립적으로 식별하는 것이 중요하다. 서비스가 보유한 기능에 의해서만 접근 가능한(캡슐화) 데이터를 파악할 필요가 있는 것이다. 

- 120p 

 

DDD에서는 이처럼 데이터를 기능과 분리해서 식별하지 않고 문제 영역인 하위 도메인마다 별도의 도메인 모델로 정의한다. 도메일 모델은 각 업무에 특화된 유비쿼터스 언어로 정의되고, 그 업무에 특화된 개념으로 구성된다.

- 120p 

 

 

서브 도메인은 중요도에 따라 핵심 서브도메인, 지원 서브도메인, 일반 서브도메인의 세 가지 유형으로 나뉜다. 

- 122p 

 

 

유비쿼터스 언어는 특정 도메인의 업무 개념을 표현하는 언어다. 예를 들면, 결제 도메인에서의 고객과 배송 도메인에서 고객은 의미가 다르다. 결제 도메인에서는 구매하기 위해 상품을 결제하는 역할에서의 고객, 즉 결제를 위한 신용카드 정보나 계좌 정보를 가진 결제자를 의미하고, 배송 도메인에서는 구매한 상품을 배송받는 역할, 즉 상품을 받을 주소와 우편번호, 전화번호를 소유한 수취자를 의미한다. 따라서 이러한 개념을 고객으로 포괄적으로 표현해서는 안 된다. 명확하게 결제 서비스에서는 결제자의 개념으로, 배송 서비스에서는 수취자의 갠며으로 모델링해야 한다.

- 124p 

 

 

 

하나의 큰 도메인을 여러 개의 바운디드 컨텍스트로 식별하면 비즈니스 수행을 위해 여러 개의 컨텍스트가 연계해야 하는 경우가 발생한다. 이러한 컨텍스트 간의 의존 관계를 DDD에서는 컨텍스트 매핑이라 하고, 연관관계에 있는 두 컨텍스트 사이에 선을 그려서 표시한다.

- 125p 

 

 

- 공유 커널

- 소비자와 공급자

- 준수자

- 충돌 방지 계층(ACL; Anti-Corruption Layer) 

- 공개 호스트 서비스(OHS; Open Host Service)

- 발행된 언어(PL; Publishd Language)

- 127p

 

 

 

이벤트 스토밍 워크숍 진행

1. 도메인 이벤트 찾기

2. 외부 시스템/외부 프로세스 찾기

3. 커맨드 찾기

4. 핫스폿 찾기

5. 액터(사용자/역할) 찾기

6. 애그리거트 정의하기

7. 바운디드 컨텍스트 정의하기

8. 컨텍스트 매핑하기

- 134p 

 

 

 

API 설계는 백엔드 서비스에 존재하지만 프런트엔드의 요구사항을 충족하도록 정의해야 한다.

- 151p 

 

REST API는 HTTP 프로토콜을 사용하는 대중적으로 광범위한 지지를 얻은 네트워크 기반 아키텍처 스타일이다. 아키텍처를 표현하는 구성요소로 자원(resource)과 행위(verb), 표현(representations)이 있다. 예를 들어 '홍길동이라는 사용자를 생성한다'라는 API가 필요하다면 자원은 '사용자'이고 행위는 '생성한다'이며 표현은 '홍길동'이 된다. 이를 REST API로 표현하면 다음과 같다. 

 

HTTP POST http://example.com/users/
{ 
    "users": {
               "name": "홍길동"
    }
}

 

즉 자원은 http://example.com/users라는 URI로 표현되고, 생성을 위한 HTTP 메서드인 POST를 사용했으며, JSON 문서의 형태로 구체적인 사용자로 표시(전달)된 것이다.

 

이처러 REST API는 직접적인 사용의 주체가 되는 요소를 자원이라 하며, URI 형식으로 표현한다. 자원은 명사를 사용하며, 세부 항목을 표시할 때는 뒤에 ID를 붙여 정의한다. 즉, 사용자의 리소스 형태가 /users/이고 홍길동의 식별자가 '01'이라면 홍길동은 /users/01로 표현된다.

 

- 152p 

 

 

 

각 애그리거트는 각각의 단일 트랜잭션으로 일관성을 유지하지만 다른 애그리거트 사이의 일관성이 필요하다면 어떻게 일관성을 유지할까? 앞에서 언급한 컨텍스트 간에 적용했던 도메인 이벤트를 사용하는 방식과 같다. 도메인 이벤트를 통한 결과적 일관성을 사용해 다른 애그리거트를 갱신해서 일관성을 유지한다.

 

결과적 일관성을 통한 애그리거트 간 갱신 

 

 

- 161p 

 

 

 

도메인 이벤트 발행 예시

 

- 163p 

 

 

반응형