๐Ÿค–

ChatGPT ์ŠคํŠธ๋ฆฌ๋ฐ์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋‚˜?

SSE๋กœ ํ† ํฐ ๋‹จ์œ„ ์‹ค์‹œ๊ฐ„ ์‘๋‹ต ์ „๋‹ฌ

OpenAI์˜ Chat Completions API์— stream: true๋ฅผ ์„ค์ •ํ•˜๋ฉด, ์‘๋‹ต์ด ํ•œ๊บผ๋ฒˆ์— ์˜ค์ง€ ์•Š๊ณ  SSE(Server-Sent Events) ํ˜•์‹์œผ๋กœ ํ† ํฐ์ด ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” EventSource๋‚˜ fetch + ReadableStream์œผ๋กœ ์ด ์ŠคํŠธ๋ฆผ์„ ์ˆ˜์‹ ํ•˜๋ฉฐ, ๊ฐ chunk๋Š” data: {"choices":[{"delta":{"content":"์•ˆ"}}]} ํ˜•์‹์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์— data: [DONE]์ด ์˜ค๋ฉด ์ŠคํŠธ๋ฆผ ์ข…๋ฃŒ. ์‚ฌ์šฉ์ž๋Š” LLM์ด ์ƒ๊ฐํ•˜๋Š” ๋™์•ˆ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๐ŸŒ
ChatGPT UI
fetch + ReadableStream
โ‘  POST stream:true
text/event-stream
data: {"delta":{"content":"์•ˆ"}}
data: {"delta":{"content":"๋…•"}}
data: {"delta":{"content":"ํ•˜"}}
data: {"delta":{"content":"์„ธ"}}
data: [DONE]
๐Ÿง 
OpenAI API
LLM ํ† ํฐ ์ƒ์„ฑ
ํ† ํฐ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ → ์ฆ‰์‹œ ์ „์†ก
ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ชจ์Šต:
์•ˆ๋…•ํ•˜์„ธ
ํ•ต์‹ฌ: LLM์ด ์ „์ฒด ๋‹ต๋ณ€์„ ์™„์„ฑํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ํ† ํฐ ์ƒ์„ฑ ์ฆ‰์‹œ SSE๋กœ ์ „์†ก
์™œ SSE์ธ๊ฐ€? (WebSocket ์•„๋‹Œ ์ด์œ )
  • ์š”์ฒญ์€ 1ํšŒ(POST), ์‘๋‹ต๋งŒ ์ŠคํŠธ๋ฆฌ๋ฐ → ๋‹จ๋ฐฉํ–ฅ์ด๋ฉด ์ถฉ๋ถ„
  • HTTP ๊ธฐ๋ฐ˜์ด๋ผ CDN/ํ”„๋ก์‹œ ํ˜ธํ™˜์„ฑ ์ข‹์Œ
  • ์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ์ƒˆ ์š”์ฒญ์œผ๋กœ ์žฌ์‹œ๋„ (stateless)
  • WebSocket ๋Œ€๋น„ ์„œ๋ฒ„ ๊ตฌํ˜„์ด ๋‹จ์ˆœ

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

1

ํด๋ผ์ด์–ธํŠธ๊ฐ€ POST /v1/chat/completions์— stream: true๋กœ ์š”์ฒญ

2

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

3

LLM์ด ํ† ํฐ ์ƒ์„ฑ โ†’ data: {"delta":{"content":"์•ˆ"}} ์ฆ‰์‹œ ์ „์†ก

4

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ chunk๋ฅผ ๋ฐ›์•„ UI์— append

5

๋ชจ๋“  ํ† ํฐ ์ƒ์„ฑ ์™„๋ฃŒ โ†’ data: [DONE] ์ „์†ก

6

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ŠคํŠธ๋ฆผ ์ข…๋ฃŒ ์ฒ˜๋ฆฌ

์žฅ์ 

  • ์ฒด๊ฐ ์‘๋‹ต ์†๋„ ๋Œ€ํญ ํ–ฅ์ƒ (TTFT ์ตœ์†Œํ™”)
  • LLM ์ „์ฒด ์ƒ์„ฑ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์Œ
  • HTTP ๊ธฐ๋ฐ˜์ด๋ผ ๊ตฌํ˜„ ๋‹จ์ˆœ
  • ์ค‘๊ฐ„์— ์ทจ์†Œ ๊ฐ€๋Šฅ (AbortController)

๋‹จ์ 

  • ํ† ํฐ ๋‹จ์œ„ ์ฒ˜๋ฆฌ ๋กœ์ง ํ•„์š”
  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ณต์žก (์ค‘๊ฐ„ ๋Š๊น€)
  • ์ด ํ† ํฐ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์Œ
  • ํด๋ผ์ด์–ธํŠธ ๋ฒ„ํผ๋ง ๊ด€๋ฆฌ ํ•„์š”

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

ChatGPT / Claude ์›น UI AI ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ AI ์ฑ—๋ด‡ ์ธํ„ฐํŽ˜์ด์Šค ๋ฌธ์„œ ์š”์•ฝ/๋ฒˆ์—ญ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ