C.W.K.
Stream
Lesson 03 of 05 · published

Session ID 와 Statefulness

~20 min · session, mcp-session-id, stateful, stateless

Level 0호기심 많은 독자
0 XP0/48 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Streamable HTTP 가 statefulstateless server 둘 다 지원. Protocol 이 골라주지 않음 — 디자인 시점에 고르고 Mcp-Session-Id header 로 신호.

Stateful server 는 initialize 때 session id 발급 (Mcp-Session-Id response 에). 이후 request 가 같은 id 를 request header 에 carry. Server 가 id 로 per-session state — open subscription, paginated cursor, in-flight long-running task — lookup. Tear-down 명시적: client 가 끝나면 endpoint 에 session id 담은 HTTP DELETE; server 가 state 정리.

Stateless server 는 session id 발급 안 함. 모든 request 독립; per-call 작업 in-process 로 하고 버림. Stateless server 는 — load balancer 뒤 어느 노드든 어느 request 든 처리 가능 — 조율 없이 horizontal scale; 그러나 subscription, call 간 cursor pagination, '이 client 한테 마지막에 뭐라 했지' 기억하는 어떤 feature 도 못 줌.

선택은 운영적. Stateful server 가 짜기 쉽지만 scale 어려움 (sticky routing 또는 공유 session storage 필요). Stateless 가 scale 쉽지만 — request payload 에 state push 해야 함 (e.g. cursor 를 opaque token 으로). 대부분 production 배포가 결국 stateless (CDN-처럼 edge) + Redis 같은 데 공유 state — stateless plumbing 의 단순함과 stateful semantic 의 capability 동시.

Code

Stateful — header 의 session id·text
POST /mcp  →  HTTP/1.1 200 OK
                 Mcp-Session-Id: sess_abc123

POST /mcp  Mcp-Session-Id: sess_abc123  →  ...
DELETE /mcp Mcp-Session-Id: sess_abc123  →  HTTP/1.1 204 No Content
Stateless — 모든 호출 fresh·text
POST /mcp  →  HTTP/1.1 200 OK
                 (Mcp-Session-Id 발급 안 됨)

# 각 request 가 독립적으로 처리될 만큼 state 를 carry.
# Cursor / opaque token 은 params 에 — server memory 안 X.

External links

Exercise

짠 server 하나 가지고 물어: 어느 tool 이 진짜 session-scoped state 필요? 답이 '없음' 이면 session-id 기계장치 지우고 stateless ship. 짠 server 대부분 처음 생각보다 state 덜 필요했어.

Progress

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

댓글 0

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

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