ํฐ์คํ ๋ฆฌ ๋ทฐ
[Lymo ๊ฐ๋ฐ์ผ์ง #2] Genkit + RTDB๋ก ํด์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐํ๊ธฐ
parkcool 2025. 11. 10. 18:472๏ธโฃ Lymo ๊ฐ๋ฐ์ผ์ง #2: ํ์ฌ ๊ธ
3๏ธโฃ Lymo ๊ฐ๋ฐ์ผ์ง #3: https://parkcool.tistory.com/14
4๏ธโฃ Lymo ๊ฐ๋ฐ์ผ์ง #4: https://parkcool.tistory.com/17

์๋ ํ์ธ์!
์ง๋ ์ฒซ ๋ฒ์งธ ๊ฐ๋ฐ ์ผ์ง์์๋ Lymo์ ๊ธฐํ ๋ฐฐ๊ฒฝ๊ณผ ๊ธฐ์ ์คํ์ ๊ฒฐ์ ํ๋ ๊ณผ์ ์ ๊ณต์ ํด ๋๋ ธ์ต๋๋ค. "์์ ์ฑ์ธ๋ฐ ์์ ์ ์ฌ์ํ์ง ์๋" ๊ธฐ๋ฌํ ๊ธฐํ ๋ฐฐ๊ฒฝ์ ์ค๋ช ๋๋ ธ์ฃ . ์ค์๊ฐ AI ๊ฐ์ฌ ํด์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ๊ธฐ์ ์คํ์ผ๋ก Genkit์ ์ ํํ์์ฃ .
์ค๋์ ๊ทธ ๊ธฐํ์ ํ์ค๋ก ๋ง๋ค๊ธฐ ์ํด ๊ฐ๋ฐํ๋ฉฐ ๊ฒช์๋, ์ฝ์ง๊ธฐ๋ฅผ ๊ณต์ ํ๋ ค ํฉ๋๋ค.
๐ ์ฑ์งํผํฐ์ฒ๋ผ ์ญ๋ฅด๋ฅต ๋์ค๊ฒ

Lymo์ ํต์ฌ ๊ฒฝํ์ ์๋์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ ์ ๋ฃ๋ค๊ฐ "์ด ๊ฐ์ฌ ๋ญ์ง?" ํ๊ณ ์ฑ์ ์ผฐ๋๋ฐ, ํ๋ฉด์๋ "๋ก๋ฉ ์ค..."๋ง 10์ด๋์ ๋ ์์ผ๋ฉด ๊ฐ์ฐจ์์ด ์ฑ์ ๊บผ๋ฒ๋ฆฌ๊ฒ ์ฃ ? ๊ทธ๋์ ๋ชฉํ๋ ๋ช ํํ์ต๋๋ค.
"์ฑ์งํผํฐ์ฒ๋ผ, AI๊ฐ ๊ธ์๋ฅผ ์์ฑํ๋ ์กฑ์กฑ ํ๋ฉด์ ์ค์๊ฐ์ผ๋ก ๋ฟ๋ ค์ฃผ์"
์ด๊ฑธ ๊ตฌํํ๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ ๋ ์ฌ๋ฆฐ ๊ธฐ์ ์ SSE (Server-Sent Events)์์ต๋๋ค. HTTP ์์ฒญ์ ๋์ง ์๊ณ ์ ์งํ๋ฉด์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ํ๋ ค๋ณด๋ด๋ ๋ฐฉ์์ ๋๋ค. ์ฑ์งํผํฐ๋ฅผ ๋น๋กฏํ ๋๋ถ๋ถ์ ์ฑํ ํ AI ์๋น์ค๊ฐ ์ด ๋ฐฉ์์ ์ด๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋์ ์ ๋ ๋ณ ์๊ฐ ์์ด SSE๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์ ์์ํ์์ต๋๋ค. ๊ทธ๋ฌ์ผ๋ฉด ์ ๋๋๋ฐ...
๐ช ์ฝ์ง 1: React Native์ SSE๊ฐ ์๋ค

์์๋ถํฐ ๋๊ด์ด์์ต๋๋ค. ์น ๋ธ๋ผ์ฐ์ ์๋ EventSource๋ผ๋ API๊ฐ ๋ด์ฅ๋์ด ์์ด์ SSE๋ฅผ ์ฝ๊ฒ ์ธ ์ ์์ง๋ง, ์ ๊ฐ ๊ฐ๋ฐ ์ค์ธ React Native ํ๊ฒฝ์๋ ๊ทธ๋ฐ ๊ฒ ์์์ต๋๋ค. react-native-sse ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ๋ณผ๊น ํ์ง๋ง, ์ปค์คํ ํค๋ ์ค์ ๋ฑ์ ๋ฌธ์ ๋๋ฌธ์ ๊ฒฐ๊ตญ fetch ํจ์๋ฅผ ์ง์ ๋ฏ์ด๊ณ ์น๊ธฐ๋ก ํ์ต๋๋ค.
- ๋ค์ด์ค๋ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ง์ ๋์ฝ๋ฉ
- \n\n ๊ฐ์ ๊ตฌ๋ถ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ ์ด๋ฒคํธ ํ์ฑ
์ด ๊ณผ์ ์์ ์ ๋ง์ ํ๋กํ ์ฝ๋ ๋ง๋ค์์ต๋๋ค. update_lyrics_translation, update_overview ๊ฐ์ ์ด๋ฒคํธ ํ์ ์ ์ ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋๋ง๋ค ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ก์ง์ ์งฐ์ฃ . ๋ฉฐ์น ๋์ ๋จธ๋ฆฌ๋ฅผ ์ธ๋งค๋ฉด์ ๊ฐ๋ฐํ ๋์, ๋๋์ด ๊ธ์๊ฐ ํ๋์ฉ ํ๋ฅํ๋ฅ ์ฐํ๋ ๊ฑธ ๋ณด์์ ๋์ ์พ๊ฐ!!!
ํ์ง๋ง ๊ทธ ๊ธฐ์จ์ ๋ฑ ํ๋ฃจ ๊ฐ์ต๋๋ค.
๐ช ์ฝ์ง 2: ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ๋ ๊ฐํนํ๋ค

๊ตฌํํด๋๊ณ ๋ณด๋, ์น๋ช ์ ์ธ ํ์ ์ด ์๊ฐ๋๊ธฐ ์์ํ์ต๋๋ค.
- ์งํ์ฒ ์์ดํ์ด๊ฐ ๋๊ธธ ๋: ์ฌ๋์ด ๋ง์ด ํ ์งํ์ฒ ์์ ์์ดํ์ด์ ์ฐ๊ฒฐํ๋ฉด ์กฐ๊ธ ์ฌ์ฉํ๋ค๊ฐ ๋๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ฃ ? ํ๋์ ์์ดํ์ด๋ฅผ ๋ง์ ์ฌ๋๋ค์ด ์ฐ๊ฒฐํ๋ฉด ๊ทธ๋ฐ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ์. SSE์ ์ฐ๊ฒฐ๋ ์ํ์์ ์์ดํ์ด ์ฐ๊ฒฐ์ด ๋์ด์ ธ๋ฒ๋ฆฌ๋ฉด SSE ์ฐ๊ฒฐ๋ ๋ฐ๋ก ๋๊ฒจ๋ฒ๋ฆฝ๋๋ค.
- ์ฌ์ฐ๊ฒฐ์ ์ ๋ชฝ: SSE๋ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์ฒ์๋ถํฐ ๋ค์ ์์ฒญํด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ ๊ฐ ์ฐ๋ ๋ฐฑ์๋๋ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์ Cloud Functions์์ต๋๋ค.
- ๊ธฐ์ต์์ค์ฆ ๊ฑธ๋ฆฐ ์๋ฒ: Cloud Functions๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค. ์ฌ์ฉ์์ ์ฐ๊ฒฐ์ด ์ ๊น ๋๊ฒผ๋ค ๋ค์ ์ฐ๊ฒฐ๋๋ฉด, ์๊น ๊ทธ ์ธ์คํด์ค๊ฐ ์๋๋ผ ์๋ก์ด ๋ ๋ฆฝ์ ์ธ ์ธ์คํด์ค์ ๋ค์ ์ฐ๊ฒฐ๋ฉ๋๋ค. "์ ์๊น ์ ๋ฐ๊น์ง ๋ฐ์๋๋ฐ์?"๋ผ๊ณ ์ธ์ณ๋ดค์, ์ ์ธ์คํด์ค์ ํจ์๋ "๋๊ตฌ์ธ์? ์ฒ์๋ถํฐ ๋ค์ ๋ณด๋ด๋๋ฆฌ๊ฒ์ด."๋ผ๊ณ ๋ตํ ๋ฟ์ด์์ฃ .
์ด๊ฑธ ํด๊ฒฐํ๋ ค๋ฉด Last-Event-ID๋ฅผ ๋์ ํ๊ณ , ์๋ฒ ์ด๋๊ฐ์ ์งํ ์ํฉ์ ์ ์ฅํ๊ณ ... ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ์ปค์ง๋ ์ํฉ์ด ์์ต๋๋ค. "ํ ์คํธ ์ชผ๊ฐ๋ฆฌ ๋ณด์ฌ์ฃผ๋๋ฐ ์ด๋ ๊ฒ๊น์ง ํด์ผ ํด?" ํํ๊ฐ ์ค๋๋ผ๊ณ ์..
๐ก ํด๋ต์ ๊ฐ๊น์ด ์์๋ค

์ผ์ฃผ์ผ ๋์ ์ง SSE ์ฝ๋๋ฅผ ๋ถ๋ค๊ณ ๋๋๋๋ค๊ฐ, ๋ฌธ๋ ํ์ด์ด๋ฒ ์ด์ค ์ฝ์์ ๋ฉํ๋ ๋ณด๋๋ฐ Realtime Database (์ดํ RTDB)๊ฐ ๋์ ๋ค์ด์์ต๋๋ค. RTDB๋ฅผ ์ฌ์ฉํด๋ณธ ์ ์๋ ์ ๋ ์ด๊ฒ ๋ญ์ง ์ฐพ์๋ดค๊ณ , ๋ง ๊ทธ๋๋ก ๋ฐ์ดํฐ๊ฐ ๋ณํ๋ฉด ์ค์๊ฐ์ผ๋ก ๋๊ธฐํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ต๋๋ค.
๊ฐ์๊ธฐ ์๊ฐ์ด ๋ฒ๋ฉ ๋ ์ฌ๋์ต๋๋ค. ์๊ฐ์ ์์ ํ ๋ค์ง์ด๋ดค์ต๋๋ค. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ ๊ฒ์ด ์๋๋ผ, ์๋ฒ๋ DB์ ์ฐ๊ณ ํด๋ผ์ด์ธํธ๋ ๊ทธ๊ฑธ ์ณ๋ค๋ณด๋ ๋ฐฉ์์ผ๋ก์.
- ํด๋ผ์ด์ธํธ: "์ด ๋ ธ๋ ํด์ํด์ค!" ํ๊ณ RTDB์ ์์ฒญ ํฐ์ผ์ ์๋๋ค.
- Cloud Functions: ์ ์์ฒญ์ ๊ฐ์งํ๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ๋๋ฉ๋๋ค.
- Genkit (AI): ํด์์ ์์ฑํ๋ฉด์, ํ ๊ธ์ ๋์ฌ ๋๋ง๋ค RTDB์ ์์ฒญ ํฐ์ผ์ ๋ด์ฉ์ ๋ง๋ถ์ ๋๋ค.
- ํด๋ผ์ด์ธํธ: ์๊ธฐ๊ฐ ์ด RTDB ์์ฒญ ํฐ์ผ์ ์ณ๋ค๋ณด๊ณ ์๋ค๊ฐ, ๋ด์ฉ์ด ๋ณํ๋ฉด ํ๋ฉด์ ๊ทธ๋๋ก ๋ณด์ฌ์ค๋๋ค.
์ด ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๋ ๋ฐ๋ ํ๋ฃจ๋ ์ ๊ฑธ๋ ธ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ ๋๋ผ์ ์ต๋๋ค.

- ์งํ์ฒ ์์๋ OK: ์งํ์ฒ ์์ ์์ดํ์ด๊ฐ ๋๊ฒจ๋ ์๊ด์์ต๋๋ค. ์ธํฐ๋ท์ด ๋ค์ ์ฐ๊ฒฐ๋๋ ์๊ฐ, Firebase SDK๊ฐ ์์์ ์ต์ ๋ฐ์ดํฐ๋ฅผ DB์์ ๊ธ์ด์ ํ๋ฉด์ ์ฑ์์ค๋๋ค.
- ๋น์ฉ ์ ๊ฐ: SSE๋ฅผ ์ ์งํ๋ ค๋ฉด Cloud Functions ์ธ์คํด์ค๊ฐ ๊ณ์ ์ด์์์ด์ผ ํด์ ์๊ฐ๋น ๋น์ฉ์ด ๋๊ฐ๋๋ฐ, RTDB ๋ฐฉ์์ ํจ์๊ฐ ๋นจ๋ฆฌ๋นจ๋ฆฌ ์ฒ๋ฆฌํ๊ณ ๊บผ์ ธ๋ ๋ฉ๋๋ค. RTDB ์ฝ๊ธฐ/์ฐ๊ธฐ ๋น์ฉ์ด ํจ์ฌ ์ ๋ ดํ์ฃ .
- ์ฝ๋ ๋ค์ด์ดํธ: ์ปค์คํ fetch ๋ก์ง, ์ฒญํฌ ํ์ฑ ๋ก์ง, ์ฌ์ฐ๊ฒฐ ๋ก์ง... ๊ทธ ๋ณต์กํ๋ ์๋ฐฑ, ์์ฒ ์ค์ ์ฝ๋๋ฅผ ์์ ๋ฒ๋ฆด ์ ์์์ต๋๋ค.
โผ๏ธ ๋ฐฐ์ด ์
๋ฌผ๋ก ์ ๊ฐ ์ผ์ฃผ์ผ ๋์ ๊ณต๋ค์ฌ ์ง SSE ์ฝ๋๋ฅผ ์ ์์ผ๋ก ์ง์ธ ๋๋ ์์ด ์ข ์ฐ๋ ธ์ต๋๋ค... ํ์ง๋ง ์ด๋ฅผ ํตํด ๋ฐฐ์ด ์ ์ด ๋ช ๊ฐ์ง ์์์ต๋๋ค.
- HTTP์ ์คํธ๋ฆฌ๋ฐ์ ๋ณธ์ง: ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ง์ ๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ๊ณ ๋ฐ์๋ณด๋ฉด์, SSE ํต์ ์ด ์ ์์ค์์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์๊ฒ ๋์์ต๋๋ค.
- ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ํน์์ฑ: ๋ชจ๋ฐ์ผ ์๋น์ค๋ฅผ ์ํ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํน์์ฑ์ ์๊ฒ ๋์์ต๋๋ค. ๋ถ์์ ํ ๋คํธ์ํฌ๋ฅผ ์ ์ ๋ก ํ์ง ์๋ ๋ฐฑ์๋๋ ๋ชจ๋ฐ์ผ์์ ๋ฌด์ฉ์ง๋ฌผ์ด๋ผ๋ ๊ฒ์์.
- BaaS์ ์๋ ฅ: Firebase ๊ฐ์ BaaS๊ฐ ์ ์กด์ฌํ๋์ง, BaaS๊ฐ ํด๊ฒฐํด์ฃผ๋ ๊ท์ฐฎ์ ๋ฌธ์ ๋ค์ด ์ผ๋ง๋ ๊ฑฐ๋ํ์ง ์ฒด๊ฐํ์ต๋๋ค.
๊ฒฐ๊ตญ Lymo๋ RTDB์ Genkit์ ์กฐํฉ ๋๋ถ์, ์์ฃผ ๋งค๋๋ฝ๊ณ ๋๊น ์๋ ์ค์๊ฐ AI ํด์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๊ฒ ๋์์ต๋๋ค.
โก๏ธ ์ ๋ฆฌ ๋ฐ ๋ค์ ๋จ๊ณ
Genkit๊ณผ RTDB์ ์กฐํฉ์ ์ ๋ง ๊ฐ๋ ฅํ์ต๋๋ค. ๋น๋ก ์ฒ์์ SSE๋ก ๊ตฌํํ๋๋ผ ์ผ์ฃผ์ผ์ ๋ ๋ ธ์ง๋ง, ๋๋ถ์ ๋ง์ ๊ฑธ ๋ฐฐ์ ๋ค๊ณ ... ์ ์ ์น๋ฆฌ ํด๋ด ๋๋ค.. ใ ใ
๋ค์ ํธ์์๋, ์ด๋ ๊ฒ ํ๋ค๊ฒ ์ฐ๊ฒฐํ AI๊ฐ ํ์๋ฆฌํ ๋๋ง๋ค ์ ๊ฐ ์ด๋ป๊ฒ ํ๋กฌํํธ ์์ง๋์ด๋ง์ ํตํด AI๋ฅผ ์ฐธ๊ต์กํ๋์ง, ํ๋ก ํธ์๋ - ๋ฐฑ์๋ ๊ฐ์ ํ์ ์์ ์ฑ์ ๋ณด์ฅํด์ค Zod ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ๐