websocket
-
[채팅 백엔드 보안] WebSocket은 무엇으로 지키고, 셀프호스팅한 메시지 큐는 누가 들여다보나
WebSocket 채팅을 무엇으로 인증·격리하는지(JWT HS256 + TLS + 테넌트 네임스페이싱), 메시지 큐로 RabbitMQ를 고른 이유와 PV 구성, 그 큐를 headless ClusterIP로 바깥에 안 여는 접근…
-
[Flutter × 채팅] 낙관적 UI와 clientMsgId — 서버 멱등키가 클라이언트에서 중복 제거로 완성되는 지점
이중 쓰기(WS 릴레이 + REST 영속화)를 하면 내가 보낸 메시지가 WS로 되돌아와 중복된다. Flutter 앱 Bibleana가 clientMsgId 하나로 낙관적 UI와 에코 dedupe를 잇는 방법, single-flight…
-
[채팅 백엔드 설계] 방이 두 pod에 흩어졌을 때 — RabbitMQ fan-out과 app_key 멀티테넌시
게이트웨이를 여러 pod로 늘리면 같은 방의 두 사용자가 서로 다른 인스턴스에 붙는다. RabbitMQ topic exchange에 인스턴스별 ephemeral 큐를 바인딩하고 origin 태그로 중복을 막는 fan-out, 그리고…
-
[채팅 백엔드 설계] 느린 클라이언트 하나가 방 전체를 막지 않게 — 샤딩·워커풀·drop-on-full
WebSocket 게이트웨이는 얇지만 단순하지 않다. 방 맵을 32개 샤드(FNV-1a)로 나눠 lock 경합을 줄이고, 방마다 워커풀 10 + 버퍼 큐 10000을 두고, 큐가 꽉 차면 blocking…
-
[채팅 백엔드 설계] 게이트웨이를 일부러 멍청하게 — 실시간 릴레이와 영속화를 분리한 이유
채팅 백엔드에서 실시간 전달과 메시지 영속화를 한 서비스에 묶으면 DB 장애가 실시간을 죽이고 스케일링이 어려워진다. room-gateway를 DB도 비즈니스 로직도 없는 ‘dumb pipe’로 두고, 클라이언트가 WS…
-
[OKE 인프라 학습 시리즈] arm64 노드에 실제 서비스 얹기 — 무료 OKE 배포에서 부딪힌 함정들
무료 A1(arm64) 단일 노드에 Go 채팅 백엔드 8개 pod를 얹으며 실제로 부딪힌 것들. cri-o의 short-name 거부, RabbitMQ의 deprecated env로 인한 부팅 실패, WebSocket을 위한 sessionAffinity·graceful…