메세지 지향 미들웨어(MOM)
메시지 지향 미들웨어란 응용 소프트웨어 간의 비동기적 데이터 통신을 위한 소프트웨어이다.
메시지 지향 미들웨어는 메시지를 전달하는 과정에서 보관하거나 라우팅 및 변환을 할 수 있다는 장점을 가진다.
메시지 큐(Message Queue)
메시지 큐(Message Queue)란 큐(Queue) 형태에 데이터를 일시적으로 저장하는 임시 저장소를 의미한다.
메시지 큐를 활용하면 비동기적(Asynchronous)으로 데이터를 처리할 수 있어서 효율적이다.
여기서 비동기적으로 데이터를 처리한다는 것의 의미는 A와 B라는 작업을 수행할때 A작업을 시작한 직후에 B작업도 바로 시작하는것을 의미한다.
반면 동기적 처리(Synchronous)는 A작업이 다 끝날 때 까지 기다리고 B를 처리하는 방식을 말한다.
REST API 방식의 통신과 메시지 큐를 활용한 통신을 비교해보자.
REST API 통신
REST API 통신은 요청을 보내면 서버에서 모든 작업을 수행 할 때까지 기다린 후 응답을 사용자에게 보낸다.
Message Queue
메시지 큐의 경우 동기적 처리를 하는 REST API 통신 방식과 다른데, 과정은 다음과 같다.
- 사용자가 REST API 방식으로 요청을 보낸다.
- 요청을 받은 서버는 메시지 큐에 전달할 메시지를 만들어 전달 (이 서버를 Producer라고 한다.)
- Producer 서버는 메시지 큐에 메시지를 넣자마자 사용자에게 성공 응답을 보낸다.(비동기 방식 처리)
- 메시지 큐에 메시지(요청)를 보관.
- Consumer 서버가 메시지 큐에 들어있는 메시지(요청)를 꺼내서 실제 작업(메시지를 꺼내서 처리하는 서버를 Consumer서버라 한다.)
Kafka란?
Kafka(카프카)는 대규모 데이터를 처리할 수 있는 메시지 큐이다.
Kafka는 기본적으로 Topic, Consumer, Producer로 구성되어있다.
Producer
- Kafka에 메시지를 전달하는 주체이다.
- 원하는 Topic에 메시지를 전송한다.
Consumer
- Kafka의 메시지를 처리하는 주체이다.
- 구독(Subscribe)한 Topic의 데이터를 처리한다.
Topic
- Kafka에 넣을 메시지의 종류를 구분하는 개념이다.
Topic 생성, 조회
<Topic 생성>
bin/kafka-topics.sh --bootstrap-server <kakfa 주소> --create --topic <토픽명>
<Topic 조회>
bin/kafka-topics.sh --bootstrap-server <kakfa 주소> --list
<Topic 삭제>
bin/kafka-topics.sh --bootstrap-server <kafka 주소> --delete --topic <토픽명>
위 명령어를 사용하여 Topic 생성, 조회, 삭제까지 해봤다.
메시지 넣기, 메시지 조회
<메시지 넣기>
# email.send라는 토픽에 메시지 넣기
$ bin/kafka-console-producer.sh \
--bootstrap-server localhost:9092 \
--topic email.send
위 명령어를 사용하면 메시지 내용을 입력할 수 있는 칸이 나오고 원하는 값을 입력하고 Enter를 누르면 된다.(종료 : Ctrl + c)
메시지 생성을 할때 Consumer에서 메시지를 조회하게 되면 실시간으로 Consumer에서 메시지 조회가 가능하다.
# email.send라는 토픽에 있는 메시지 꺼내기
$ bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic email.send \
--from-beginning
Kafka Offset
Kafka는 컨슈머 그룹(Consumer Group)이라는 개념을 활용하여 각 컨슈머 그룹이 어디까지 메시지를 읽었는지 Offset이라는 번호로 기록한다.
- Offset은 메시지의 순서를 나타내는 고유 번호
- Offset은 0부터 시작
- Topic에 저장된 메시지는 고유 번호인 Offset을 가지고 있다.
- Consumer Group은 1개 이상의 Consumer를 가질 수 있다.
- Consumer Group에서 메시지를 어디까지 읽었는 지에 대한 정보(CURRENT-OFFSET)를 저장하고 있다.
# 컨슈머 그룹 세부 정보 조회하기
$ bin/kafka-consumer-groups.sh \
--bootstrap-server localhost:9092 \
--group email-send-group \
--describe
위 명령어를 통해 Consumer Group의 세부 정보를 조회하면 OFFSET 정보를 확인 가능한데,
아래 사진에서 CURRENT-OFFSET이 5로 되어있다는 것은 0~4까지의 메시지를 읽었고, 다음으로 읽을 메시지의 OFFSET이 5라는 의미이다.
아래 명령어를 통해 실제로 CURRENT-OFFSET 부터 메시지를 읽는 것을 확인 가능하다.
bin/kafka-console-consumer.sh \
--bootstrap-server localhost:9092 \
--topic email.send \
--group email-send-group \
--from-beginning
'BackEnd > Kafka' 카테고리의 다른 글
[Kafka] Kafka 메시지 처리 성능 향상 (Partition) (0) | 2025.08.15 |
---|---|
[Kafka] Dead Letter Topic (2) | 2025.08.14 |
Spring Boot + Kafka 메시지 테스트 (2) | 2025.08.14 |