본문 바로가기

Archived(IT)/MSA

마이크로 서비스 패턴 #5 비즈니스 로직 설계

개요

비즈니스 로직 설계에 있어 큰 어려움 2가지

  • 도메인 모델은 서로 얽혀있다
  • 트랜잭션 관리 하의 비즈니스 로직 설계 어려움

비즈니스 로직 구성 패턴 2가지

1) 절차적 구성의 트랜잭션 스크립트 패턴 > 복잡한 비즈니스 로직 구현 어려움

2) 도메인 기반 모델 패턴 > 클래스로 나누어 복잡한 비즈니스 로직 구현 가능

VO 와 DAO, DTO 로 나누듯이 상태 클래스와 동작 클래스로 구분지어 설계

 

DDD(Domain Driven Design)
  • Entity : 영속적인 ID를 가진 객체
  • Value Object : 값들을 모아 놓은 객체
  • Factory : 객체 생성 로직이 구현된 객체
  • Repository : entity 를 저장하는 DB 접근 로직 캡슐
  • 서비스 : entity, VO 에 속하지 않은 비즈니스 로직 구현체
의문 : 비즈니스 객체의 경계는 항상 뚜렷한가? 
답변 : 그렇지 않다

개념적으로도 모호한 것들을 개발에서까지 활용할 수 있을까?

이에 대해 애그리거트(Aggregate)로 해결!

 

애그리거트(Aggregate)

한 단위로 묶여지는 객체들의 모음이다. Root Entity 와 다른 기타 Entity, VO 를 포함한다.

일반적으로 비지니스 객체들이 Aggregate다. 

 

이 애그리거트는 3 가지 규칙을 준수하면서 MSA의 룰을 어기지 않는다

  • 다른 Aggregate 의 Root Entity 를 참조할 때는 Identity (Primary Key) 로 참조
  • 한 트랜잭션에서는 하나의 Aggregate 만 변경(생성/수정)
  • 작은 단위로 Aggregate 를 디자인

애그리거트의 크기 단위 결정

작으면 작을수록 좋지만 한 트랜잭션의 단위로서 적절한 크기 결정

그리고 설계된 애그리거트를 기반으로 비즈니스 로직 설계

 

도메인 이벤트 발행

DDD 패턴의 맥락 내에서는 도메인 이벤트는 애그리거트에 발생한 사건

다른 애그리거트 끼리 상태 변경에 대한 내용을 알기 위해 변경 이벤트를 발행한다

 

이벤트 강화 기법 : 컨슈머에서 필요한 정보를 서비스 쿼리를 통해 거쳐가는 것이 아닌 이벤트 자체에 포함

도메인 이벤트 식별 : 이벤트 브레인스토밍, 이벤트 트리거, 애그리거트 식별의 순으로 식별