본문 바로가기

POST/Tech

Axon은 Apache Kafka와 어떻게 다를까?

2022.09.27 Axon은 Apache Kafka와 어떻게 다를까?
원문보기

Axon을 이야기할 때 꾸준히 나오는 주제는 ‘Apache Kafka와 어떤 것이 다를까?’ 입니다. Axon이 Kafka의 역할을 할 수 있을까요? 서로 보완적일까요? 아니면, 함께 사용할 수 있을까요?

Axon의 기본 제안은 CQRS 및 Event Sourcing 기반 아키텍처를 구현하는 데 도움이 되는 플랫폼이라는 것입니다. Event Sourcing을 중심으로, 위 질문에 대해 알아보겠습니다.

Event-Driven Architecture

EDA(Event-Driven Architecture) 패러다임은 이벤트 생성 및 처리를 중심으로 애플리케이션 구축을 지지합니다. 이는 주로 실시간, 분산 및 확장성에서 반응성이 있어야 하는 최신 애플리케이션이 구축됨에 따라 주도되었습니다. 이러한 유형의 애플리케이션을 구축하는 데 도움이 되는 새로운 패턴, 프레임워크 및 플랫폼이 생겨났습니다. 최근 주목을 받은 패턴 중 하나는 이벤트 소싱 패턴입니다.

Event Sourcing

DDD(Domain-Driven Design)에서 시작된 Event Sourcing은 응용프로그램은 프로그램을 System of State 가 아닌 System of Events 로 취급하여 응용 프로그램의 설계 및 개발을 지지합니다.

이벤트 소싱은 다음과 같은 이점이 있습니다.

• Naturalized Audit Trail

• Data Mining / Analytics

• Design Flexibility

• Temporal Reporting

이벤트 소싱은 거의 항상 다른 패턴인 CQRS(Command Query Responsibility Separation)와 함께 사용됩니다. 이벤트 소싱의 맥락에서 CQRS는 기본적으로 애플리케이션 상태를 변경하기 위한 명령 (즉, Commands)을 수신하는 명령 모델과 명령(예: Queries), 현재 상태의 특정 표현을 검색합니다. 이벤트 소싱은 명령 모델이 의존하여 집계에서 발생하는 이벤트를 처리하고 저장합니다.

즉, 이벤트 소싱 구현에는 이벤트 저장 및 도메인 기반 설계 그리고 CQRS에 대한 일련의 문제 구현이 포함됩니다.

이벤트 소싱의 구현

Axon – 이벤트 소싱

Axon은 이벤트 기반 아키텍처를 구현하기 위해 독점적으로 구축된 선도적인 플랫폼 입니다. 확장성이 뛰어난 이벤트 저장소를 제공하는 것 외에도 Axon은 응용 프로그램 내의 모든 작업(명령/쿼리 및 이벤트)을 메시지로 처리하여 기존 CQRS/이벤트 소싱 아키텍처의 개념을 향상시킵니다. Axon은 두 가지의 주요 구성 요소를 제공합니다.

Axon Server

- 확장성이 뛰어나고 특수한 목적의 이벤트 저장소 및 구성이 필요 없는 메시지 라우터

- 각 메시지 유형의 특정 라우팅 요구 사항을 고려하여 연결할 때 각 응용 프로그램이 제공한 기능을 기반으로 메시지를 라우팅

- 장기간 가치 있는 이벤트는 이벤트 소싱을 위해 저장되며 이벤트 스트리밍에 즉시 사용

Axon Framework

- 이벤트, 소싱/메시지 라우팅 작업에 필요한 전체 범위의 API 기능을 구현

- 모든 요구 사항을 처리하는 데 필요한 빌딩 블록을 제공

Kafka - 이벤트 소싱이 아닌 이벤트 스트리밍

LinkedIn에서 처음 개발되었고 현재 Apache 재단에서 Kafka는 기본적으로 3가지 주요 기능을 중심으로 하는 이벤트 스트리밍의 개념을 채택했습니다.

Kafka로 이벤트 소싱을 구현하려면 이벤트 저장소 역할을 하는 설계가 필요합니다. 하지만 이로 인해 집계 유형 및 인스턴스 전체 데이터 세트를 스캔해야 하기 때문에 이벤트 읽기가 매우 느려질 수 있습니다. 이런 기능 중 일부를 제공하기 위해 데이터베이스를 추가할 수 있지만 분산 트랜잭션 문제가 발생하며 문제 해결을 위해 Kafka Streams를 사용할 수 있습니다. Streams는 이벤트 스트림을 state stores로 제공합니다. 이는 분산 저장소의 문제를 해결하지만 현재 스냅샷만 저장합니다.

Kafka에서 제공하는 API는 이벤트 소싱(이벤트 게시/이벤트 처리)에 필요한 작업의 특정 하위 집합으로만 제한됩니다. 즉, 이벤트 소싱 인프라를 구현하기 위한 전체 기능을 제공하지 않음을 의미합니다.

Axon과 Kafka

Event Sourcing을 처음부터 구현하는 것은 복잡하며 제작된 엔터프라이즈급 플랫폼이 필요합니다. Kafka 플랫폼은 이벤트 소싱을 위한 것으로 보이지만 다양한 이벤트 소싱 문제가 구현되기 시작하며 Kafka가 즉시 제공하지 않거나 지원하지 않는 기능이 있음을 확인하게 됩니다. 이는 Kafka의 한계라고 치부할 수는 없습니다. Kafka는 이벤트 스트리밍 플랫폼이 될 목적으로 만들어졌고 그 역할을 충분히 해냅니다.

기업은 이벤트 소싱을 위해 Axon과 같은 플랫폼을 활용하는 것이 좋습니다. Axon의 강점은 서비스를 보다 자세한 수준에서 조정해야 하는 응용 프로그램 수준의 메시징이라는 것입니다 (예:주문 이행 도메인에서 함께 작동하는 서비스). 이러한 활동은 이벤트로 이어지며 그 중 일부는 그보다 더 중요하기도 합니다.

Axon은 Kafka와의 통합을 위해 Axon Framework의 일부로 Kafka커넥터를 제공합니다(https://docs.axoniq.io/reference-guide/extensions/kafka ). 커넥터의 목적은 Kafka를 사용하는 다운스트림 시스템에 이벤트 전달 책임을 위임하면서 목적에 맞게 구축된 이벤트 소싱 기능 및 명령/쿼리 메시지 처리를 위해 두 플랫폼의 장점을 활용하는 데 도움이 되는 것입니다.

다운스트림 시스템으로의 이벤트 전달을 위해 Kafka에 의존하는 Axon 애플리케이션과의 통합에 대한 설명은 아래 그림을 참고해주세요.

Axon과 Kafka - 두 가지 다른 목적

요약하면, Axon과 Kafka는 Event-Driven Architecture 공간 내에서 다른 목적을 수행합니다. Axon은 도메인 모델링 및 이벤트 소싱 그리고 명령, 이벤트 및 쿼리의 라우팅을 위한 애플리케이션 수준 지원을 제공하고 Kafka는 이벤트를 완벽히 수행합니다.

간단한 요약 내용은 아래 표를 살펴봐주세요.

출처 : OSC Korea - MSA에서 조금 쉽게 트랜잭션(Transaction) 처리하기

전체 내용은 AxonIQ의 블로그에서 확인할 수 있습니다.

https://www.axoniq.io/blog/axon-and-kafka

Axon 웨비나 다시보기 - MSA에서 조금 쉽게 트랜잭션(Transaction) 처리하기

https://youtu.be/U_TvOgZXK8k