문제
**이벤트 드리븐 아키텍처(Event-Driven Architecture)**와 CQRS(Command Query Responsibility Segregation) 패턴의 개념을 각각 설명하고, 대규모 마이크로서비스 시스템에서 이 두 패턴을 함께 적용했을 때의 장점과 구현 시 고려사항을 서술하시오.
정답
이벤트 드리븐 아키텍처는 서비스 간 통신을 이벤트 발행/구독 방식으로 처리하여 느슨한 결합을 구현하는 아키텍처 패턴이다. CQRS는 데이터 변경 명령과 조회를 분리하여 각각 최적화된 모델을 사용하는 설계 패턴이다. 대규모 MSA에서 두 패턴을 함께 사용하면 이벤트로 명령과 조회 모델 간 데이터 동기화가 가능하고, 읽기 성능 최적화와 확장성이 향상된다. 하지만 최종 일관성으로 인한 데이터 불일치 가능성과 이벤트 순서 보장, 중복 처리 등을 고려해야 한다.
해설
이벤트 드리븐 아키텍처는 Apache Kafka, RabbitMQ 등의 메시지 브로커를 통해 서비스들이 이벤트를 비동기로 주고받는 방식이다. CQRS는 쓰기용 Command Model과 읽기용 Query Model을 분리하여 각각 다른 데이터 저장소를 사용할 수 있게 한다. 함께 사용 시 Command 처리 후 이벤트를 발행하고, 이를 구독하는 Query Model이 읽기 전용 데이터를 갱신하는 패턴이 일반적이다. 장점은 높은 확장성과 성능이지만, Eventually Consistency, Event Sourcing, Saga 패턴 등의 복잡성을 관리해야 한다.