๐Ÿ“จ

SSE (Server-Sent Events)

์„œ๋ฒ„โ†’ํด๋ผ์ด์–ธํŠธ ๋‹จ๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆผ

SSE๋Š” HTTP ๊ธฐ๋ฐ˜์˜ ๋‹จ๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์ด๋ฒคํŠธ๋ฅผ ๊ณ„์† ๋ณด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธโ†’์„œ๋ฒ„ ๋ฐฉํ–ฅ์€ ๋ณ„๋„ HTTP ์š”์ฒญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. WebSocket๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ณ  HTTP/2์™€ ์ž˜ ํ˜ธํ™˜๋˜๋ฉฐ, ์ž๋™ ์žฌ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์ด ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ

๐ŸŒ
Client
EventSource API
โ‘  GET ์š”์ฒญ
HTTP ์—ฐ๊ฒฐ ์œ ์ง€
โ‘ก text/event-stream
data: {...}
data: {...}
๋‹จ๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆผ (์„œ๋ฒ„ → ํด๋ผ์ด์–ธํŠธ)
๐Ÿ–ฅ๏ธ
Server
Content-Type: text/event-stream
์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™ ์žฌ์—ฐ๊ฒฐ (Last-Event-ID ์ „์†ก)
ํ๋ฆ„ ์„ค๋ช…
  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ EventSource API๋กœ ์„œ๋ฒ„์— HTTP GET ์š”์ฒญ
  2. ์„œ๋ฒ„๊ฐ€ text/event-stream ์‘๋‹ต, ์—ฐ๊ฒฐ ์œ ์ง€
  3. ์„œ๋ฒ„๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ data: ํ˜•์‹์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ
  4. ์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™ ์žฌ์—ฐ๊ฒฐ

๋™์ž‘ ํ๋ฆ„

1

ํด๋ผ์ด์–ธํŠธ๊ฐ€ EventSource API๋กœ ์„œ๋ฒ„์— HTTP GET ์š”์ฒญ

2

์„œ๋ฒ„๊ฐ€ Content-Type: text/event-stream์œผ๋กœ ์‘๋‹ต, ์—ฐ๊ฒฐ ์œ ์ง€

3

์„œ๋ฒ„๊ฐ€ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ data: ํ˜•์‹์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ์ „์†ก

4

์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™ ์žฌ์—ฐ๊ฒฐ (Last-Event-ID ํ™œ์šฉ)

์žฅ์ 

  • HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ ๋‹จ์ˆœ
  • ์ž๋™ ์žฌ์—ฐ๊ฒฐ ๋‚ด์žฅ
  • HTTP/2 ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ ํ™œ์šฉ
  • ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””๋ฒ„๊น… ์šฉ์ด

๋‹จ์ 

  • ๋‹จ๋ฐฉํ–ฅ๋งŒ ๊ฐ€๋Šฅ (์„œ๋ฒ„โ†’ํด๋ผ์ด์–ธํŠธ)
  • ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ „์†ก ๋น„ํšจ์œจ
  • IE/๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ € ๋ฏธ์ง€์›
  • ์ตœ๋Œ€ ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ (HTTP/1.1์—์„œ 6๊ฐœ)

์‚ฌ์šฉ ์‚ฌ๋ก€

์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ/ํ”ผ๋“œ AI ์ฑ—๋ด‡ ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต (ChatGPT) ์ฃผ์‹ ์‹œ์„ธ ์—…๋ฐ์ดํŠธ ๋นŒ๋“œ/๋ฐฐํฌ ๋กœ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ผ์ด๋ธŒ ์Šค์ฝ”์–ด๋ณด๋“œ