상세 컨텐츠

본문 제목

[Kafka] MSA에서 Kafka가 필요한 이유 | 구조, 동작방식, 장단점

Development Study/대용량 트래픽 처리

by yooputer 2025. 4. 17. 14:56

본문

손님이 별로 없는 한적한 카페에서 혼자 일하는 알바생을 생각해보자. 

혼자 주문받고, 원두 갈고, 커피 내리고, 포장하고, 설거지하고, 모든 일을 다 해야만 한다. 

이게 가능한 이유는 손님이 별로 없기 때문이다. 

 

혼자 일하고 있는데 갑자기 손님이 갑자기 1000명이 오면 어떻게 될까? 

알바생은 기절하고 혼수상태에 빠질 것이다. 🤯

1000명의 손님을 감당하기 위해서는, 여러명의 알바생이 분업하여 일하는게 가장 효과적일 것이다. 

주문 받는 사람 여러명, 음료 만드는 사람 여러명, 설거지하는 사람 여러명 이런식으로 말이다. 

 

내가 이러한 예시를 드는 이유는 MSA에 대해 설명하고 싶었기 때문이다. 

오늘날의 많은 서비스들은 수많은 유저들의 트래픽을 감당하기 위해 MSA라는 아키텍쳐를 채택했다. 

MSA란 알바생들이 분업한것과 같이 프로그램들이 분업을 하고 서로 협력하여 서비스를 이루는 구조이다. 

주문만 처리하는 서비스, 발송만 처리하는 서비스, 상품 관리만 처리하는 서비스 등 역할을 나누고 그 역할만 수행하는 것이다. 

 

이렇게 분업을 했을때의 장점은 명확하다. 

알바생이 갑자기 아플 때 빠르게 교육하여 투입할 수 있고, 다른 알바생들에게 피해를 주지 않는다. 

알바생들은 자신이 담당하는 업무만 하기 때문에 더 효율적으로 일할 수 있다. 

프로그램도 마찬가지다. 주문을 담당하는 서버가 죽으면 새로운 서버를 빠르게 빌드하여 서버를 띄울 수 있고, 

주문이 폭등하여 주문서버가 느려져도 상품을 조회하는 서버에는 영향이 없으며, 주문서버를 증축하면 된다. 

 

하지만 단점도 존재한다. 

알바생이 너무 많아지면 의사소통이 제대로 안되어 주문이 누락되거나 잘못 처리되는 일이 생길 수도 있다. 

이때 진두지휘할 사람이 필요하다. 마치 파인다이닝 식당의 셰프처럼 말이다. 

 

이처럼 MSA에서도 서비스들이 서로 원활히 협력할 수 있도록 도와주는 존재가 필요하다. 

그 중 하나가 Kafka이다. 


Kafka란 무엇인가?

Kafka는 분산형 이벤트 스트리밍 플랫폼이다.

 

이벤트 스트리밍 플랫폼이란 무엇일까? 

마이크로서비스에서는 실시간으로 엄청나게 많은 이벤트들이 쏟아진다. 

그리고 이러한 이벤트들을 분실 없이, 중복처리 없이 처리해야만 한다. 

이러한 처리를 위해 이벤트들이 잠시 머물 공간이 필요한데, 그 공간이 바로 이벤트 스트리밍 플랫폼이다. 

 

이벤트 스트리밍 플랫폼은 이벤트가 생성된 서비스로부터 이벤트를 받고,

해당 이벤트를 처리해야하는 서비스에게 이벤트를 제공하는 역할을 한다. 

그리고 Kafka는 이러한 역할을 분산하여 처리하기 때문에 빠르게 동작할 수 있다. 

 

 

 

마이크로서비스의 통신 과정 중간에 Kafka가 존재함으로써 

더이상 마이크로서비스들은 어떻게 서로 통신할 지 신경쓰지 않아도 된다. 


Kafka의 구조, 동작 방식

앞서 말했듯 Kafka는 마이크로서비스들이 통신하기 위해 중간에서 메세지(이벤트)들을 전달하는 역할을 한다. 

이때 메세지를 보내는 서비스를 Producer(생산자)라 하고 메세지를 받는 서비스를 Consumer(소비자)라 한다.

 

Producer가 Consumer에게 전달하는 메세지를 보관하기 위해서 Message Queue를 사용한다. 

성능을 위해 여러개의 Message Queue가 존재하고, 이러한 Message Queue를 관리하는 Broker가 존재한다. 

처리하는 데이터가 많아질수록 Brocker 또한 늘어난다. 

그리고 이러한 Brocker들의 집합을 Kafka Cluster라고 부른다(ZooKeeper라는 Broker 관리자도 이에 포함된다)

 

Producer가 Consumer에게 전달하는 메세지의 종류를 구분하기 위해 Topic이라는 개념을 사용한다. 

상품주문 서비스에서 '주문 생성'이라는 Topic에 대해 새로운 메시지가 발생했다면, 

상품발송 서비스는 새로 생성된 '주문 생성' 토픽에 대한 메시지를 수신하는 방식이다. 

 

한 토픽에 대해 효율적으로 처리하기 위해 partition이라는 물리적인 단위로 나눈다. 

consumer은 partition 단위로 데이터를 처리한다. 


Kafka 장점

카프카는 '분산형' 이벤트 스트리밍 플랫폼이기 때문에 처리량이 높다. (분산해서 처리하니까)

처리해야하는 메시지(이벤트)가 많아지만 Brocker를 늘려 처리하면 되므로 확장성이 높다. 

또한 이 포스팅에서 설명하지는 않았지만 장애가 발생했을 때 이를 복구하기 위한 복제 기능이 있다. 

따라서 장애가 발생하여도 안정적으로 시스템이 동작할 수 있기 때문에 가용성이 높다. 

 

Kafka 단점

Kafka를 포함한 환경을 구축하기 어렵다. 

또한 이를 관리하고 유지하는 비용이 높아진다. 

마이크로서비스들간의 트랜잭션 처리가 필요한 경우 로직이 복잡해 질 수 있다. 

 

 

 

관련글 더보기