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

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

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

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

[실습] Spring Boot로 Kafka에서 메시지 조회하기 (Consumer)

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
practice-consumer-code-with-spring-boot
type
post
updatedAt
Dec 6, 2025 05:39 AM

✅ Spring Boot로 Kafka에서 메시지 조회하기 (Consumer)

notion image
위 그림과 같이 Consumer 역할을 하는 Spring Boot 서버를 추가로 만들어 Kafka에 들어있는 메시지를 처리해보자.
 
  1. Spring Boot 프로젝트 셋팅
    1. start.spring.io
      https://start.spring.io/
      notion image
      • Artifact와 Name을 email-send-consumer라고 지어주자.
      • Package name을 emailsendconsumer라고 지어주자.
      • Java 21 버전을 선택하자. 아래 과정을 Java 21 버전을 기준으로 진행할 예정이다.
      • Dependencies는 Spring Boot DevTools, Spring Web, Spring for Apache Kafka를 선택해라.
       
  1. application.yml에 Kafka 연결을 위한 정보 작성하기
    1. 이 프로젝트에서는 application.properties를 지우고 application.yml을 생성했다.
      application.yml
      server: port: 0 # 사용 가능한 랜덤 포트를 찾아서 서버를 실행 (Producer 서버와의 포트 충돌을 방지) spring: kafka: # Kafka 서버 주소 (EC2에 카프카를 설치했기 때문에 EC2 주소를 입력해야 한다.) bootstrap-servers: 15.164.96.71:9092 consumer: # 메시지의 key 역직렬화 방식 : Kafka에서 받아온 메시지를 String으로 변환 key-deserializer: org.apache.kafka.common.serialization.StringDeserializer # 메시지의 value 역직렬화 방식 : Kafka에서 받아온 메시지를 String으로 변환 value-deserializer: org.apache.kafka.common.serialization.StringDeserializer # 컨슈머 그룹이 미리 안 만들어져있는 경우에, 컨슈머 그룹을 직접 생성해서 메시지를 처음부터 읽음. # 만약 컨슈머 그룹이 이미 만들어져있다면, 해당 컨슈머 그룹이 읽었던 메시지부터 읽음. # 이 옵션을 주지 않으면 컨슈머 그룹을 직접 생성해서 메시지를 읽을 때, # 기존에 쌓여있던 메시지를 읽지 않고 컨슈머 그룹이 생성된 이후에 들어온 메시지부터 읽어버린다. # 그럼 컨슈머 그룹이 생성되기 전에 쌓여있던 메시지들이 처리되지 않고 누락돼버린다. auto-offset-reset: earliest
       
  1. Kafka의 메시지를 가져와 담을 객체 만들기
    1. EmailSendMessage (Kafka로부터 전달받는 메시지의 정보를 담을 객체)
      public class EmailSendMessage { private String from; // 발신자 이메일 private String to; // 수신자 이메일 private String subject; // 이메일 제목 private String body; // 이메일 본문 // 역직렬화(String 형태의 카프카 메시지 -> Java 객체)시 필요함 public EmailSendMessage() { } public EmailSendMessage(String from, String to, String subject, String body) { this.from = from; this.to = to; this.subject = subject; this.body = body; } // Json 값을 EmailSendMessage로 역직렬화하는 메서드 public static EmailSendMessage fromJson(String json) { try { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(json, EmailSendMessage.class); } catch (JsonProcessingException e) { throw new RuntimeException("JSON 파싱 실패"); } } public String getFrom() { return from; } public String getTo() { return to; } public String getSubject() { return subject; } public String getBody() { return body; } }
       
      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); // ... 실제 이메일 발송 로직은 생략 ... System.out.println("이메일 발송 완료"); } }
      • 선언한 컨슈머 그룹이 없으면 컨슈머 그룹을 생성해서 메시지를 읽어들인다.
      • 컨슈머 그룹을 활용해서 메시지를 읽기 때문에, 어디까지 메시지를 읽었는 지도 Kafka에 같이 저장된다. 이 덕분에 순차적으로 메시지를 읽어나가면서 처리하게 된다.
 
 

✅ 잘 작동하는 지 테스트해보기

  1. Spring Boot 서버 실행시키기
    1. notion image
      Kafka의 email.send 토픽에 쌓여있던 메시지를 가져와 처리한 걸 확인할 수 있다.
       
  1. API 요청을 통해 Kafka에 메시지를 추가로 넣어보기
    1. Producer 역할을 하는 Spring Boot에 API 요청을 보내 Kafka에 실시간으로 메시지를 넣어보자.
      notion image
      notion image
      Consumer 역할을 하는 Spring Boot 서버가 Kafka의 email.send 토픽에 쌓인 메시지를 실시간으로 처리하는 걸 확인할 수 있다.
       
  1. CLI로 Consumer Group 확인해보기
    1. # 컨슈머 그룹 세부 정보 조회하기 $ bin/kafka-consumer-groups.sh \ --bootstrap-server localhost:9092 \ --group email-send-group \ --describe
      notion image
      CURRENT-OFFSET(다음에 읽을 메시지의 오프셋 번호)이 2이므로 0~1의 오프셋 메시지는 이미 읽었다는 뜻이다. 이 출력값을 보니 컨슈머 그룹이 정상적으로 잘 작동했다는 걸 확인할 수 있다.
       
       

✅ 그림 보면서 전체 흐름 정리하기

notion image
이전에 API 요청을 통해 Producer 서버를 거쳐 Kafka의 email.send 토픽에 메시지를 쌓아뒀다. 그러고 Consumer 서버가 email.send 토픽에 쌓여있는 메시지를 하나씩 읽어들이면서 처리했다.
 
 
👨🏻‍🏫
지금까지 Spring Boot를 활용해 Kafka의 전체 흐름을 맛봤다. 이게 Spring Boot에서 Kafka를 활용하는 기본적인 뼈대이다. 지금까지 배운 Kafka의 기본적인 뼈대에 살점을 하나씩 덧붙여보자.
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 05:39 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.