DevBoi

[DDD] 커뮤니케이션 유형 본문

Develop/[DDD]

[DDD] 커뮤니케이션 유형

HiSmith 2023. 6. 8. 14:12
반응형

크게 상태가 있거나, 없는 상태로 만들수 있다.

Stateless,Stateful 이 두가지 방식으로 개발을 할 수 있다.

 

아래의 과정을 한번 보자

주문접수자는 주문목록을 가지고 있고, 바리스타는 주문접수자가 넘겨준,

제작 목록에 남겨서 커피를 만들어서 별개의 병행으로 작업을 하고 이벤트로 진동벨에 전달을 한다.

이벤트 생성, 이벤트 대응하는 모듈을 분리하고 상호 독립적으로 동작하여, 병령처리를 촉진한다.

발신자,수신자를 장소와 시간에서 쉽게 분리가 가능하다.

 

또한 각 모듈간의 필요에 의해 스케일 아웃 등의 확장에용이하고

동기,비동기가 선택이 가능하다.

 

 

비동기로 선택했을때 관련 문제들이 발생할 수 있다.

- 네트워크 장애, 중요한 순간 서버 장애, 이벤트 순서가 꼬임, 이벤트 중복 등

- 데이터 소실 처리

1. 큐에 전달 안됨, 전달 되어도 큐가 다운됨

2. 메시지를 꺼내 처리 전에 장애 발생

3. 데이터 에러로 인해 메시지 저장 실패

 

위와 같은 상황에서 각각의 큐가 다운되거나, 이벤트 순서가 꼬이거나 데이터 에러로 인해 혹은 네트워크 장애로 인해

데이터가 소실되면 큰 문제가 발생하게 된다.

 

이러한 문제를 발생하는것을 대비해서, 

동기식으로 전송하고 퍼시스턴트 큐를 사용하고, 클라이언트 확인 응답모드를 추가하는것이다.

DB에 쓸때는 ACID 트랜잭션 을 통해서, 해당 관련 방어를 할 수 있다.

 

비동기 관련 방지 패턴들은 아래와 같다.

 

 

데이터를 저장하는 패턴과 메시지에 보내는 패턴을 묶어서, 해당 같은 트랜잭션 내에서 처리하는 것이다.

 

 

또 하나는 아웃박스 패턴이라고 해서,

하나의 캠페인에서 이벤트가 발생이 되면, 아웃박스 되어있는 녀석에게 트랜잭션으로 묶여서 저장을하고

해당 묶여있는 녀석에게 메시지 릴레이가 풀푸쉬를 하고 발행하는 방식의 패턴이 비동기 패턴에서 발생할 수 있는 문제들을 방어할수있게 많이 제안된다.

 

하나의 트랜잭션으로 묶여도 발행된 이벤트가 여러가지 요인으로 전달 되지 않은 경우, 일관성을 맞추는 것에 초점을 두어

생성된 패턴이다.

 

* SAGA 패턴

 

비동기로 처리될때의 패턴이다. 하나의 보상 트랜잭션을 하나 더 두어

발행하는 쪽에서 응답값에 대한 트랜잭션을 하나 더 두어서,

캠페인이 활성화 되면 퍼블리싱을 확인해서 해당 확인에 맞는 활성화, 실패에 대한 프로세스를 별도로 두어

보상 트랜잭션까지 설계를 한 패턴이다.

 

 

반응형

'Develop > [DDD]' 카테고리의 다른 글

[DDD] 커맨드 및 액터 도출  (0) 2023.06.08
[DDD] 모델링 실습  (0) 2023.06.08
[DDD] CQRS 및 아키텍처 패턴  (0) 2023.06.08
[DDD] 헥사고날 아키텍처, 클린 아키텍처  (0) 2023.06.08
[DDD] 레이어드 아키텍처  (0) 2023.06.08