개념
Kafka란?
Apache Kafka는 오픈소스 분산 이벤트 스트리밍 플랫폼으로, 수천 개의 기업들이 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 그리고 핵심적인 애플리케이션을 위해 사용하고 있습니다…
- 이벤트: 비즈니스에서 무언가 발생했다는 사실 기록이며, 레코드, 메시지, 데이터라고도 함
- 이벤트 스트리밍: 실시간으로 이벤트 스트림 형태의 데이터를 수집하고, 내구성 있게 저장하며 조작 및 처리를 할 수 있는 방식
즉 Kafka는 실시간으로 스트리밍 데이터를 수집하고 처리하는 데 최적화 된 분산 데이터 저장소이다.
kafka의 구조
관련 개념
코문철에 적용
이벤트 아키텍쳐 도입 배경
코문철은 서비스 고도화에 따라 AI 레퍼런스, 채팅, MVP 선정, 티어 계산, 분석 등 다양한 부가 기능이 지속적으로 추가되고 있다. 이 과정에서 다음과 같은 문제가 발생한다.
<aside>
🚨
문제점
- 복잡도 증가: 새로운 기능이 추가될 때마다 핵심 배틀 엔진에 코드가 계속 누적되어 시스템이 비대해지고 유지보수가 어려워진다.
- 배틀 가용성 저하: 부가 기능 중 하나라도 장애가 발생하면 핵심 비즈니스인 배틀 프로세스 전체가 중단될 수 있다.
</aside>
배틀 진행과 대부분의 부가 기능은 반드시 동일한 시점에 처리되어야 하는 강한 일관성을 요구하지 않는다. 중요한 것은 배틀 상태 변경 사실이 전달되고, 각 기능이 이를 기반으로 언젠가 반영하면 된다.
따라서 배틀은 배틀만 하고, 상태 변경 사실을 이벤트로 발행하자. 각 부가 기능은 필요한 이벤트를 구독하여 독립적으로 처리하는 이벤트 기반 아키텍처를 도입하자.
<aside>
😇
기대효과
- 복잡도 감소: 배틀 도메인은 배틀만 하므로 도메인 간 결합도를 낮추고 기능 확장을 용이하게 할 수 있다.
- 소비자 결합도 감소: 이벤트에 필요한 정보를 함께 포함한 스냅샷 형태로 전달하므로 소비자가 DB를 조회할 필요가 줄어든다.
- 히스토리 파악 용이: Kafka에 누적되는 이벤트 로그를 활용하여 모니터링, 통계 분석, 사용자 행동 분석, 추천 시스템 등 다양한 기능을 추가적으로 구축할 수 있다.
</aside>
Kafka를 적용하는 이유
1️⃣ 배틀 이벤트 순서 보장