<aside>
🌟
Spring Boot와 Kafka를 공부하며 진행한 개인 프로젝트입니다. 사용자는 채팅방을 검색하고, 채팅방에 들어가 다른 사용자와 이미지 전송을 포함한 실시간 채팅을 나눌 수 있으며, 새로운 채팅에 대한 알림을 받을 수 있습니다. Thymeleaf를 사용하여 프론트엔드를 구현하였으며, 무한 스크롤 동작을 구현하기 위해 QueryDSL을 사용하였습니다. 또, Amazon S3 서비스를 연동하여 이미지를 저장하도록 하였습니다.
</aside>
고독
🔍 About 고독한채팅방
👤 개인 프로젝트
📅 2025.06.06 - In progress
:github: https://github.com/chloeeekim/Godokbang
🛠️ 사용 기술 및 라이브러리
- JAVA
17
- Spring Boot
3.4.5
, Spring Security 6.4.5
, Thymeleaf 3.5.0
- Spring Data JPA
3.4.5
, QueryDSL 5.0.0
- H2
2.3.232
, Amazon S3 (Spring Cloud AWS 2.2.6.RELEASE
)
- Apache Kafka (Broker
3.9.1
), Spring Kafka Client 3.3.6
👩💻 구현 내용
- 사용자 인증 및 권한 관리 (Spring Security + Session)
- 회원가입, 로그인, 로그아웃 기능 구현
- 세션 기반 인증 시스템 구축
- Spring Security 필터 커스터마이징으로 요청별 인증 처리
BCryptPasswordEncoder
를 사용하여 비밀번호를 암호화하여 DB에 저장
- Kafka + WebSocket 기반 실시간 채팅 서비스 구현
- Apache Kafka와 WebSocket을 활용하여 실시간 채팅 메시지 송수신 기능 구현
- 메시지에 메타데이터(chatRoomId 등)를 포함시켜 메시지 라우팅 처리
KafkaTemplate
을 이용해 서버가 메시지를 Kafka에 발행(Publish), @KafkaListener
를 이용해 메시지 구독(Subscribe)
- 메시지의 타입(시스템 메시지, 텍스트 메시지, 이미지 등)을 명확히 구분하여 처리
- Kafka 메시지를 JSON 형태로 직렬화/역직렬화하여 데이터 일관성 유지
- 수신된 메시지는 WebSocket 세션을 통해 실시간으로 해당 사용자에게 전달
- 채팅 메시지는 DB에 저장하여 재접속 시 이전 메시지 히스토리 조회 가능
- Kafka + WebSocket 기반 알림(Notification) 시스템 구현
- Kafka의 토픽을 채팅 메시지용 토픽과 알림 전용 토픽으로 분리하여 구독 처리
- 사용자가 속한 채팅방에 새로운 메시지가 도착하면, 해당 유저에게 알림용 메시지를 Notification 토픽에 발행
- 알림 메시지는 별도로 분리된 Kafka Consumer에서 처리되어, DB에 저장
- Notification 페이지에서는 수신된 알림 리스트를 최신순으로 조회 가능하며, 사용자가 읽었는지 여부도 함께 표시
- 새로운 알림 도착 시 실시간으로 해당 사용자에게 전달