Justin의 개발 로그
article thumbnail

MSA의 비지니스 도메인 간에 종속성을 없앨 수 있는 Observer Service Pattern

 

예를 들어 상품의 상태(재고, 판매상태 등)가 변하면 상품 뿐만 아니라, 검색, 전시, 물류 등 여러 비지니스 로직을 처리해야 하는 경우

  • 특정 도메인의 상태 변경으로 인해 타 도메인의 서비스를 연속적으로 호출해야 하는 경우 

  • 비지니스 복잡도가 증가할수록 상태 변경을 처리하는 로직에서 해야할 일이 많아지고, 소스 코드는 복잡해 지며,
    종속성 증가, 트랜잭션 시간 증가, 교착상태 발생(deadlock) 등 다양한 문제가 생긴다.

 

[도메인에서 상태 변경 처리]

  • 도메인 자신의 상태 변경만 처리한 후 메시지 큐에 상태 변경을 등록한다.
  • 즉, 자기 자신의 비지니스 로직 처리만 집중하며, 상태 변경에 따른 다른 도메인의 영향 범위 처리는 모두 Message Queue(MQ)에 일임한다.

[Observer 등록]

  • 특정 도메인의 상태 변경에 영향을 받는 비지니스가 있으면, MQ에 Observer 등록을 한다.

 

[Receive Message]

  • MQ는 Queue에 들어온 메시지를 각 Observer에게 전송(또는 Observer가 polling) 한다.
  • 각 Observer에서 메시지 처리가 완료되면, 메시지 삭제를 위한 신호를 MQ에 보낸다.

 

 

위와 같이 Observer Service 패턴을 이용하는 경우 도메인의 종속성(Dependency)을 끊을 수 있으며, 

Observer Service 에 메시지를 전송하는 부분을 AOP로 제공하면, 도메인은 비지니스 로직의 처리에 집중할 수 있다.

 

[주의사항]

  • 본 패턴은 비동기 처리가 가능한 비지니스, 즉, 데이터 정합성이 높지 않은 비지니스에 적합할 것임 

 

'프로그래밍 > MSA' 카테고리의 다른 글

MSA의 성공 기준  (0) 2023.05.19
SAGA 보상 트랜잭션  (0) 2023.05.19
분산 트랜잭션 관리(Saga Pattern)  (0) 2023.05.19
MSA 기술 트렌드 2022  (0) 2021.12.27
profile

Justin의 개발 로그

@라이프노트

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!