์ผ๋‹จ ํ•˜๊ณ  ๋ณด๋Š” ์‚ฌ๋žŒ

๋‚˜์ค‘๋ณด๋‹จ ์ง€๊ธˆ์— ์ง‘์ค‘ํ•˜๋˜, ์ง€๊ธˆ๋ณด๋‹จ ๋‚˜์ค‘์— ์™„๋ฒฝํ•ด์ง€์ž๐Ÿ’ช๐Ÿป

๐Ÿ•ธ๏ธ Web์— ๋Œ€ํ•ด

Websocket: ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์ž์œ ๋กญ๊ฒŒ ์กฐ์ž‘ํ•˜๊ธฐ

JanginTech 2026. 1. 2. 16:05

๐Ÿงฉ ๋ฐฐ๊ฒฝ

FastAPI๋กœ LLM ๊ธฐ๋ฐ˜ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์‹ค์‹œ๊ฐ„ WebSocket ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ๋‹ค(์–˜๋ฅผ โ–ก ๋ผ๊ณ  ์นญํ•˜๊ฒ ๋‹ค!)

์ด ์„œ๋น„์Šค๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ์‘๋‹ต ๊ณผ์ •์ด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋‹ค.

 

1. msg1 : “๋ถ„์„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.”

2. msg2 : “๋ชจ๋ธ์„ ์ค€๋น„ ์ค‘์ž…๋‹ˆ๋‹ค.”

3. msg3 : ๊ฒฐ๊ณผ ํ‘œ์‹œ ์ง์ „์˜ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€

4. LLM ์‘๋‹ต ์ŠคํŠธ๋ฆฌ๋ฐ

5. ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ ํ›„, ํžˆ์Šคํ† ๋ฆฌ ์ธ๋ฑ์Šค ์ €์žฅ

 

์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋ผ

“์ˆœ์„œ·ํƒ€์ด๋ฐ·์ „์†ก ํƒ€์ด๋ฐ”์ด 3๋ฐ•์˜ ํ•ฉ์ด ์•„์ฃผ ์ค‘์š”ํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

LLM ์‘๋‹ต ์ƒ์„ฑ์ด ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” ์ ์ด๋‹ค

๊ทธ๋ž˜์„œ msg 3 -> LLM ์‘๋‹ต ์‚ฌ์ด๊ฐ€ ๋„ˆ๋ฌด ๋ฉ€์–ด์„œ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„  ๋ฉˆ์ถ˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค๋Š” ์˜๊ฒฌ๋„ ๋‚˜์™”๋‹ค.

 

์ด ๋นˆ ๊ตฌ๊ฐ„์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด

msg3๋ฅผ 2์ดˆ ๋’ค์— ๋ฟŒ๋ฆฌ์ž๋Š” ์˜๊ฒฌ์ด ๋‚˜์™”๊ณ  ์ฝ”๋“œ์— ์ ์šฉํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋‹ค.

๋งํ•˜๊ธฐ ์ข€ ๋ฏผ๋งํ•˜์ง€๋งŒ.. UX ์ฐฉ์‹œ๋ฅผ ์ด์šฉํ•ด ๋‹ต๋ณ€์ด ๋” ๋นจ๋ฆฌ ๋‚˜์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๊ณ ์žํ–ˆ๋‹ค..ใ…Ž๐Ÿ˜“

 

๐Ÿ’ญ ๊ณ ๋ฏผ์˜ ๋‚ด์šฉ

ํŒ€์› ๋ถ„๊ณผ์˜ ์˜๋…ผ ๋‹น์‹œ ๋„์ ์˜€๋˜ ๋ฉ”๋ชจ

 

๋‚ด ์˜๋„๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ–ˆ๋‹ค.

msg1 (์ฆ‰์‹œ ํ‘œ์‹œ)

msg2 (์ฆ‰์‹œ ํ‘œ์‹œ)

msg3 (์›๋ž˜๋Š” ๋ฐ”๋กœ ๋– ์•ผ ํ•˜์ง€๋งŒ LLM ์‘๋‹ต ์ฒ˜๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ msg2๋ฅผ ๋” ์˜ค๋ž˜ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด → 2์ดˆ ๋’ค์— ํ‘œ์‹œ)

LLM ์‹ค์ œ ์‘๋‹ต ์ŠคํŠธ๋ฆฌ๋ฐ ์‹œ์ž‘ (๋”œ๋ ˆ์ด ์—†์ด ์ฆ‰์‹œ!)

์ฆ‰,

1. ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ ์ˆœ์„œ๋Š” ์œ ์ง€

2. msg3์„ 2์ดˆ ๋’ค์— ๋ฟŒ๋ฆผ(msg2๋Š” 2์ดˆ ๋” ๋ณด์—ฌ์ฃผ๋Š” ๊ผด)

3. ์ด๊ฑฐ๋ž‘ ๋ณ„๊ฒŒ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ์€ ์ง„ํ–‰๋˜์–ด์•ผ ํ•จ

์ด 3๊ฐ€์ง€๋ฅผ ์ถฉ์กฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š”... msg3์ด ๋ชจ๋“  ์—ฐ์‚ฐ์ด ๋๋‚œ ๋’ค์— ๋“ฑ์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

 

๋‚ด๊ฐ€ ๋งŒ๋“  delay_send๊ฐ€ ์‹คํ–‰๊นŒ์ง„ ๊ฐ€๋Š”๋ฐ ์—ฐ์‚ฐ์ด ๋‹ค ๋๋‚œ ๋’ค์— ์ „์†ก๋๋‹ค.

 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ

msg1 -> msg2 -> LLM ์‘๋‹ต -> msg3

์™€ ๊ฐ™์€ ๋ง๋„ ์•ˆ ๋˜๋Š” ๋กœ์ง์„ ๋งŒ๋“  ๊ฑฐ๋‹คใ…œใ…œ

 

UX ๊ฐœ์„ ์€์ปค๋…• ๋” ์ด์ƒํ•ด์ง€๊ณ  ๋ง์•˜๋‹ค

 

 

๐Ÿ› ๏ธ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์‹œ๋„๋“ค

๊ฝค ๋งŽ์€ ์‹œ๋„๋ฅผ ํ–ˆ๋‹ค

  •  asyncio.create_task, loop.create_task ๋‹ค ์จ๋ด„
  • await asyncio.sleep(0)๋กœ ๋ฃจํ”„ ์–‘๋ณด ์‹œ๋„
  • await asyncio.to_thread๋กœ ๋ถ„๋ฆฌ ์‹œ๋„
  • WebSocketTap ๋‚ด๋ถ€ await ์ œ๊ฑฐ
  • ๋‚ด๋ถ€ ํ”Œ๋Ÿฌ์‹œ ์กฐ์‚ฌ

๋ณ„๋ณ„ ๊ฑธ ๋‹คํ•ด๋ณธ ๊ฒฐ๋ก ์€ ์ด๊ฑฐ์˜€๋‹ค

Websocket ๋ฉ”์‹œ์ง€ ์ „์†ก send_json() ์€
๊ฐ™์€ event loop ์•ˆ์— ์žˆ์œผ๋ฉด ๋‚ด ๋ง˜๋Œ€๋กœ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค

 

์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋‹ค๋ฅธ ์ž‘์—… ๋•Œ๋ฌธ์— ๋ฐ”์˜๋ฉด delay๊ฐ€ ๋๋‚˜๋„ send_json์€ ๋ฟŒ๋ฆด ๊ธฐํšŒ๋ฅผ ์–ป์„ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ•ด๊ฒฐ์ฑ…

๋‹ต์€ ์˜์™ธ๋กœ ๊ฐ„๋‹จํ•œ ๊ฒƒ์ด์—ˆ๋‹ค

delay_send๋ฅผ ์ด๋ฒคํŠธ ๋ฃจํ”„์—์„œ ๋ถ„๋ฆฌ์‹œํ‚ค๋ฉด ๋œ๋‹ค!

์ฆ‰

1. delay๋Š” ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ

2. delay ๋๋‚˜๋ฉด ์Šค๋ ˆ๋“œ ์•ˆ์—์„œ asyncio.run()์œผ๋กœ ์ง์ ‘ ์˜๊ธฐ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด send_json์€ ๋ฉ”์ธ ๋ฃจํ”„๊ฐ€ ๋ญ˜ํ•˜๊ณ ์žˆ๋˜ ์ƒ๊ด€์—†์ด  'delay ํ•œ ๋’ค์— msg3 ์ „์†ก'์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉ”์ธ ๋ฃจํ”„

  • ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ๋“ค..
  • LLM ์—ฐ์‚ฐ ๋ฉ”์„œ๋“œ()

๋ณ„๋„ ์Šค๋ ˆ๋“œ

  • sleep(2)
  • asyncio.run(ws.send_json(msg3))

 

๐Ÿ“ˆ ๋ณ€ํ™”

๋‚ด๊ฐ€ ์›ํ•˜๋˜ ํ๋ฆ„์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค!

์ด์ œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ •ํ™•ํžˆ 2์ดˆ ๋’ค ๋œจ๊ณ  ๊ทธ ์‚ฌ์ด์— ์—ฐ์‚ฐ์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณ‘ํ–‰๋œ๋‹ค.

 

์‹ค์ œ LLM ์—ฐ์‚ฐ ์‹œ๊ฐ„์€ ์—ฌ์ „ํžˆ 7์ดˆ๋Œ€์ง€๋งŒ

UX์ ์œผ๋กœ๋Š” 5์ดˆ์ฒ˜๋Ÿผ ๋А๊ปด์ง€๊ฒŒ ํ–ˆ๋‹ค ๐Ÿ˜Š๐Ÿ˜Š

 

๐Ÿ“Œ ํšŒ๊ณ  & ๋‹ค์Œ ๋ชฉํ‘œ

์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ๊ฒช์œผ๋ฉฐ ํฌ๊ฒŒ ๋ฐฐ์› ๋‹ค:

 

๋น„๋™๊ธฐ ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํžˆ await๋ฅผ ๋งŽ์ด ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,
“๋ฃจํ”„๊ฐ€ ์–ธ์ œ ๋ˆ„๊ตฌ์—๊ฒŒ ๊ธฐํšŒ๋ฅผ ์ฃผ๋Š”๊ฐ€”๋ฅผ ์ดํ•ดํ•ด์•ผ ํ–ˆ๋‹ค.
๋‹ค์Œ ๋ชฉํ‘œ๋Š” asyncio ๋‚ด๋ถ€ event loop๋ฅผ ์ง์ ‘ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•ด
I/O-heavy ์ž‘์—…์—์„œ๋„ ์™„๋ฒฝํ•œ ํƒ€์ด๋ฐ ์ œ์–ด๋ฅผ ์‹œ๋„ํ•ด๋ณด๋Š” ๊ฒƒ.

 

'๐Ÿ•ธ๏ธ Web์— ๋Œ€ํ•ด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿ’‰SQL Injection ์ง์ ‘ ์‹ค์Šต  (0) 2024.08.11
์›น๊ณผ ์›น ํ•ดํ‚น  (0) 2024.08.11