C.W.K.
Stream
Lesson 08 of 08 · published

Hybrid Architecture

~12 min · app, rest, sse, websocket

Level 0Poller
0 XP0/60 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

REST + WebSocket 이 dominant production 패턴

가장 흔한 production architecture 는 'WebSocket 만' 아냐. CRUD 엔 REST + live update 엔 WebSocket. /api/messages 에 chat message POST; REST handler 가 영속 + WebSocket fan-out. 재연결 클라가 GET /api/messages?since=X 로 history fetch 후 WebSocket 으로 새 message 받음.

SSE + WebSocket 이 AI-시대 패턴

AI streaming (일방향, 고빈도 토큰) + interactive 기능 (양방향) 둘 다 가진 application 엔 streaming 엔 SSE, 나머지엔 WebSocket. cwkPippa 가 이 seam 에 살아: chat 답변이 SSE 로 stream, council 픽 + admin action 이 REST 로, 단일 WebSocket 이 presence + notification 운반. 세 transport, 각자 잘하는 거에 픽.

Code

WebSocket fan-out trigger 하는 REST endpoint·python
from fastapi import FastAPI, Depends
from pydantic import BaseModel

class CreateMessage(BaseModel):
    room: str
    text: str

@app.post('/api/messages')
async def create_message(payload: CreateMessage, user = Depends(auth)):
    saved = await db.messages.insert({
        'room': payload.room,
        'text': payload.text,
        'from': user['id'],
    })
    # Source of truth is the database;
    # WebSocket is the liveness layer over it.
    await ws_manager.broadcast(payload.room, {
        'type': 'chat.message',
        'data': saved,
    })
    return saved
Architecture diagram·text
  Client
    |
    +-- POST /api/messages -----> REST API ----> Database
    |   (send a message)              |
    |                                  v
    +-- WS (subscribe room) <------ Manager broadcasts to room
    |   (receive others' messages)
    |
    +-- GET /api/messages?since=X -> REST API
        (history on reconnect)

External links

Exercise

이전 chat exercise 중 하나 골라. send 가 WebSocket 대신 POST /api/messages (영속 + fan-out) 통하게 refactor. 재연결 클라가 GET /api/messages 로 history fetch 후 끊김 없이 계속 가능 확인. 코드 어디 제거됐는지 봐 — WebSocket handler 가 더 작아야 함.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.