Skip to content

feat: 백엔드 수평 확장 및 Socket.IO 분산 상태 지원 - #78

Open
yoonyoungyang wants to merge 99 commits into
goorm-dev:mainfrom
sodam2z:codex/backend-scale-out
Open

feat: 백엔드 수평 확장 및 Socket.IO 분산 상태 지원#78
yoonyoungyang wants to merge 99 commits into
goorm-dev:mainfrom
sodam2z:codex/backend-scale-out

Conversation

@yoonyoungyang

@yoonyoungyang yoonyoungyang commented Aug 11, 2026

Copy link
Copy Markdown

작업 내용

단일 인스턴스를 전제로 동작하던 백엔드를 여러 인스턴스로 확장할 수 있도록 변경했습니다.

Socket.IO 분산 처리

  • Socket.IO 저장소를 Redis/Redisson 기반으로 전환
  • 운영 기본값을 redis로 설정
  • 로컬 개발용 memory 저장소 유지
  • 여러 인스턴스 간 접속 사용자와 사용자별 방 상태 공유
  • 접속 ownership을 원자적으로 교체
  • 이전 연결만 조건부로 제거
  • 다른 인스턴스에 연결된 사용자에게도 중복 로그인 이벤트 전달
  • MongoDB 참가 정보를 기준으로 재접속 시 채팅방 복원

동시성 및 데이터 정합성

  • 레이트리밋에서 인스턴스 hostname 제거
  • MongoDB 조건부 원자 연산으로 글로벌 레이트리밋 적용
  • 세션 갱신 및 삭제를 userId + sessionId 조건부 연산으로 변경
  • 세션 TTL 인덱스를 실제 expiresAt 기준으로 수정
  • 메시지 리액션을 $addToSet/$pull 기반 원자 연산으로 변경
  • 방 입장 및 퇴장을 MongoDB modified count 기준으로 멱등 처리
  • AI 메시지 ID를 UUID로 생성하고 저장 ID로 재사용

테스트

  • Redis 클라이언트 2개를 이용한 공유 상태 통합 테스트 추가
    • 접속 ownership 교체
    • stale connection 조건부 삭제
    • 사용자별 채팅방 Set 공유
  • 동시 요청에서도 글로벌 레이트리밋이 유지되는지 검증
  • RoomActivityNotifier 테스트를 현재 배치 flush 계약에 맞게 수정
  • 테스트 MongoDB pool 및 자동 인덱스 설정 보완

검증 결과

  • 전체 백엔드 테스트: 225개
  • 실패: 0
  • 오류: 0
  • 스킵: 8
  • git diff --check 통과

운영 환경 설정

모든 백엔드 인스턴스가 동일한 Redis를 사용해야 합니다.

SOCKETIO_STORE_TYPE=redis
REDIS_HOST=<shared-redis-host>
REDIS_PORT=6379
REDIS_PASSWORD=<password>

로컬 단일 노드 환경에서는 다음 설정을 사용할 수 있습니다.

SOCKETIO_STORE_TYPE=memory

클라우드 담당 확인 사항

  • 백엔드 인스턴스 2개 이상 구성
  • 모든 인스턴스에서 동일 Redis 및 MongoDB 사용
  • HTTP 5001 및 Socket.IO 5002 로드밸런싱
  • WebSocket upgrade 및 idle timeout 설정
  • readiness 기반 target 등록 및 제거
  • 롤링 배포 시 connection drain 처리
  • 최소 2개 인스턴스에서 교차 노드 메시지 전달 확인

제외 범위

  • e2e 폴더는 변경하지 않았습니다.
  • 파일 업로드 및 S3 관련 코드는 변경하지 않았습니다.

yoonyoungyang and others added 30 commits August 10, 2026 13:41
perf: reduce chat message database operations
perf: 프로필 이미지 처리 및 동시 요청 성능 개선
Perf/chat room list pagination - RoomListItemResponse
perf: reduce chat history user queries
perf: 톰캣 및 MongoDB 풀 설정 환경변수화
perf(profile): prevent duplicate uploads and benchmark resized fixtures
gourmet0828 and others added 30 commits August 11, 2026 22:04
perf: optimize chat room join and message flow
perf: 인증 및 방 목록 중복 요청 제거
fix: always acknowledge duplicate room join
perf: CORS 설정 재사용으로 요청별 로깅 및 객체 생성 제거
perf: 채팅방 초기화 지연 및 동시 입장 경합 개선
perf: Socket.IO 방 입장 처리 최적화
perf: reuse frontend socket connection
perf: optimize frontend chat load handling
perf: reduce frontend chat message computation
perf: 파일 접근 권한 검증과 업로드 폴백 개선
perf: reduce socket load during chat activity
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants