코딩/sparta TIL

채팅 서버 만들기 : Redis, Kafka 연동 후 chat 모듈만 따로 docker 로 돌리고 테스트

americanoallday 2025. 6. 12. 17:42

GPT랑 만들었는데... 작동 다 하는데.... 내일부터는 개념 공부해야할 듯....

✨ 요청하는 기능 설명

Kafka와 Redis Pub/Sub을 연동하여 채팅 메시지를 송수신할 수 있는 인프라 구성을 도입했습니다.
각 서비스(Spring, Redis, Kafka, Mongo, MySQL)를 하나의 docker-compose로 구성하였고, Kafka 기반 메시지 브로커와 Redis Pub/Sub 기반 브로드캐스트 구조를 구현했습니다.

🎉 기대 효과

  • Kafka를 통한 안정적인 메시지 큐 처리로 확장성과 내결함성 확보
  • Redis Pub/Sub을 활용한 WebSocket 브로드캐스트 처리로 실시간 응답 속도 향상
  • 모든 컴포넌트를 Docker Compose로 통합하여 개발/운영 환경 일관성 유지 및 배포 용이성 확보
  • MongoDB, MySQL을 동시에 활용하는 데이터 저장 구조 도입으로 각 데이터 유형에 최적화된 저장 가능

📝 작업 항목

  • docker-compose.yml을 통한 Kafka, Redis, Spring, Mongo, MySQL 통합 환경 구성
  • KafkaChatProducer, KafkaChatConsumer 클래스 작성 (채팅 메시지 Kafka 송수신 처리)
  • RedisPublisher, RedisSubscriber 클래스 작성 (WebSocket 브로드캐스트 처리)
  • RedisConfig 설정 파일 작성하여 RedisMessageListenerContainer 및 RedisTemplate 등록
  • application.yml에 각종 설정(host, port, Kafka group-id 등) 명시
  • 8082 포트로 서비스되는 WebSocket 기반 채팅 서버 구성

📎기타 참고사항

  • Redis 사용 버전: 7.2
  • Kafka/Zookeeper 이미지: confluentinc/cp-kafka:7.5.0, cp-zookeeper:7.5.0
  • Redis는 WebSocket 메시지 브로드캐스팅에, Kafka는 채팅 메시지 수집에 사용됨
  • MongoDB는 채팅 로그 저장, MySQL은 채팅방 메타 정보 저장 목적
  • 이후 JWT 인증 적용 시 application.yml에 주석 처리된 jwt.secret.key를 복구해야 함