docs(user-creator-chat): Redis pub/sub 고정 채널 계획을 기록한다

This commit is contained in:
2026-06-19 06:49:50 +09:00
parent 63e09fa848
commit f6cb07fc0b
2 changed files with 60 additions and 3 deletions

View File

@@ -118,12 +118,15 @@
- Redis key 기본안:
- session presence: `v2:user-creator-chat:ws:presence:{roomId}:{memberId}:{sessionId}`
- room member index: `v2:user-creator-chat:ws:room:{roomId}:member:{memberId}:sessions`
- pub/sub channel: `v2:user-creator-chat:ws:room:{roomId}`
- pub/sub channel: `v2:user-creator-chat:ws:room`
- presence value에는 `serverId`, `memberId`, `roomId`, `sessionId`, `lastSeenAt`을 포함한다.
- WebSocket 연결 유지 중 heartbeat 또는 메시지 송수신 시 presence TTL을 갱신한다.
- presence TTL 기본값은 90초로 한다.
- 서버는 메시지 저장 후 상대방의 해당 `roomId` presence가 Redis에 하나 이상 있는지 확인한다.
- 상대방 presence가 있으면 Redis pub/sub으로 room channel에 메시지를 발행한다.
- 상대방 presence가 있으면 Redis pub/sub으로 고정 channel에 메시지를 발행한다.
- Redis pub/sub 메시지 payload에는 `roomId`, `memberId`, `payload`를 포함하고, 수신 서버는 payload의 `roomId/memberId`를 기준으로 local session을 필터링한다.
- 운영 Redis는 AWS ElastiCache Serverless Valkey 7.2 또는 Redis OSS 7.1을 사용할 수 있으므로, Redis pattern subscribe가 필요한 `PSUBSCRIBE`/`PatternTopic` 방식은 사용하지 않는다.
- Redis listener는 `SUBSCRIBE` 기반의 고정 `ChannelTopic`만 사용한다.
- 각 서버는 자신에게 연결된 session 중 대상 `roomId/memberId` session에만 메시지를 전송한다.
- 상대방 presence가 없으면 푸시 이벤트를 발행한다.