7 min read

AI์™€ ํ•จ๊ป˜ํ•˜๋Š” 2026๋…„ 1๋ถ„๊ธฐ, tRPC๋ฅผ ์„ ํƒํ•œ ์ด์œ 

Table of Contents

์‹œ์ž‘ํ•˜๋ฉฐ

์ฝ”๋”ฉ ์—์ด์ „ํŠธ์˜ ์„ฑ๋Šฅ์ด ๋‚ ๋กœ ์ข‹์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ƒ ํ•™์Šต์„ ์œ„ํ•œ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ, ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋Š” ์ ์  ๋” LLM Agent์— ์˜์กดํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์š”.

์ด๋Ÿฐ ๊ฐœ๋ฐœ ํ˜•ํƒœ๋ฅผ ์ทจํ•˜๋‹ค ๋ณด๋ฉด ์—ฌ๋Ÿฌ ๊ณ ๋ฏผ์— ๋ด‰์ฐฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ ํŠนํžˆ ๋‹ค์Œ ํฌ์ธํŠธ์—์„œ ๋ง‰ํž ๋•Œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • FE์™€ BE ๊ฐ„ API๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•  ๊ฒƒ์ธ๊ฐ€?
  • FE ํ˜น์€ BE ์ž‘์—… ๊ฐ„ API๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์„œ๋กœ ์ •ํ•ฉ์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ•  ๊ฒƒ์ธ๊ฐ€?
  • FE์—์„œ ์˜ฌ๋ฐ”๋ฅธ API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

OpenAPI Spec์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ๊ฒƒ์ด๊ณ , TypeSpec ๋“ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ๊ฒƒ์ด๊ณ , Sub Agent๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„ ๊ฒƒ์ด๊ณ  ๋‹ค์–‘ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณธ ๋’ค ๋‚˜๋ฆ„ ์ €์—๊ฒŒ ๊ฐ€์žฅ ๋‚˜์•˜๋˜ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ์ด์•ผ๊ธฐํ•˜์ž๋ฉด, FE์™€ BE๋ฅผ TypeScript๋กœ ํ†ต์ผํ•˜๊ณ  tRPC๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด ๊ฒฐ๋ก ์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Agent Coding์„ ์œ„ํ•œ ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ •์„ ๊ณ ๋ฏผํ•˜์‹œ๋Š” ๋ถ„๋“ค๊ป˜ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Agent Coding, ์‚ฌ๋žŒ์˜ ๊ฐœ๋ฐœ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค

๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ธฐ์ˆ  ์Šคํƒ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ธฐ ์ „์—, AI ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ด ์‚ฌ๋žŒ์˜ ๊ฐœ๋ฐœ๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€๋ฅผ ๋จผ์ € ์งš์–ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์œ ๋ฅผ ํ†ตํ•ด ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด AI๋Š” LLM ๋ชจ๋ธ์˜ ํŠน์„ฑ์ƒ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ง์ด ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ง์ด ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋†’์€ ํ™•๋ฅ ๋กœ ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ง€๋งŒ, ํ•ด๋‹น ๋…ผ๋ฆฌ์— ๋นˆํ‹ˆ์ด ์žˆ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋…ผ๋ฆฌ๊ฐ€ ๋“ค์–ด๊ฐ”์„ ๊ฒฝ์šฐ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋™์ž‘์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์‚ฌ๋žŒ์ด ๊ฐœ๋ฐœํ•  ๋•Œ๋ณด๋‹ค โ€œ๊ณ ์žฅ๋‚˜๋Š” ์ง€์ โ€์ด ๋” ๋งŽ์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ฐจ์ด๊ฐ€ ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ •์— ์žˆ์–ด์„œ๋„ ์ค‘์š”ํ•œ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์„ ํƒ: FE์™€ BE๋ฅผ ํ•ฉ์น  ๊ฒƒ์ธ๊ฐ€, ๋‚˜๋ˆŒ ๊ฒƒ์ธ๊ฐ€

๊ฐ€์žฅ ๋จผ์ € ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๋Š” ์งˆ๋ฌธ์€ FE์™€ BE๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐœ๋ฐœํ•  ๊ฒƒ์ธ๊ฐ€์ž…๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ์Šคํƒ์˜ ์‹œ๋„

์ฒ˜์Œ์—๋Š” ๋งŽ์€ ๋ถ„๋“ค์ด ๊ทธ๋Ÿฌํ•˜๋“ฏ, Next.js์˜ Server Actions๋‚˜ API Routes๋ฅผ ํ™œ์šฉํ•ด FE์™€ BE๋ฅผ ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์—์„œ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” ํ’€์Šคํƒ ๊ตฌ์„ฑ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. Supabase์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๋ณ„๋„์˜ BE ์„œ๋ฒ„ ์—†์ด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋งค๋ ฅ์ ์ด์—ˆ์ฃ . Ruby on Rails์—์„œ View๊นŒ์ง€ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์—ญ์‹œ ๋น„์Šทํ•œ ๋งฅ๋ฝ์—์„œ ๊ณ ๋ คํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ์Šคํƒ์—์„œ ๋“œ๋Ÿฌ๋‚œ ๋ฌธ์ œ์ 

ํ•˜์ง€๋งŒ Agent ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ ํ†ตํ•ฉ ์Šคํƒ ํŠน์œ ์˜ ๋ฌธ์ œ๊ฐ€ ๋„๋“œ๋ผ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋ฆฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ž˜ ๋‚˜๋ˆ„๊ณ  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ž˜ ์„ค๊ณ„ํ•œ๋‹ค๊ณ  ํ•ด๋„, ์–ด๋А ์ˆœ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋ง์ด ์•ˆ๋˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์€๋ฐ ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ๋ Œ๋”๋ง์ด ์•ˆ๋œ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์ผ์ด ์žˆ์—ˆ์ฃ .

๋ฌผ๋ก  ์ด๋Ÿฐ ๋ถ€๋ถ„์„ Agent์—๊ฒŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ Instruction์„ ์ค˜์„œ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ฒŒ ํ•œ๋‹ค๋“ ๊ฐ€, ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ ์„ค์ •์„ ์ž˜ ํ•œ๋‹ค๋“ ๊ฐ€ ๋“ฑ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฑธ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  ์—”์ง€๋‹ˆ์–ด๋กœ์„œ ๊นŠ์€ ์ดํ•ด๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ–ˆ๊ณ , ์ด๋Š” ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋ฒ”์ฃผ๋ณด๋‹ค๋Š” ํŠน์ • ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๋””ํ…Œ์ผํ•œ ์—”์ง€๋‹ˆ์–ด๋ง์œผ๋กœ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ธธ์–ด์ง€๋ฉด์„œ ๊ทธ๋Ÿฌํ•œ ์ง€์นจ์„ ์–ด๊ธฐ๊ฒŒ ๋˜๋ฉด ๋‹ค์‹œ ๊ทธ๊ฑธ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์œผ๋กœ ์—์ด์ „ํŠธ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ๊ธธ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ธ๊ฐ€์— ๋Œ€ํ•œ ์˜๋ฌธ๋„ ํ•จ๊ป˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถ„๋ฆฌ์˜ ๊ฒฐ๋ก 

๊ฒฐ๊ตญ ์ €๋Š” FE์™€ BE๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค.

ํฐ ํ‹€์—์„œ FE์™€ BE๋ฅผ ๋‚˜๋ˆ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด AI๊ฐ€ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ๊ณผ ๋™์‹œ์—, ์ผ์ข…์˜ ๋‚ด์žฅ์• ์„ฑ์„ ๊ฐ–์ถ”๊ฒŒ ํ•˜๋Š” ํฐ ๊ธฐํ‹€์ด ๋œ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. FE๋Š” ์‚ฌ์šฉ์ž์™€ ๋งž๋‹ฟ๋Š” ๋ถ€๋ถ„์˜ ์—”์ง€๋‹ˆ์–ด๋ง๊ณผ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜๊ณ , BE์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ๋งž๋‹ฟ๋Š” ๋ถ€๋ถ„์˜ ์—”์ง€๋‹ˆ์–ด๋ง๊ณผ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

๋‘ ๋ฒˆ์งธ ์„ ํƒ: ์–ด๋–ค ์–ธ์–ด๋ฅผ ์“ธ ๊ฒƒ์ธ๊ฐ€

FE์™€ BE๋ฅผ ๋‚˜๋ˆ ๋†“๊ณ  ์ƒ๊ฐํ•˜๋‹ค ๋ณด๋ฉด, ๊ฐ ๋ชจ๋“ˆ์— ์–ด๋–ค ์–ธ์–ด๋ฅผ ์“ธ์ง€ ๋ฐ”๋กœ ๋”ฐ๋ผ์„œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์–ธ์–ด์˜ ์‹œ๋„

์ดˆ๊ธฐ์—๋Š” FE๋ฅผ TypeScript๋กœ, BE๋ฅผ Java ํ˜น์€ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์กฐํ•ฉ๋„ ์‹œ๋„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๊ฐ ์–ธ์–ด๊ฐ€ ๊ฐ€์ง„ ์ƒํƒœ๊ณ„์˜ ๊ฐ•์ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์ฃ .

๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ๋“œ๋Ÿฌ๋‚œ ๋ฌธ์ œ์ 

ํ•˜์ง€๋งŒ ์–ธ์–ด๊ฐ€ ๋‹ค๋ฅด๋ฉด Agent์˜ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ์ธ์ง€๋ ฅ์ด ํ™• ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์ฒด๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ๊ฐ ์–ธ์–ด์˜ ํƒ€์ดํ•‘ ์ฒ ํ•™ ํ˜น์€ ๋ณ€์ˆ˜, ํƒ€์ž… ์„ ์–ธ์— ๋Œ€ํ•œ ๋ฌธ๋ฒ•์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ชจ๋ธ์˜ ์ƒํ˜ธ ์ฝ”๋“œ ์ดํ•ด๋ ฅ์ด ํ™• ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋ น ๋• ํƒ€์ดํ•‘๊ณผ ํƒ€์ž… ์—ฐ์‚ฐ์ด ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ๋˜๋Š” TypeScript FE ์†Œ์Šค ์ฝ”๋“œ์™€, ์ •์  ํƒ€์ดํ•‘๊ณผ ์ œ๋„ˆ๋ฆญ ๊ธฐ๋ฐ˜์˜ ํƒ€์ž…์ด ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉ๋˜๋Š” Java BE ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ‘์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด Agent๊ฐ€ ํ•œ์ˆœ๊ฐ„์— ๊ฐˆํ”ผ๋ฅผ ๋ชป ์žก๋Š” ์ƒํ™ฉ๋„ ์ž์ฃผ ๋งž๋‹ฅ๋œจ๋ ธ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์—ด ๋•Œ๋งˆ๋‹ค ์•„๋ฌด๋ฆฌ ๊ธฐ์กด ๋ฌธ์„œ๋ฅผ ๋จผ์ € ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ํ•˜๋”๋ผ๋„ ๋งค๋ฒˆ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ์™€ ๊ฒฐ๋ก ์„ ๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. A ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋‚ด์šฉ์„ ์ดํ•ดํ•œ ๋‹ค์Œ, B ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•œ ๋‚ด์šฉ๊ณผ ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ ์ปจํ…์ŠคํŠธ์™€ ํŒ๋‹จ์— ๋งŽ์€ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์ด์—ˆ์ฃ .

ํ•˜๋‚˜์˜ ์–ธ์–ด๋กœ์˜ ์ˆ˜๋ ด

๊ฒฐ๊ตญ ์ €๋Š” ํ•˜๋‚˜์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‚ซ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. FE๋Š” ๋†’์€ ํ™•๋ฅ ๋กœ TypeScript๋กœ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ˆ, BE๋„ Node ํ˜น์€ Bun์„ ํ™œ์šฉํ•ด TypeScript๋กœ ๊ฐœ๋ฐœํ•˜๊ณ , ๋งŒ์•ฝ ๋ชจ๋ฐ”์ผ ์•ฑ๊นŒ์ง€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ตœ๊ทผ ๊ด„๋ชฉ์ƒ๋Œ€ํ•œ Expo ๊ธฐ๋ฐ˜์˜ React Native ์•ฑ์„ TypeScript๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ์–ด๋„ 2026๋…„ ํ˜„์žฌ, TypeScript๋Š” ํ’€์Šคํƒ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์–ธ์–ด๋ผ๋Š” ์ƒ๊ฐ, ๊ทธ๋ฆฌ๊ณ  ํ’๋ถ€ํ•œ ํ•™์Šต ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์–ธ์–ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์„ ํƒ: FE์™€ BE ์‚ฌ์ด์˜ API๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•  ๊ฒƒ์ธ๊ฐ€

FE์™€ BE๋ฅผ ๋‚˜๋ˆ  ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ์ •ํ•˜๊ณ  ๋‚˜๋ฉด, ๊ทธ๋‹ค์Œ์— ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ API์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์„œ๋กœ ์†Œํ†ตํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ๋ช…์‹œํ•˜๋Š” ๊ฒƒ, ๊ฒฐ๋ก ์ ์œผ๋กœ ์–ด๋–ค ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์–ด๋–ค ์›๊ฒฉ ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์–ด๋–ค ๋ฐ˜ํ™˜๊ฐ’์ด ๋„˜์–ด์˜ค๋Š”๊ฐ€์— ๋Œ€ํ•œ ๊ฒƒ์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

OpenAPI Specification์˜ ์‹œ๋„

๊ฐ€์žฅ ๋จผ์ € ์‹œ๋„ํ•œ ๊ฒƒ์€ OpenAPI Specification(OAS)์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์—…๊ณ„ ํ‘œ์ค€์ด๊ธฐ๋„ ํ•˜๊ณ , Agent์—๊ฒŒ ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด ๊ทธ์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ๊ธฐ๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

OpenAPI Specification์—์„œ ๋“œ๋Ÿฌ๋‚œ ๋ฌธ์ œ์ 

ํ•˜์ง€๋งŒ ์ด ๋ถ€๋ถ„์— ์žˆ์–ด ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•˜๋”๋ผ๋„ FE์™€ BE ์‚ฌ์ด์— ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ๊ฐ€ ์ฐธ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. OAS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„ JSON์ด ๊ณผํ•˜๊ฒŒ ์ปค์ง€๋ฉด์„œ ์ปจํ…์ŠคํŠธ์— ๋ถ€๋‹ด์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. Agent๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ์— ๋น„๋Œ€ํ•œ JSON ์ŠคํŽ™์ด ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋ฉด์„œ, ์ •์ž‘ ์ค‘์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ๋–จ์–ด์ง€๋Š” ๊ฒƒ์ด์—ˆ์ฃ . ์ŠคํŽ™์„ ๋จผ์ € ์ •์˜ํ•˜๊ณ  ๊ทธ์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•˜๋ฉด ์ •ํ•ฉ์„ฑ์ด ๋ณด์žฅ๋  ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ณดํ˜ธํ•ด์•ผ ํ•  ๋Œ€์ƒ๋ณด๋‹ค ๋ณดํ˜ธ ์žฅ์น˜๊ฐ€ ๋” ๋ฌด๊ฑฐ์›Œ์ง„ ์…ˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  gRPC๋ฅผ ํ™œ์šฉํ•˜๊ธฐ์—” ์ด๊ฑธ FE์™€ BE ์‚ฌ์ด์— ์‚ฌ์šฉํ•˜๋Š” ์œ ์ฆˆ์ผ€์ด์Šค๊ฐ€ ์ž˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ tRPC

๊ทธ๋ž˜์„œ ๊ณ ๋ฏผํ•˜๋˜ ์ฐจ์— ๋งŒ๋‚˜๊ฒŒ ๋œ ๊ฒƒ์ด tRPC์ž…๋‹ˆ๋‹ค.

tRPC๋Š” Zod ๊ธฐ๋ฐ˜์œผ๋กœ API Specification์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๊ฑธ ๋ชจ๋…ธ๋ ˆํฌ๋‚˜ ๋ณ„๋„ ํŒจํ‚ค์ง€๋กœ ๋ฝ‘์•„๋‘๋ฉด FE์™€ BE์—์„œ ์–ธ์ œ๋“ ์ง€ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ณตํ†ต์˜ ์ŠคํŽ™์„ ๋ฐ”๋ผ๋ณด๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

OAS์ฒ˜๋Ÿผ ๋ณ„๋„์˜ ๊ฑฐ๋Œ€ํ•œ JSON ์ŠคํŽ™ ๋ฌธ์„œ๊ฐ€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. TypeScript ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๊ณง ์ŠคํŽ™์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— Agent๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ API์˜ ์ž…์ถœ๋ ฅ์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// shared/schema.ts
import { z } from "zod";

export const CreateUserInput = z.object({
  name: z.string(),
  email: z.string().email(),
});

export const UserOutput = z.object({
  id: z.string().uuid(),
  name: z.string(),
  email: z.string().email(),
  createdAt: z.string().datetime(),
});

์–ธ์–ด๊ฐ€ ๋™์ผํ•˜๋‹ˆ FE์—์„œ BE์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์žฅ๋˜๊ณ , Agent๊ฐ€ ์ž˜๋ชป๋œ API๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ๋Š” ์‹ค์ˆ˜๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฑธ ๋ฒค์น˜๋งˆํฌ๋กœ ๋ฝ‘์•„๋ณผ ๋ฐฉ๋ฒ•์„ ์•„์ง ๊ณ ๋ฏผํ•ด๋ณด์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ, ์ €์˜ ๋Œ€๋ถ€๋ถ„์˜ ์œ ์ฆˆ์ผ€์ด์Šค์—์„œ ์ข‹์€ ์„ฑ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Agent Coding์— ์ ํ•ฉํ•œ ๊ธฐ์ˆ  ์Šคํƒ์˜ ์กฐ๊ฑด

์ด๋Ÿฌํ•œ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฑฐ์น˜๋ฉฐ ๋А๋‚€, Agent Coding์— ์ ํ•ฉํ•œ ๊ธฐ์ˆ  ์Šคํƒ์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ปจํ…์ŠคํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ: Agent๊ฐ€ ํ•œ ๋ฒˆ์— ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. FE์™€ BE๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ด€์‹ฌ์‚ฌ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ทธ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.
  • ๋‹จ์ผ ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ํ’€์Šคํƒ: ์–ธ์–ด๊ฐ€ ๋‹ค๋ฅด๋ฉด Agent์˜ ์ปจํ…์ŠคํŠธ ์ „ํ™˜ ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์–ธ์–ด๋กœ FE์™€ BE๋ฅผ ๊ด€ํ†ตํ•˜๋Š” ๊ฒƒ์ด Agent์˜ ์ดํ•ด๋„์™€ ์ผ๊ด€์„ฑ์„ ๋†’์ด๋Š” ๋ฐ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ์ŠคํŽ™์ด ๋˜๋Š” API ๊ณ„์•ฝ: ๋ณ„๋„์˜ ์ŠคํŽ™ ๋ฌธ์„œ๊ฐ€ ์ปจํ…์ŠคํŠธ๋ฅผ ์••๋„ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„, ํƒ€์ž… ์ˆ˜์ค€์—์„œ FE์™€ BE ๊ฐ„์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. tRPC๊ฐ€ ์ด ์กฐ๊ฑด์— ๊ฐ€์žฅ ๋ถ€ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

์ตœ๊ทผ ๊ธฐ์ˆ  ์Šคํƒ์œผ๋กœ React ๊ธฐ๋ฐ˜ FE์— tRPC๋ฅผ ํ™œ์šฉํ•˜๊ณ , BE๋Š” Fastify ๊ธฐ๋ฐ˜ tRPC ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. FE ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Vite๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , SSR์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Next.js๋ฅผ ๋ Œ๋”๋ง ๋ ˆ์ด์–ด๋กœ๋งŒ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

AI ๊ธฐ์ˆ ์ด ๋” ๋ฐœ์ „ํ•˜๋ฉด์„œ ๋กœ์ปฌ์˜ ํŒŒ์ผ์„ ๋” ํšจ์œจ์ ์œผ๋กœ Retrieval ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋ก ์ด ๊ฐœ๋ฐœ๋˜๊ฑฐ๋‚˜, ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ์†๋„๋กœ ๋ชจ๋ธ์ด ๊ณ„์† ๋ฐœ์ „ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ฐฉ๋ฒ•๋ก ์ด ๋˜ ๋ฐ”๋€”์ง€๋„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ์–ด๋„ Opus 4.5, Opus 4.6 ์‹œ๋Œ€์—๋Š” ์ด ์กฐํ•ฉ์ด ์œ ํšจํ•œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

Agent Coding์„ ์œ„ํ•œ ๊ธฐ์ˆ  ์Šคํƒ ์„ ์ •์„ ๊ณ ๋ฏผํ•˜๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด, ๊ธฐ์ˆ ์˜ ์œ ํ–‰๋งŒ์„ ๋ณด๊ธฐ๋ณด๋‹ค๋Š” AI ์—์ด์ „ํŠธ์˜ ํŠน์„ฑ๊ณผ ํ•œ๊ณ„๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์œผ๋กœ ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ ์‚ฌ๋ก€๊ฐ€ ๊ทธ ๊ธธ์„ ๊ณ ๋ฏผํ•˜๋Š” ๋ถ„๋“ค๊ป˜ ํ•œ๋ฒˆ์ฏค ์žฌ๊ณ ํ•˜๋Š” ๋ฐ์— ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.