JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

Kafka의 비동기 처리로 인한 성능 이점 느껴보기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
kafka-async-performance-benefit
type
post
updatedAt
Dec 6, 2025 05:39 AM

✅ 이전 강의 복습

(
📖
Kafka란? / 메시지 큐(Message Queue)란?
)
이전 강의에서 REST API 방식은 요청을 보낸 뒤에 모든 작업이 다 처리될 때까지 기다렸다가 응답을 받는 식으로 통신을 한다고 얘기했다. 그래서 만약 이메일 발송을 처리하는 데 시간이 오래 걸린다면 사용자는 늦게 응답을 받을 수 밖에 없다.
notion image
 
하지만 메시지 큐를 활용한 통신 방식은 비동기적으로 작업을 처리하기 때문에 모든 작업이 다 처리되는 것과 상관없이 빠르게 응답을 받을 수 있다고 설명했다. 정말 그런지 확인해보자.
notion image
 
 
 

✅ Kafka의 비동기 처리로 인한 성능 이점 느껴보기

  1. Consumer 서버 코드 수정하기
    1. 이메일 발송을 처리하는 데 시간이 오래걸리는 걸 가정하기 위해 아래 코드를 추가해주자.
      EmailSendConsumer
      @Service public class EmailSendConsumer { @KafkaListener( topics = "email.send", groupId = "email-send-group" // 컨슈머 그룹 이름 ) public void consume(String message) { System.out.println("Kafka로부터 받아온 메시지: " + message); EmailSendMessage emailSendMessage = EmailSendMessage.fromJson(message); // ... 실제 이메일 발송 로직은 생략 ... try { Thread.sleep(3000); // 이메일 발송을 하는 데 3초가 걸린다고 가정 } catch (InterruptedException e) { throw new RuntimeException("이메일 발송 실패"); } System.out.println("이메일 발송 완료"); } }
      위와 같이 코드를 작성한 뒤에 서버를 재실행시켜주자.
       
  1. 이메일 발송 API 요청 보내보기
    1. notion image
      이메일 발송에 3초가 걸리더라도, 메시지 큐를 사용하면 API는 Kafka에 메시지를 넣고 25ms 내외로 바로 응답할 수 있다. 덕분에 사용자 입장에선 처리 시간이 느리다는 걸 전혀 체감하지 못한다.
       
      notion image
      그리고 Consumer 서버의 로그를 보면 API 요청을 보내고 나서 3초 뒤에 ‘이메일 발송 완료’라는 로그가 찍히는 걸 확인할 수 있다.
       
Kafka의 비동기 처리 덕분에 사용자 입장에서는 빠르게 응답을 받아볼 수 있었다. 이로써 사용자가 서비스를 활용함에 있어서 불편함을 겪는 걸 방지할 수 있다.
 
 

✅ 비동기로 처리하면 Consumer가 제대로 작업을 처리했는 지 어떻게 확신할 수 있을까?

notion image
기존에 REST API 방식을 활용해 동기적으로 처리할 때는 이메일 발송 처리 작업이 끝날 때까지 기다렸다가 응답을 한다. 그러다보니 비교적 응답 속도가 느릴 수 밖에 없다. 그리고 이메일 발송 처리 작업이 끝난 뒤에 응답을 하기 때문에, 이메일 발송의 성공 여부를 확인하고 그에 맞게 응답을 할 수 있다.
 
notion image
Kafka와 같은 메시지 큐를 활용한 비동기 처리는 사용자에게 빠르게 응답을 줄 수 있다는 큰 장점이 있다. 실제로 이메일 발송처럼 시간이 오래 걸리는 작업도 Kafka에 메시지만 넣고 바로 응답할 수 있기 때문에, 사용자 입장에서는 기다림 없이 빠르게 처리가 된 것처럼 느껴진다. 하지만 이 구조는 한 가지 중요한 한계를 가지고 있다.
 
바로 사용자에게 작업의 실제 성공 여부를 확인하지 않고 응답을 먼저 보내버린다는 점이다. 예를 들어, 이메일 발송 요청을 Kafka에 메시지로 넣고 25ms 만에 성공 응답을 보냈지만, 이후 Consumer 쪽에서 잘못된 이메일 주소로 인해 이메일 발송 도중 실패가 발생할 수 있다. 이 때는 이미 사용자에게 성공 응답을 보낸 상태이기 때문에 실패를 다시 사용자에게 알려줄 방법이 없다.
 
이러한 비동기 구조의 단점을 보완하기 위해 시스템에서는 다양한 보완 전략을 사용한다. 대표적으로는 메시지 처리 중 실패가 발생했을 때 자동으로 재시도(retry)하는 방식, 여러 번의 재시도 끝에도 실패한 메시지를 별도로 보관하는 Dead Letter Topic(DLT)을 활용하는 방식을 주로 활용한다.
 
 
👨🏻‍🏫
다음 강의에서는 실패한 메시지를 재시도(retry) 하는 방법과 Dead Letter Topic(DLT)를 활용하는 방법에 대해 배워보자.
 
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 05:39 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.