ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toBackend
์๋ฌธ ์ฝ๊ธฐ
๋จ์ API Wrapper๋ฅผ ๋์ด Streaming๊ณผ Persistence๋ฅผ ๊ฒฐํฉํ AI ์ฑํ ์ํคํ ์ฒ ์ค๊ณ
You Can't Even Make an AI Wrapper Chat App ๐๐ซต
AI ์์ฝ
Context
๋จ์ Request-Response ๋ฐฉ์์ AI API ํธ์ถ๋ก ์ธํ 10~15์ด์ ์๋ต ์ง์ฐ ๋ฐ ์ฌ์ฉ์ ์ดํ ๋ฐ์. ์ํ ๊ด๋ฆฌ ๋ถ์ฌ๋ก ์ธํ Page Refresh ์ ๋ํ ๊ธฐ๋ก ์์ค ๋ฐ ๋ฌธ๋งฅ ์ ์ง ๋ถ๊ฐ๋ผ๋ ๊ตฌ์กฐ์ ํ๊ณ ์ง๋ฉด.
Technical Solution
- Server-Sent Events(SSE) ๊ธฐ๋ฐ์
text/event-stream๋์ ์ ํตํ Token ๋จ์ ์ค์๊ฐ ๋ ๋๋ง ๊ตฌํ - Frontend์
ReadableStream์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ ์ ์ง์ UI ์ ๋ฐ์ดํธ ๋ฐ UX ์ง์ฐ ์๊ฐ ์ ๊ฑฐ - User Message์ ์ฆ๊ฐ์ ์ธ DB Insert์ AI Response์ ๋์ ์ ์ฅ์ ํตํ ๋ํ Persistence ํ๋ณด
conversationId๊ธฐ๋ฐ์ History Loading ๋ก์ง ์ค๊ณ๋ฅผ ํตํ ์ธ์ ์ฐ์์ฑ ๋ฐ ๋ฉํฐ ๋๋ฐ์ด์ค ๋๊ธฐํ ๊ตฌํ- ์ ์ฒด ๋ํ ์ด๋ ฅ์ AI Prompt์ ํฌํจํ๋ Context Window ๊ด๋ฆฌ ์ ๋ต ์ ์ฉ
- DB ๋ถํ ๊ฐ์๋ฅผ ์ํ ์ ์ฅ ๋ก์ง์ Debouncing ์ฒ๋ฆฌ ๋ฐ ์์ธ์ ์ธ ์ฐ๊ฒฐ ๋๊น ๋์ ์ค๊ณ
์ค์ฒ ํฌ์ธํธ
- AI ์๋ต์ TTFB(Time to First Byte) ๊ฐ์ ์ ์ํด Streaming API ์ฑํ ์ฌ๋ถ ๊ฒํ - ๋จ์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด Refresh ๋ฐ ์ธ์ ๋ง๋ฃ ์ํฉ์ ๋๋นํ ๋ฐ์ดํฐ Persistence ์ ๋ต ์๋ฆฝ - ๋ํ ๋ฌธ๋งฅ ์ ์ง๋ฅผ ์ํ History ๊ด๋ฆฌ ๋ฐ ํ ํฐ ์ ํ์ ๊ณ ๋ คํ Context Window ์ค๊ณ ํ์ธ - ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ DB ์ ์ฅ ์ Write ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ฒํผ๋ง/๋๋ฐ์ด์ฑ ์ ์ฉ ๊ณ ๋ ค