Skip to content

[Chore] WebSocket 운영 안정화 후속 계획 #109

Description

@SungKong00

상태: 보류 / WebSocket 운영 인프라 후속 작업만 이 이슈에서 추적

앱 재진입 시 REST resource ID 복구는 #40, #79, #86에서 다룹니다.
단일 스케줄러의 100건 초과 재탐색 공정성은 #123에서 다룹니다.

목표

현재 WebSocket 구현을 단일 서버에서 안전하게 유지하고, 이후 ALB·다중 인스턴스 환경으로 확장할 때 필요한 보안·연결·배포·브로커·검증 작업을 한곳에 보관합니다.

추적 원칙

  • 지금은 이 통합 이슈만 열어 둡니다.
  • 세부 이슈를 닫는 것은 구현 완료가 아니라 추적 위치를 이 이슈로 옮긴다는 뜻입니다.
  • 실제 착수 시 한 PR에서 리뷰 가능한 크기로 새 이슈를 발행하고 이 이슈에 연결합니다.
  • WebSocket은 상태 변경 명령이 아니라 상태 변경 알림 신호로 사용합니다.
  • 최종 상태와 재접속 복구는 REST/DB를 기준으로 합니다.
  • DB commit 이후 best-effort로 알림을 시도하며, 알림 실패가 DB transaction을 rollback하지 않게 합니다.
  • 공개 서버를 대상으로 공격성 handshake/probing을 하지 않고 로컬·승인된 test 환경에서 검증합니다.
  • 같은 target group에 SimpleBroker 노드와 Broker Relay 노드를 섞지 않습니다.

현재까지 확정·완료된 기준

나중에 다시 분리할 작업 묶음

1. 연결 인증 수명과 회원 상태 반영

  • access token 만료 시 연결 종료 또는 재인증 정책 확정
  • 회원 정지·탈퇴·권한 회수를 열린 연결에 반영
  • Android reconnect/backoff와 인증 실패 구분
  • 만료·정지·탈퇴별 단위 및 실제 STOMP 연결 테스트
  • token, raw header, payload 없는 안전한 로그·metric

2. 매칭 스케줄러 다중 실행 방어

  • 단일 인스턴스의 100건 초과 starvation 수정은 #123에서 처리
  • DB 기준 lease 또는 distributed lock 적용 필요성 결정
  • 두 runner가 같은 요청을 동시에 처리하지 않는 소유권 기준 확정
  • stale lease, 일부 실패, retry, 프로세스 재시작 시나리오 검증
  • schema 변경 시 migration·rollback 계획과 안전한 summary log 구성

3. ALB/ACM 단일 타깃 배포 기준

  • EC2/ASG 또는 ECS 실행 방식 결정
  • Android WSS → ALB+ACM → private HTTP Spring 구조와 Caddy 제거/유지 결정
  • private target port, security group, DNS, ACM, forwarded headers 구성
  • heartbeat보다 긴 ALB idle timeout과 readiness/health 기준
  • deregistration delay, draining, hard cutover, rollback runbook
  • Broker Relay 전에는 old/new target이 겹치는 rolling·blue/green 금지

4. 외부 STOMP Broker Relay와 다중 노드 user destination

  • ActiveMQ/RabbitMQ 등 broker 선택 ADR
  • local/test SimpleBroker와 scaled Relay profile/property 분리
  • relay host/port/login/passcode/TLS 및 system/client heartbeat 구성
  • userDestinationBroadcast, userRegistryBroadcast 구성
  • 기존 /user/queue/matching, /user/queue/lessonconvertAndSendToUser 계약 유지
  • user queue cleanup·권한·destination prefix 검증
  • broker down/recovery 중 publish failure 격리와 민감정보 비로그
  • 같은 target group의 broker mode·endpoint·namespace 혼용 방지

5. 실제 2노드·draining·broker 장애 검증

  • app A 연결 ↔ app B 이벤트 발행을 양방향 matching·lesson에서 검증
  • 동일 사용자 다중 session과 다른 사용자 destination 격리
  • broker 중단 중 DB commit 유지, 복구 후 신규 이벤트 전달
  • target draining과 rolling/blue-green 전환 검증
  • client heartbeat timeout·재연결·재구독
  • 중복·지연·순서 변경 뒤 REST 최종 상태 보정
  • [Bug] 매칭 재탐색 스케줄러 100건 초과 starvation 수정 #123 적용 후 두 runner 동시 실행과 재탐색 공정성 회귀 검증
  • 연결 수·publish latency·queue pressure 여유 측정
  • Docker Compose/Testcontainers 기반 한 명령 재현 harness

착수 조건

  • 남은 API 연동과 관련 PR 안정화
  • 개발·테스트 seed로 매칭·강습 시나리오 반복 재현 가능
  • Android matching·lesson 구독 및 REST 재조회 흐름 smoke 완료
  • WebSocket DTO·event factory·after-commit 흐름을 바꾸는 열린 PR 정리
  • 실제 다중 인스턴스 배포 일정 확정

실제 착수할 때 이슈를 다시 만드는 기준

  1. 위 1~5 작업 묶음 중 실제 배포에 필요한 것만 선택합니다.
  2. 한 이슈는 하나의 독립 커밋 또는 한 PR에서 검증 가능한 크기로 만듭니다.
  3. 각 새 이슈에 문제, 비범위, 완료 조건, 검증 명령, rollback 기준을 넣습니다.
  4. 새 이슈는 이 통합 이슈를 상위 링크로 연결합니다.
  5. 권장 순서는 인증 수명 → 스케줄러 → 단일 타깃 ALB → Broker Relay → 2노드 종합 검증입니다.

제외 범위

위 항목은 WebSocket 인프라 안정화와 별도 문제이므로 필요할 때 독립적으로 유지합니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🔧 CHORE빌드, 설정, 의존성 등 기타 작업🚀 DEPLOY배포 관련 작업 (CI/CD, 환경 설정 등)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions