본문 바로가기
전공공부

Kafka를 활용한 비동기 시스템

by 시아나 2026. 3. 14.

이번 프로젝트에서 Apache Kafka를 활용하여
MSA(MicroService Architecture)에서 비동기처리를 한다고 한다.

근데 Kafka.. AWS 자격증 시험에서 본거 같은데 왜 얘로 비동기 처리를 하지 궁금해서
Kafka가 뭐하는 친구인지 어떻게 왜 비동기처리를 얘로 할 수 있는지 공부해보려고한다.

 

Kafka란 무엇인가

Apache Kafka는 실시간으로 스트림 데이터를 수집하고 처리하는데 최적화된
분산 이벤트 스트리밍 플랫폼(Distributed Data Streaming Platform)이다.

 

Kafka란? - Apache Kafka 설명 - AWS

Apache Kafka란? 기업에서 Apache Kafka를 사용하는 이유, AWS에서 Apache Kafka를 사용하는 방법.

aws.amazon.com

 

 

용어가 조금 이해가 안되어서 다시 설명해보겠다.

"스트리밍 데이터"는 수천개의 데이터 원본에서 연속적으로 생성되는 데이터이다. 
쉽게 말하면 주식 데이터, 로그 데이터, 배달 어플 위치데이터와 같은 실시간성 데이터이다. 

"분산 이벤트 스트리밍 플랫폼"은 수많은 시스템에서 발생하는 이러한 스트리밍 데이터를 여러 대의 서버에 나누어 안전하고 빠르게 처리하는 물류센터 느낌의 플랫폼이다.

Kafka는 주로 두 애플리케이션 간의 통신을 처리하고 중재하는 솔루션으로 자주 사용된다.

 

Kafka는 어떻게 등장하게 되었나.

kafka는 사실 우리가 잘 아는 링크드인(Linkedin)이라는
기업의 내부 문제 해결을 위해 만들어진 솔루션이다.

Kafka가 없던 시절에는
각 서비스간에 직접연결을 통해 서비스를 주고 받았다.

그러자 서비스가 늘어날 수록 서비스간 연결이 기하급수적으로 많아졌고
한 서비스의 연결방식을 변경하면 다른 서비스의 코드를 수정해야 했다.

또한 데이터 흐름 파악이 어려웠고
시스템 하나에 장애 발생시 연쇄적으로 장애가 발생하는 현상이 발생하였다.

그래서 링크드인의 개발자 중 한명이
이벤트 데이터를 한곳으로 모으고 필요한 곳에서 알아서 가져가게 하자는 아이디어를 내었고

그것이 Kafka 중앙 집중형 플랫폼입니다.

Kafka엄청난 처리량의 데이터를 처리할 수 있어야 했고
데이터가 늘어날 경우의 확장성도 좋았어야 했으며,
데이터를 단순히 전달만 하지 않고 저장하여 필요할 때 언제든 다시 읽을 수 있었어야 했습니다.

이러한 Kafka는 현재는 넷플릭스, 우버, 배민과 같은 기업들에서도 사용하고 있다.

넷플릭스에서는 실시간 추천 시스템, 시청 목록 동기화 같은 시스템에서
우버는 실시간 매핑, 실시간 트래픽 분석을 통한 요금조정 등에 사용하고
배민은 주문 완료 시 가게 사장 앱, 배달 시스템 등 여러 시스템에 이벤트를 전파할 때 kafka를 사용한다.

이렇든 Kafka는 로그 수집, 데이터 파이프라인(데이터 전달), 실시간 분석(데이터 즉시 처리)
등의 분야에서 많이 사용되고 있다.

 

Kafka는 어떻게 대용량 데이터를 처리할까?

1. Kafka는 하나의 Topic 별로 partition을 여러개로 나누어 데이터를 처리한다.
차선을 여러개 만들어서 데이터 이동속도를 높이는 것이다.

2. 데이터 저장시 빈공간을 찾지 않고 기존 데이터의 맨 뒤에 데이터를 이어 붙인다.

3. 데이터 전송시 CPU의 개입을 최소화하기 위해 애플리케이션 영역을 거치지않고
디스크에서 바로 네트워크로 직접 데이터를 전송한다.

데이터를 파일 시스템에 저장하고
최신 데이터를 OS 캐시에 올려 빠르게 접근한다는데 이건 나중에 자세히 공부해보도록 하겠다.

즉 Kafka는

들어오는 메시지의 header 부분을 보고 맞는 topic으로 데이터를 보낸다.
topic에서는 들어온 데이터를 partition으로 분배하고
데이터를 가져가는 시스템은 partition의 맨 처음부터 데이터를 가져간다.

Kafka는 내용물을 보지 않고 header 데이터만으로 데이터 분류 전송을 하기 때문에
데이터를 더 빠르게 전송할 수 있다.

 

kafka를 통한 MSA에서의 비동기 처리 방식

하나의 시나리오를 예시로 들겠다

만약 당신이 모바일 은행 앱에서 "정기 적금 상품" 가입을 하려고 한다.

처리는 계약 시스템에서 하지만
"고객 시스템" 에서 고객 상태 조회 API를 호출해야하고
"계약 시스템"에서 계약 데이터를 생성해야하고
"알림 시스템"에서 고객에게 완료 알림을 보내야 한다고 하자.

정기 적금 상품 가입 요청 API가 호출되면

계약 시스템은 고객 상태조회를 위해 kafka에 고객 상태 조회를 위해
고객확인 토픽 에 이벤트를 발생시킨다.

고객확인  토픽을 구독(Consume) 하고 있던 고객 시스템이 고객 데이터를 조회하고
계약 토픽(join-request) 에 이벤트를 발생시킨다.

계약 토픽 토픽을 구독하고 있던 계약 시스템은 메시지를 받아
계약 데이터를 생성하고 알림 토픽에 이벤트를 발생시킨다.

마지막으로 알림 토픽을 구독하고 있던 알림 시스템에서 메시지를 받아
계약 완료 알림을 전송한다.

 

'전공공부' 카테고리의 다른 글

SQL 튜닝을 위한 6가지 기본 방법  (0) 2026.04.11
쿼리 튜닝에 대하여(기초)  (0) 2026.03.29
CORS에는 왜 CSRF와 XSS가 따라 나올까  (0) 2026.02.21
CORS 너는 누구인가  (0) 2026.02.07
Nginx란 무엇인가?  (1) 2026.01.10