왜 dict 가 아니라 클래스
Track 3 의 minimal manager 는 set 의 dict. 실전 application 은 세 차원 더 필요: connection 별 metadata (언제 connect, 어느 IP 에서, 어느 session?), user 별 lookup (지금 user X 의 connection 은?), observability (현재 connection 수, room 별, user 별, 버전별?). 클래스가 이걸 한 자리에 모아 — 모듈 여러 곳에 흩뿌리지 말고.
세 인덱스
거의 항상 세 lookup 방향 필요: room → connection set, user_id → connection, connection → metadata. 작은 dict 셋; 모든 작업이 셋 다 일관되게 update. 셋 중 하나 빠뜨리면 production 의 'stale connection' 버그 다 거기서 나와.