문제
분산 시스템 환경에서 서비스 간 결합도를 낮추기 위한 CQRS(Command Query Responsibility Segregation) 패턴과 Saga 패턴의 적용 방법을 설명하고, 이들 패턴이 데이터 일관성과 시스템 응집도에 미치는 영향을 분석하여 서술하시오.
정답
CQRS는 명령(Command)과 조회(Query)의 책임을 분리하여 각각 최적화된 모델을 사용하는 패턴으로, 서비스 간 직접적 의존성을 제거하여 결합도를 낮춘다. Saga 패턴은 분산 트랜잭션을 일련의 로컬 트랜잭션으로 분해하고 보상 액션을 통해 일관성을 보장한다. CQRS는 읽기/쓰기 모델 분리로 각 서비스의 응집도를 높이고, Saga는 비즈니스 프로세스 중심의 높은 응집도를 제공한다. 단, 최종 일관성으로 인해 즉시 일관성이 필요한 경우 적용에 주의가 필요하다.
CQRSSaga 패턴명령 조회 분리분산 트랜잭션보상 액션최종 일관성결합도응집도서비스 분리비즈니스 프로세스
해설
CQRS는 Martin Fowler가 제안한 패턴으로 읽기와 쓰기 모델을 물리적으로 분리하여 각각의 요구사항에 맞게 최적화할 수 있다. Saga 패턴은 Chris Richardson이 제안한 분산 트랜잭션 관리 패턴으로 Orchestration과 Choreography 두 가지 구현 방식이 있다. 두 패턴 모두 이벤트 기반 아키텍처와 결합하여 서비스 간 느슨한 결합을 실현하며, 각 서비스의 책임을 명확히 하여 응집도를 향상시킨다.