SOOP, 치지직, 씨미의 라이브 채팅을 모아 랭킹과 알림으로 바꾸기까지의 기록.
5편
SOOP·치지직·씨미의 방송과 채팅을 공통 이벤트로 정규화하고, PostgreSQL·Redis Streams·ClickHouse로 분리해 멜로밍 랭킹까지 연결한 아키텍처를 소개합니다.
치지직, SOOP, 씨미 세 곳에서 수천 개의 채팅 WebSocket을 동시에 유지하며 만난 문제입니다. 두 겹 keepalive가 각각 다른 죽음을 잡는 이유, 68,248번의 Ping/Pong 측정이 상수를 정한 과정, 공유 출구 IP 하나가 만든 P0 인시던트를 코드와 함께 정리합니다.
수집 채널 수를 KEDA의 확장 신호로 바꾸고, Karpenter와 Spot Instance로 필요한 Worker와 노드를 공급하며 만든 운영 원칙을 공유합니다.
라이브 채팅 firehose 한 줄이 조직별 키워드에 걸려 Slack, Discord, 앱 푸시로 나가고 ClickHouse에 남기까지를 실제 코드로 따라갑니다. 단일 테넌트로 태어난 Go 서비스가 조직, 그룹, 채널 3층 구조를 얻는 동안 무엇을 바꾸고 무엇을 그대로 뒀는지 정리합니다.
라이브 채팅을 형태소 분석해 워드클라우드로 만들면서 정한 것들. 무엇을 단어로 셀지, 집계 창을 어떻게 고정할지, 절반만 계산된 결과를 어떻게 감출지에 대한 기록입니다.