Repository logo Repository

1. Kafka란?

Kafka의 의미를 검색해보면 Apache Kafka 공식 홈페이지에서 아래와 같이 설명한다.

Apache Kafka는 “open-source distributed event streaming platform”이다. [1]

입문자 입장에서 이 문장만 보면 이해하기가 어렵다. 처음에는 아래처럼 이해하면 된다.

Kafka는 대규모 데이터를 처리할 수 있는 메시지 큐이다.

정확히 말하면 Kafka는 단순한 큐 하나만 제공하는 도구라기보다 이벤트 스트리밍 플랫폼이다. 하지만 입문 단계에서는 Kafka를 “많은 데이터를 메시지 형태로 받아서 저장하고, 다른 서버가 꺼내 처리할 수 있게 도와주는 도구”라고 이해하면 된다.

이 의미를 제대로 이해하려면 먼저 메시지 큐가 무엇인지 알아야 한다.


2. 메시지 큐(Message Queue)란?

메시지 큐(Message Queue)는 메시지를 잠시 저장해두는 공간이다.

여기서 메시지는 서버끼리 주고받는 데이터라고 보면 된다. 예를 들어 이메일 발송 요청, 주문 처리 요청, 로그 데이터, 알림 발송 요청 같은 정보가 메시지가 될 수 있다.

큐(Queue)는 먼저 들어온 데이터가 먼저 나가는 구조이다. 그래서 메시지 큐는 아래처럼 동작한다고 이해하면 된다.

메시지 1 -> 메시지 2 -> 메시지 3

먼저 들어온 메시지를 먼저 꺼내 처리하는 구조이다.

AWS SQS 문서는 분산 메시징 시스템의 구성 요소로 메시지를 보내는 Producer, 메시지를 받는 Consumer, 메시지를 보관하는 Queue를 설명한다. [2] 이 구조를 입문자용으로 정리하면 아래와 같다.

구성 요소 의미
Producer 메시지를 만들어 큐에 넣는 서버
Queue 메시지를 잠시 보관하는 저장소
Consumer 큐에서 메시지를 꺼내 실제 작업을 처리하는 서버

3. 메시지 큐를 사용하는 이유

메시지 큐를 사용하는 가장 큰 이유는 작업을 비동기적으로 처리하기 위해서이다.

동기적 처리는 A 작업이 끝난 뒤에 B 작업을 처리하는 방식이다.

A 작업 시작 -> A 작업 완료 -> B 작업 시작

비동기적 처리는 A 작업을 맡겨둔 뒤, A 작업이 끝날 때까지 기다리지 않고 다음 흐름을 진행하는 방식이다.

A 작업 요청 -> 바로 다음 흐름 진행

예를 들어 회원가입을 하면 이메일을 보내야 한다고 해보자.

이메일 발송이 끝날 때까지 사용자를 기다리게 만들 수도 있다. 하지만 이메일 발송은 시간이 걸릴 수 있다. 그럴 때 서버는 이메일 발송 요청을 메시지 큐에 넣고 사용자에게는 먼저 성공 응답을 줄 수 있다.

그러면 실제 이메일 발송은 Consumer 서버가 나중에 메시지를 꺼내서 처리한다.


4. REST API 방식으로만 처리하는 경우

먼저 메시지 큐 없이 REST API 방식으로만 처리한다고 생각해보자.

사용자 -> 서버 -> 이메일 발송 처리 -> 사용자에게 응답

이 방식에서는 서버가 이메일 발송을 끝낸 뒤에 사용자에게 응답한다. 이메일 발송이 오래 걸리면 사용자는 그만큼 기다려야 한다.

작업이 적을 때는 크게 문제가 되지 않을 수 있다. 하지만 요청이 많아지고 처리해야 할 작업이 무거워지면 서버가 응답을 늦게 줄 가능성이 커진다.


5. 메시지 큐를 활용한 처리 방식

메시지 큐를 활용하면 흐름이 달라진다.

사용자 -> Producer 서버 -> Message Queue -> Consumer 서버

과정을 하나씩 보면 아래와 같다.

  1. 사용자가 REST API 방식으로 요청을 보낸다.
  2. 요청을 받은 서버는 처리해야 할 내용을 메시지로 만든다.
  3. Producer 서버는 메시지를 Message Queue에 넣는다.
  4. Producer 서버는 메시지를 넣은 직후 사용자에게 성공 응답을 한다.
  5. Message Queue는 Producer 서버에게 받은 메시지를 보관한다.
  6. Consumer 서버는 Message Queue에서 메시지를 꺼내 실제 작업을 처리한다.

여기서 중요한 점은 Producer 서버가 실제 이메일 발송이 끝날 때까지 기다리지 않는다는 것이다. 메시지 큐에 메시지를 넣고 나면 사용자에게 먼저 응답한다.

이런 흐름 때문에 메시지 큐를 사용하면 시간이 오래 걸리는 작업을 분리해서 처리할 수 있다.


6. Producer와 Consumer

메시지 큐를 설명할 때 Producer와 Consumer라는 단어가 자주 나온다.

Producer는 메시지를 생산하는 서버이다.

Producer -> Message Queue

예를 들어 회원가입 요청을 받은 서버가 “이메일을 보내라”라는 메시지를 만들어 큐에 넣으면 그 서버가 Producer이다.

Consumer는 메시지를 소비하는 서버이다.

Message Queue -> Consumer

예를 들어 큐에 들어있는 이메일 발송 메시지를 꺼내 실제로 이메일을 보내는 서버가 Consumer이다.

이렇게 역할을 나누면 요청을 받는 서버와 실제 무거운 작업을 처리하는 서버를 분리할 수 있다.


7. Kafka와 메시지 큐

Kafka는 Producer가 보낸 메시지를 저장하고, Consumer가 그 메시지를 읽어 처리할 수 있게 해준다.

Producer -> Kafka -> Consumer

Kafka는 단순히 작은 작업 몇 개를 저장하는 용도보다는 많은 데이터를 안정적으로 다루는 상황에서 자주 사용된다. Apache Kafka 공식 홈페이지도 Kafka가 데이터 파이프라인, 스트리밍 분석, 데이터 통합, 중요한 애플리케이션에 사용된다고 설명한다. [1]

입문 단계에서는 아래처럼 정리하면 된다.

Kafka는 대규모 데이터를 처리할 수 있는 메시지 큐 역할을 하는 도구이다.

정확한 표현으로는 Kafka는 분산 이벤트 스트리밍 플랫폼이다. 하지만 처음 배울 때는 Producer, Queue, Consumer 흐름을 먼저 이해하는 것이 중요하다.


정리

메시지 큐(Message Queue)는 메시지를 잠시 저장해두는 공간이다. Producer는 메시지를 큐에 넣고, Consumer는 큐에서 메시지를 꺼내 처리한다.

메시지 큐를 사용하면 오래 걸리는 작업을 비동기적으로 분리해서 처리할 수 있다. Kafka는 이런 메시지 처리 흐름을 대규모 데이터 환경에서 사용할 수 있게 해주는 대표적인 도구이다.


출처

  1. Apache Kafka, “Apache Kafka”, https://kafka.apache.org/
  2. Amazon Web Services, “Amazon Simple Queue Service Developer Guide - Welcome”, https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html

« Kubernetes에서 외부 MySQL ...
Kafka Topic Producer C... »