이탈 유저 감지 및 대기열 정합성 유지 전략

1️⃣ 문제 재정의

우리 시스템은 초당 수만 명에서 최대 10만 명 이상의 대기자를 수용해야 합니다. 이때 가장 큰 위협은 **'좀비 유저(Zombie User)'**입니다. 브라우저를 닫거나 네트워크가 끊긴 유저가 대기열에 계속 남아있다면 다음과 같은 치명적인 문제가 발생합니다.

우리의 목표: "최소한의 자원(Redis CPU/Memory)으로 최대한 빠르게 이탈자를 찾아내고 제거한다."

2️⃣ 생각의 흐름: 하트비트(Heartbeat)는 필수인가?

Q1. HTTP의 비연결성을 어떻게 극복할 것인가?

유저가 나갔다는 것을 서버가 즉시 알 방법은 없습니다. 따라서 유저가 주기적으로 "나 여기 살아있어요"라고 신호를 보내는 하트비트(Heartbeat) 방식은 필수적입니다.

Q2. 10만 명의 하트비트를 Redis가 버틸 수 있는가?

10만 명이 1초마다 Redis에 ZADD를 날리면 100,000 TPS입니다. 이는 Redis 단일 노드에 큰 부담을 줍니다.

3️⃣ 핵심 쟁점: 어떻게 지울 것인가? (방식 A vs 방식 B)

두 가지 선택지가 있습니다.

대안 1: 개별 키 TTL (Lease 방식)

대안 2: 하트비트 ZSET (벌크 관리 방식)