[Spring Boot] WebSocket과 Kafka로 실시간 채팅 구현

2025. 3. 18. 19:02· BE/Spring Boot
목차
  1. Kafka 라이브러리 추가
  2. Kafka 설정
  3. 실시간 채팅 구현 (WebSocket, Kafka)
728x90

Kafka 라이브러리 추가

build.gradle에 추가

implementation 'org.springframework.kafka:spring-kafka'

 


Kafka 설정

application.yml 설정

데이터를 주고받을 때는 같은 데이터 타입으로 주고받아야 한다.

string으로 보냈으면 string으로, JSON으로 보냈으면 JSON으로 

 

bootstrap-servers에는 카프카 서버 IP 주소를 적어준다.

# String으로 받기
spring:
kafka:
bootstrap-servers: 10.10.10.123:9092
consumer:
group-id: psy-group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
# JSON일 때는
# org.springframework.kafka.support.serializer.JsonDeserializer
# org.springframework.kafka.support.serializer.JsonSerializer

 


실시간 채팅 구현 (WebSocket, Kafka)

웹 소켓과 카프카를 연동하여 실시간 채팅을 구현한다.

 

카프카로 객체를 보낼 수 있게 의존성을 주입하고,

카프카로부터 메시지를 받는 기능을 만든다.

 

 

클라이언트가 웹 소켓에 연결하면 sessions 리스트에 저장한다.

클라이언트가 메시지를 보내면 카프카 'chat' 토픽으로 전달한다.

카프카에서 메시지를 수신하면, 모든 웹 소켓 세션에 메시지를 전송하여 실시간 채팅을 구현한다.

 

@Component
@RequiredArgsConstructor
public class MessageHandler extends TextWebSocketHandler {
// 카프카로 객체 보낼 수 있게 의존성 주입
private final KafkaTemplate<String, String> kafkaTemplate;
private final Set<WebSocketSession> sessions = new HashSet<>();
// 웹 소켓 연결 관리
@Override
public void afterConnectionEstablished(WebSocketSession session)throws Exception {
sessions.add(session);
System.out.println("클라이언트가 연결했다");
}
// 웹 소켓에서 받은 메시지를 Kafka로 전송
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
kafkaTemplate.send("chat", message.getPayload());
System.out.println(message + "메시지를 받았다.");
}
// 카프카로부터 메시지를 받아 웹 소켓으로 전송
@KafkaListener(topics = "chat", groupId = "psy-group")
public void getMessageFromKafka(ConsumerRecord<String, String> record) throws IOException {
for(WebSocketSession session : sessions) {
session.sendMessage(new TextMessage(record.value()));
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
System.out.println("클라이언트가 연결을 종료했다.");
}
}

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'BE > Spring Boot' 카테고리의 다른 글

[Spring Boot] Spring Cloud란? / Spring Cloud Gateway  (0) 2025.03.18
[Spring Boot] STOMP란? / 간단한 채팅방 구현  (0) 2025.03.18
[Spring Boot] 웹 소켓(Web Socket)을 사용해 실시간 채팅 구현  (0) 2025.03.17
[Spring Boot] 자주 쓰는 라이브러리 정리 (build.gradle)  (0) 2025.03.13
[Spring Boot] 로컬 환경에 파일 업로드 (multipart)  (0) 2025.03.03
  1. Kafka 라이브러리 추가
  2. Kafka 설정
  3. 실시간 채팅 구현 (WebSocket, Kafka)
'BE/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] Spring Cloud란? / Spring Cloud Gateway
  • [Spring Boot] STOMP란? / 간단한 채팅방 구현
  • [Spring Boot] 웹 소켓(Web Socket)을 사용해 실시간 채팅 구현
  • [Spring Boot] 자주 쓰는 라이브러리 정리 (build.gradle)
셰욘
셰욘
셰욘
seiyeon
셰욘
전체
오늘
어제
  • 분류 전체보기 (176)
    • 알고리즘 (46)
      • 프로그래머스 (2)
      • 백준 (37)
      • 문제 유형 (7)
    • CS (41)
      • Linux (6)
      • DB (15)
      • 자료구조 (3)
      • OOP (2)
      • 아키텍처 (0)
    • BE (42)
      • Java (9)
      • Spring Boot (32)
    • FE (6)
      • Next.js (1)
      • JavaScript (5)
      • Vue.js (7)
      • Web (0)
    • 배포 (5)
    • 회고 (19)
      • BEYOND SW 캠프 (19)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 블로그 관리

공지사항

인기 글

태그

  • 리눅스
  • 그리디
  • 우선순위 큐
  • vue
  • 트리
  • 구현
  • dfs
  • bfs
  • web
  • 주간회고
  • 백트래킹
  • 실습
  • 알고리즘
  • DP
  • cs
  • 회고
  • 티스토리챌린지
  • js
  • 프로그래머스
  • fe
  • Gateway
  • 네트워크
  • 백준
  • spring boot
  • Java
  • db
  • 오블완
  • be
  • AWS
  • 자료구조

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
셰욘
[Spring Boot] WebSocket과 Kafka로 실시간 채팅 구현
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.