본문 바로가기

패스트캠퍼스/50일의 기적 AI 환급반

패스트캠퍼스 환급챌린지 41일차 : 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://fastcampus.info/4n8ztzq

 

 

안녕하세요 :)

오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 마흔 한번째 날입니다.

 

마흔 번째 날에는 Nginx를 도입하여 인증 서비스에 고가용성과 확장성을 확보한다에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.

 

 

오늘 학습할 내용의 제목은,

Part 4. 서비스 부하 분산을 위한 분리 시작 Ch 5. 메시지 순서 보장을 위한 메시지 시퀸스 넘버 생성기 추가 >

02. 레디스 사용하여 채팅방 기준 메시지 시퀸스 넘버 생성하기

입니다.

 


💬 Redis로 채팅방별 메시지 시퀀스 번호 생성하기

  • 이번 글에서는 채팅 시스템에서 채팅방(또는 채널) 기준의 메시지 시퀀스 번호를 Redis로 생성하는 POC 예제를 소개합니다.
  • 목적은 메시지 순서 보장과 유실 최소화를 위해 Redis를 시퀀스 아이디 생성기로 사용하는 방법을 검증하는 것입니다.
  • 본 예제는 파트2 챕터2에서 만든 단순 다이렉트 채팅 예제를 기반으로 하며, Redis 의존성 추가, AOF 설정, 시퀀스 생성기 구현, 그리고 동작 검증까지 다룹니다.

 

🛠 핵심 아이디어

  • 채널별 고유 키 생성 → Redis에서 INCR로 시퀀스 발급
  • AOF + RDB 영속화 설정 → 장애 발생 시 유실 범위 최소화
  • 단일 노드로 먼저 검증 → 이후 클러스터로 확장 가능

 

📦 구성 및 환경 설정

  1. 프로젝트 복제 후 docker-compose.yml에 Redis 서비스 추가
  2. Redis 실행 시 설정:
    • appendonly yes
    • appendfsync everysec → 성능과 내구성의 균형
  3. Redis Insight로 설정값 확인:
    • CONFIG GET appendfsync
    • CONFIG GET save
  4. 애플리케이션에 spring-boot-starter-data-redis 의존성 추가

 

💻 구현 요약

DTO: MessageNotification

  • 필드: content, Long seqId

서비스: MessageSeqIdGenerator

  • buildMessageSeqIdKey(channelId) → message:%d:seq_id 형태의 키 생성
  • getNext(channelId) → redisTemplate.opsForValue().increment(key)
  • peek(channelId) → 현재 값 조회(증가 없음)

메시지 핸들러 적용

  • 메시지 전송 시 getNext(channelId)로 seqId 발급
  • Notification 객체에 포함해 전송

 

🔍 동작 검증

  • Postman으로 다이렉트 채팅 메시지 전송 → Redis에서 채널별 시퀀스 값 증가 확인
  • Redis Insight로 예시 확인:
  • Redis를 중지 후 재시작 → AOF 덕분에 시퀀스 값 복구 확인

 

⚠️ 주의사항 & 확장

  • 단일 Redis 노드 → 장애 시 위험 → Redis Cluster + replica 구성 권장
  • appendfsync always → 안전하지만 성능 저하 큼, everysec이 현실적
  • INCR는 원자성 보장 → 별도 락 불필요

 

  • Redis를 시퀀스 생성기로 쓰는 방법은 간단하면서도 실무적인 방법입니다. 채널 단위로 독립된 시퀀스를 유지하면 메시지 순서 재정렬, 중복 처리, 재전송 보정이 훨씬 단순해지기 때문입니다.
  • 다만, 운영 환경에서는 영속화 전략과 복제 구조를 반드시 설계해야 하며, 시퀀스 값이 중요하면 모니터링과 알림 체계를 통해 비정상 동작을 빠르게 감지해야 합니다. 또한 시퀀스 포맷을 채널ID-타임스탬프-증분 같이 구성하면 디버깅과 장애 복구에 도움이 됩니다.