Vercel ์š”๊ธˆ ์ ˆ๊ฐ: FastAPI ์ •์  ํŒŒ์ผ์ด Function์„ ๊ฑด๋„ˆ๋›ด๋‹ค

Vercel์ด FastAPI์˜ app.frontend()์™€ StaticFiles ์š”์ฒญ์„ CDN์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. Function ํ˜ธ์ถœยท์ปดํ“จํŒ… ์‚ฌ์šฉ๋Ÿ‰์€ ์ค„์ง€๋งŒ CDN ์š”์ฒญ๊ณผ ์ „์†ก๋Ÿ‰์€ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ ์šฉ ์กฐ๊ฑด, ๋ณด์•ˆ ์˜ˆ์™ธ, ์‹ค์ œ Vercel ์š”๊ธˆ ์ ˆ๊ฐ ๋ฒ”์œ„๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œ์ผ

์ž‘์„ฑ์ž
Vercel ์š”๊ธˆ ์ ˆ๊ฐ: FastAPI ์ •์  ํŒŒ์ผ์ด Function์„ ๊ฑด๋„ˆ๋›ด๋‹ค

2026๋…„ 9์›” 10์ผ, Vercel์€ FastAPI ์•ฑ์˜ Vercel ์š”๊ธˆ ๊ตฌ์กฐ์—์„œ ํ•œ ํ•ญ๋ชฉ์„ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ ์šฉ ๋Œ€์ƒ ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฐ ์ •์  ํŒŒ์ผ ์š”์ฒญ์€ Vercel CDN์—์„œ ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ๊ณง๋ฐ”๋กœ ์ „๋‹ฌ๋˜๋ฏ€๋กœ Function ํ˜ธ์ถœ๊ณผ ์ปดํ“จํŒ… ์‚ฌ์šฉ๋Ÿ‰์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ CDN ์š”์ฒญ๊ณผ ์ „์†ก๋Ÿ‰์€ ๊ทธ๋Œ€๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ๋ณ€๊ฒฝ์€ ์ •์  ํŒŒ์ผ ์ „์†ก์„ ๋ฌด๋ฃŒ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Function ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š” ์กฐ์น˜์ž…๋‹ˆ๋‹ค.

Vercel FastAPI ๋ฐฐํฌ ํ›„ ์š”์ฒญ์ด Function์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค

์ •์  ํŒŒ์ผ์€ HTML ํŒŒ์ผ, ์Šคํƒ€์ผ์‹œํŠธ, JavaScript ๋ฒˆ๋“ค, ํฐํŠธ, ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์„œ๋ฒ„๊ฐ€ ์ˆ˜์ • ์—†์ด ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. Vercel Function์€ ๋™์  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜๋Š” FastAPI ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค. CDN์€ ๋ฐฉ๋ฌธ์ž ๊ฐ€๊นŒ์ด์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์ „์—๋Š” FastAPI๋ฅผ ํ†ตํ•ด ๋งˆ์šดํŠธํ•œ ํŒŒ์ผ๋„ Function ๊ฒฝ๋กœ๋ฅผ ๊ฑฐ์น  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์ด Vercel ๋„คํŠธ์›Œํฌ์— ๋„์ฐฉํ•˜๋ฉด FastAPI Function์„ ํ˜ธ์ถœํ•˜๊ณ , Python์ด ํŒŒ์ผ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ Vercel์€ ๋นŒ๋“œ ๊ณผ์ •์—์„œ app.frontend()์™€ FastAPI์˜ StaticFiles ๋’ค์— ์žˆ๋Š” ์ ์šฉ ๋Œ€์ƒ ํŒŒ์ผ์„ ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์„ CDN์œผ๋กœ ์˜ฌ๋ฆฌ๊ณ , ์ผ์น˜ํ•˜๋Š” ์š”์ฒญ์€ Function์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๋€๋‹ˆ๋‹ค.

visitor โ†’ CDN โ†’ FastAPI Function โ†’ file โ†’ visitor

์—์„œ

visitor โ†’ CDN file โ†’ visitor

๋กœ ์งง์•„์ง‘๋‹ˆ๋‹ค.

๋™์  API๊นŒ์ง€ ์ •์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์กฐ๊ฑด์— ๋งž๋Š” ํŒŒ์ผ๋งŒ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์˜ public/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋‘” ํŒŒ์ผ์€ ์ด๋ฏธ CDN์—์„œ ์ œ๊ณต๋˜๊ณ  ์žˆ์—ˆ์œผ๋ฏ€๋กœ, ๋ชจ๋“  ๊ณต๊ฐœ ์—์…‹์„ ๊ทธ๊ณณ์— ๋‘” ์•ฑ์ด๋ผ๋ฉด ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค๋กœ ์ƒˆ๋กญ๊ฒŒ ์ ˆ๊ฐ๋˜๋Š” ์‚ฌ์šฉ๋Ÿ‰์€ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๋ชจ์…˜๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ Function ๋ฒˆ๋“ค ์•ˆ์— ๋‚จ์Šต๋‹ˆ๋‹ค. tool.vercel.fastapi.static.exclude = true๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ค‘๋ณต ์‚ฌ๋ณธ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ๋ณ„๋„์˜ ๋ฒˆ๋“ค ๊ตฌ์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. CDN ์š”์ฒญ ๊ฒฝ๋กœ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ์„ค์ •์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ณต๊ฐœ FastAPI ์—์…‹์€ ๋ฐฉ๋ฌธ์ž์—์„œ CDN์œผ๋กœ ์ด์–ด์ง€๋Š” ์งง์€ ๊ฒฝ๋กœ๋ฅผ ํƒํ•˜๊ณ , ๋ณดํ˜ธ๋œ ์—์…‹์€ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ๊ฑฐ์ณ Function์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ชจ์Šต์„ ๋‚˜ํƒ€๋‚ธ ์•„ํ‚คํ…์ฒ˜ ๋‹จ๋ฉด๋„
๊ณต๊ฐœ ์—์…‹์€ CDN์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ๋๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์„ FastAPI์—์„œ ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๋Š” ๋ณดํ˜ธ ์—์…‹์€ ๊ณ„์† Function์„ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Vercel ์š”๊ธˆ์—์„œ ๋น ์ง€๋Š” ๊ฒƒ์€ ์ปดํ“จํŒ…์ด์ง€ ์ „์†ก์ด ์•„๋‹™๋‹ˆ๋‹ค

Vercel์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ  ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. Function Invocations๋Š” ์ฝ”๋“œ์— ๋„๋‹ฌํ•œ ์š”์ฒญ ์ˆ˜๋ฅผ ์…‰๋‹ˆ๋‹ค. Active CPU์™€ Provisioned Memory๋Š” ํ•ด๋‹น ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋œ ์—ฐ์‚ฐ ์ž‘์—…๊ณผ ๋Ÿฐํƒ€์ž„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. Fast Origin Transfer๋Š” CDN๊ณผ Function ์‚ฌ์ด์—์„œ ์˜ค๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์ „์†ก ๊ณ„์ธต์˜ ์ธก์ • ํ•ญ๋ชฉ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์—์„œ Edge Requests๋กœ ํ‘œ์‹œ๋˜๋Š” CDN Requests๋Š” ์ •์  ์—์…‹๊ณผ Function ํŠธ๋ž˜ํ”ฝ์— ๋ชจ๋‘ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Fast Data Transfer๋Š” CDN์—์„œ ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ์ „์†ก๋œ ๋ฐ”์ดํŠธ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ์ „์—๋Š” Function์— ๋„๋‹ฌํ–ˆ์ง€๋งŒ ๋ฐฐํฌ ํ›„์—๋Š” ํ”„๋กœ๋ชจ์…˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š”, ๊ทธ ๋ฐ–์˜ ์กฐ๊ฑด์ด ๋™์ผํ•œ ์—์…‹ ์š”์ฒญ ๋ฐฑ๋งŒ ๊ฑด์„ ๊ธฐ์ค€์œผ๋กœ ์žฅ๋ถ€๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ธก์ • ํ•ญ๋ชฉํ”„๋กœ๋ชจ์…˜ ์ „ํ”„๋กœ๋ชจ์…˜ ํ›„
Function Invocations1 million0
ํ•ด๋‹น ์š”์ฒญ์˜ Active CPU์ธก์ •๋จ0
ํ•ด๋‹น ์š”์ฒญ์˜ Provisioned Memory์ธก์ •๋จ0
ํ•ด๋‹น ์‘๋‹ต์˜ Fast Origin Transfer์ธก์ •๋จ0
CDN Requests ๋˜๋Š” Edge Requests1 million1 million
๋ฐฉ๋ฌธ์ž ๋Œ€์ƒ Fast Data Transfer์ธก์ •๋œ ๋ฐ”์ดํŠธ์ธก์ •๋œ ๋ฐ”์ดํŠธ

๊ณต๊ฐœ๋œ Pro ์š”๊ธˆ์€ Function ํ˜ธ์ถœ ๋ฐฑ๋งŒ ๊ฑด๋‹น $0.60์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „์—๋Š” Function์— ๋„๋‹ฌํ–ˆ๋˜ ํŒŒ์ผ ์š”์ฒญ ๋ฐฑ๋งŒ ๊ฑด์ด ๋น ์ง€๋ฉด ์›”๊ฐ„ ํฌ๋ ˆ๋”ง ์ ์šฉ ์ „ ์ด Function ํ˜ธ์ถœ ์‚ฌ์šฉ๋ฃŒ์—์„œ $0.60์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ํ•ด๋‹น ์š”์ฒญ์ด ์‹ค์ œ๋กœ ์†Œ๋น„ํ•œ Active CPU, Provisioned Memory, Fast Origin Transfer๋„ ํ•จ๊ป˜ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ์ ˆ๊ฐ์•ก์€ Usage ๋ฐ์ดํ„ฐ๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Python์„ ๊ฑฐ์˜ ๊ฑฐ์น˜์ง€ ์•Š์€ ํŒŒ์ผ ์‘๋‹ต์ด๋ผ๋ฉด ์ค„์–ด๋“œ๋Š” CPU๋„ ์ ์Šต๋‹ˆ๋‹ค. ์‘๋‹ต ํŒŒ์ผ์ด ํฌ๋‹ค๋ฉด ์ค„์–ด๋“œ๋Š” origin transfer๋Š” ๋” ๋งŽ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์ƒˆ๋กœ์šด ์š”์ฒญ ๊ฒฝ๋กœ์ด์ง€, ๋ชจ๋“  ์•ฑ์— ํ†ต์šฉ๋˜๋Š” ์ ˆ๊ฐ๋ฅ ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์žฅ๋ถ€ ๋ฐ˜๋Œ€ํŽธ์—๋Š” CDN ์‚ฌ์šฉ๋Ÿ‰์ด ๊ทธ๋Œ€๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค. Vercel์˜ ํ˜„์žฌ CDN ์š”๊ธˆ ํŽ˜์ด์ง€์— ๋”ฐ๋ฅด๋ฉด ์˜จ๋””๋งจ๋“œ ์ฒญ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Pro์—์„œ๋Š” ์ตœ์ดˆ ์ฒœ๋งŒ ๊ฑด์˜ Edge Requests์™€ ์ตœ์ดˆ 1 TB์˜ Fast Data Transfer๊ฐ€ ํฌํ•จ๋˜๊ณ , ์ดํ›„์—๋Š” ์ง€์—ญ๋ณ„ ์‚ฌ์šฉ ์š”๊ธˆ์ด ๋ถ™์Šต๋‹ˆ๋‹ค. Flat Rate CDN์„ ์“ฐ๋Š” ํŒ€์€ ๋Œ€์‹  ํ•ด๋‹น ํ”Œ๋žœ์˜ ์š”์ฒญ ๋ฐ ์ „์†ก ์šฉ๋Ÿ‰์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ„๋„ ์˜ˆ์‚ฐ ๊ฒฐ์ •์€ Flat Rate CDN ํ•ด์„ค์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Hobby์—์„œ๋Š” ํ˜„๊ธˆ ์ฒญ๊ตฌ์•ก๋ณด๋‹ค ์—ฌ์œ  ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚˜๋Š” ํšจ๊ณผ๊ฐ€ ํด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Hobby์—๋Š” Function ํ˜ธ์ถœ ๋ฐฑ๋งŒ ๊ฑด, Active CPU ๋„ค ์‹œ๊ฐ„, Provisioned Memory 360 GB-hours๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. Function์— ๋” ์ด์ƒ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ๊ณต๊ฐœ ํŒŒ์ผ ํŠธ๋ž˜ํ”ฝ์€ ์ด ํ•œ๋„๋ฅผ ์†Œ๋ชจํ•˜์ง€ ์•Š์ง€๋งŒ, ํ•ด๋‹น๋˜๋Š” CDN ์ „์†ก ์‚ฌ์šฉ๋Ÿ‰์€ ๊ณ„์† ์ง‘๊ณ„๋ฉ๋‹ˆ๋‹ค.

FastAPI StaticFiles์™€ ํ”„๋ŸฐํŠธ์—”๋“œ์˜ ์ ์šฉ ์—ฌ๋ถ€๋Š” ๋ผ์šฐํŠธ์™€ ๋ณด์•ˆ ๊ทœ์น™์ด ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค

Vercel์€ StaticFiles์— ๋Œ€ํ•ด FastAPI์˜ ์„ ์–ธ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋งˆ์šดํŠธ๋ณด๋‹ค ๋จผ์ € ์„ ์–ธํ•œ ๋ผ์šฐํŠธ๊ฐ€ ๊ฐ™์€ ๊ฒฝ๋กœ์—์„œ ์šฐ์„ ํ•˜๋ฉฐ Function์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ ๋’ค์— ์„ ์–ธํ•œ ๋ผ์šฐํŠธ๋Š” CDN ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

app.frontend()๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. API ๋ผ์šฐํŠธ๋Š” ์„ ์–ธ ์ˆœ์„œ์™€ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ํ”„๋ŸฐํŠธ์—”๋“œ ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋•๋ถ„์— /์— ๋งˆ์šดํŠธํ•œ ํ”„๋ŸฐํŠธ์—”๋“œ๊ฐ€ ์‹ค์ œ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€๋กœ์ฑ„์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ ์š”๊ฑด๋„ ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. CDN ํŒŒ์ผ์€ Python์— ์ง„์ž…ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ FastAPI ๋ฏธ๋“ค์›จ์–ด์™€ Depends() ๊ฒ€์‚ฌ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Vercel์€ ๋‹ค์Œ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ Function์— ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค.

  • ์•ฑ์— ์ตœ์ƒ์œ„ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์žˆ์œผ๋ฉด ๋ชจ๋“  ์ •์  ๋งˆ์šดํŠธ์™€ ํ”„๋ŸฐํŠธ์—”๋“œ.
  • ํ•˜์œ„ ์•ฑ์— ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ํ•˜์œ„ ์•ฑ์˜ ์ •์  ๋งˆ์šดํŠธ.
  • FastAPI ์˜์กด์„ฑ์œผ๋กœ ๋ณดํ˜ธ๋˜๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ.

cdn = false๋Š” ๋ฐ˜๋Œ€์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋ชจ์…˜์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ์š”์ฒญ์„ Function์— ๋‚จ๊น๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ ์š”์ฒญ์„ ๋ฐ˜๋“œ์‹œ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ํƒ€๋‹นํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

์ž‘์ง€๋งŒ ์•Œ์•„๋‘˜ ์˜ˆ์™ธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. StaticFiles ๋งˆ์šดํŠธ์˜ ์Šฌ๋ž˜์‹œ ์—†๋Š” ๋ฃจํŠธ ์š”์ฒญ์€ FastAPI๊ฐ€ ๋์— ์Šฌ๋ž˜์‹œ๊ฐ€ ๋ถ™์€ ํ˜•์‹์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ„์† Function์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์š”์ฒญํ•œ๋‹ค๋ฉด Function ์‚ฌ์šฉ๋Ÿ‰์ด ์ •ํ™•ํžˆ 0์ด ๋˜๋ฆฌ๋ผ๊ณ  ๊ธฐ๋Œ€ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ๋‹ฌ๋ผ์ง€๋Š” ์ง€์ 

FastAPI ์ €์žฅ์†Œ ํ•˜๋‚˜๋กœ SaaS๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฐœ์ธ ์ฐฝ์—…์ž

app.frontend()๋กœ ๋ฒˆ๋“ค๋œ ์›น ์•ฑ์„ ์ œ๊ณตํ•˜๋Š” ์ฐฝ์—…์ž๋Š” API๋ฅผ ๋™์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ณต๊ฐœ HTML, CSS, JavaScript ํŠธ๋ž˜ํ”ฝ์„ Function ๊ฒฝ๋กœ ๋ฐ–์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ๋Š” ์ปดํ“จํŒ… ๊ธฐ์ค€์„ ์ด ๋” ๋ช…ํ™•ํ•ด์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ œํ’ˆ ํŠธ๋ž˜ํ”ฝ์ด ๋Š˜์–ด๋„ ๋ธŒ๋ผ์šฐ์ €์˜ ์—์…‹ ์š”์ฒญ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๋ฐฑ์—”๋“œ ์ž‘์—…์ฒ˜๋Ÿผ ์žกํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐœ ํŒŒ์ผ๊ณผ ๊ณ ๊ฐ ์ „์šฉ ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ์—์ด์ „์‹œ ์—”์ง€๋‹ˆ์–ด

์—์ด์ „์‹œ ์—”์ง€๋‹ˆ์–ด๋Š” ๊ณต๊ฐœ ์…ธ์€ CDN์— ๋‘๊ณ , ๋ฏผ๊ฐํ•œ ๋ผ์šฐํŠธ๋Š” ์ •์  ๋งˆ์šดํŠธ๋ณด๋‹ค ๋จผ์ € ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ํšจ๊ณผ๋Š” Function ์‚ฌ์šฉ๋Ÿ‰ ์ ˆ๊ฐ์— ๊ทธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ณ ๊ฐ ํŒŒ์ผ์€ Python์—์„œ ์ ‘๊ทผ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด์•ผ ํ•˜๊ณ  ์–ด๋–ค ํŒŒ์ผ์€ ๊ทธ๋ ‡์ง€ ์•Š์€์ง€ ๋ผ์šฐํŠธ ๋งต์— ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

์žฌ๋ฌดํŒ€๊ณผ ํ˜‘์—…ํ•˜๋Š” ๋ฐฑ์—”๋“œ ๋ฆฌ๋“œ

๋ฐฑ์—”๋“œ ๋ฆฌ๋“œ๋Š” ์žฌ๋ฌดํŒ€์— ๋‘ ๊ฐ€์ง€ ์˜ˆ์ธก์น˜๋ฅผ ๋”ฐ๋กœ ์ œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Function ํ•ญ๋ชฉ์—๋Š” ๋™์  FastAPI ํŠธ๋ž˜ํ”ฝ์„, CDN ํ•ญ๋ชฉ์—๋Š” ๋ฐฉ๋ฌธ์ž ๋Œ€์ƒ ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— Function Invocations ๊ฐ์†Œ๋ฅผ Edge Requests๋‚˜ ์ „์†ก๋Ÿ‰์˜ ๋™์ผํ•œ ๊ฐ์†Œ๋กœ ์ž˜๋ชป ํ•ด์„ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ „์—ญ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€

์ตœ์ƒ์œ„ ๋กœ๊น…, ํ…Œ๋„ŒํŠธ ํ™•์ธ, ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒ€์ด๋ผ๋ฉด ์ •์  ๋งˆ์šดํŠธ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ Function์— ๋‚จ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํ•„์š”ํ•œ ํŒ๋‹จ์€ ๋ช…ํ™•ํžˆ ๊ณต๊ฐœ๋œ ์—์…‹ ์˜์—ญ์ด ํ•ด๋‹น ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์šฐํšŒํ•ด๋„ ๋˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๋‹ต์ด โ€˜์•„๋‹ˆ์š”โ€™๋ผ๋ฉด ์ด๋ฒˆ ๋ณ€๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์˜ˆ์‚ฐ์— ๋ฐ˜์˜ํ•  ์ ˆ๊ฐ์•ก์€ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ํ•˜๋‚˜๋ฅผ ์ ๊ฒ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ™•์žฅ์ž๊ฐ€ ๋ถ™์€ ํŒŒ์ผ์€ ๋ชจ๋‘ ๊ณต๊ฐœ ํŒŒ์ผ์ผ ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์ด ์•„๋‹ˆ๋ผ, ์‹ค์ œ ๋ผ์šฐํŠธ ๋ชฉ๋ก์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ณต๊ฐœ ๊ฒฝ๋กœ์™€ ๋ณดํ˜ธ ๊ฒฝ๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ

    ๋ชจ๋“  app.frontend() ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ StaticFiles ๋งˆ์šดํŠธ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ์–ด๋А ๋ฐฉ๋ฌธ์ž์—๊ฒŒ๋‚˜ ๋ฐ˜ํ™˜ํ•ด๋„ ๋˜๋Š” ํŒŒ์ผ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ํ…Œ๋„ŒํŠธ, ์—ญํ• , ์ฟ ํ‚ค ๋˜๋Š” ์š”์ฒญ ์‹œ์ ์˜ ๋ฏธ๋“ค์›จ์–ด ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์‘๋‹ต์ด ๋‹ฌ๋ผ์ง€๋Š” ํŒŒ์ผ์€ ๋”ฐ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  2. ์„ ์–ธ ์ˆœ์„œ ํ™•์ธํ•˜๊ธฐ

    Function ๋ผ์šฐํŠธ๊ฐ€ ์šฐ์„ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด StaticFiles ๋งˆ์šดํŠธ๋ณด๋‹ค ์•ž์— ๋‘ก๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Vercel ๋ฌธ์„œ์— ๋‚˜์˜จ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

    Python
    from fastapi import FastAPI
    from fastapi.staticfiles import StaticFiles
    
    app = FastAPI()
    
    # Declared before the mount, so this route wins over any CDN file at this path.
    @app.get("/static/protected.json")
    def protected():
        return {"access": "denied"}
    
    app.mount("/static", StaticFiles(directory="static"))
  3. ๋ณดํ˜ธ ๊ฒฝ๋กœ๋ฅผ Function์— ๋‚จ๊ธฐ๊ธฐ

    ์„ค์ •์„ ๋ฐ”๊พธ๊ธฐ ์ „์— ์ตœ์ƒ์œ„ ๋ฏธ๋“ค์›จ์–ด, ํ•˜์œ„ ์•ฑ ๋ฏธ๋“ค์›จ์–ด, ํ”„๋ŸฐํŠธ์—”๋“œ ์˜์กด์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ํ–ฅ๋ฐ›๋Š” ๋ชจ๋“  ํŒŒ์ผ์ด ์‹ค์ œ ๊ณต๊ฐœ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ฐจํŠธ ์ˆ˜์น˜๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด cdn = true๋ฅผ ์„ค์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด FastAPI๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค๋ฉด cdn = false๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ผ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ

    ์‹คํ–‰ ์ค‘์ธ ์•ฑ์ด ํ”„๋กœ๋ชจ์…˜๋œ ํŒŒ์ผ์„ ์ฝ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฌธ์„œํ™”๋œ ์„ค์ •์œผ๋กœ ํ•ด๋‹น ์†Œ์Šค ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ Function ๋ฒˆ๋“ค์—์„œ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    TOML
    [tool.vercel.fastapi.static]
    exclude = true

    ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์ด ๊ณ„์† ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  5. ๋ฐฐํฌ ํ›„ ํŠธ๋ž˜ํ”ฝ ๋ถ„๋ฆฌ ๊ฒ€์ฆํ•˜๊ธฐ

    vc deploy๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํŒŒ์ผ ํ•˜๋‚˜, ๋ณดํ˜ธ ํŒŒ์ผ ํ•˜๋‚˜, API ๋ผ์šฐํŠธ ํ•˜๋‚˜์— ๊ฐ๊ฐ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ณดํ˜ธ๋œ ์‘๋‹ต์ด ์—ฌ์ „ํžˆ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ, Usage์—์„œ ํ”„๋กœ์ ํŠธ์˜ Function Invocations, Active CPU, Provisioned Memory, Fast Origin Transfer, Edge Requests, Fast Data Transfer๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ํŒŒ์ผ ํ‘œ๋ณธ์€ Function ๊ฒฝ๋กœ์—์„œ๋Š” ๋น ์ง€๋˜ CDN ํ•ฉ๊ณ„์—์„œ๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ ˆ๊ฐ์•ก์„ ๊ณผ์žฅํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด

Pro์˜ ์ง์ ‘ ํ˜ธ์ถœ ์š”๊ธˆ์€ ๋ฐฑ๋งŒ ๊ฑด๋‹น $0.60์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์•ฑ์ด๋ผ๋ฉด ์‹ค์ œ ์ ˆ๊ฐ์•ก์ด ๋ช‡ ์„ผํŠธ์— ๊ทธ์น˜๊ฑฐ๋‚˜ ์›”๊ฐ„ ์‚ฌ์šฉ ํฌ๋ ˆ๋”ง ์•ˆ์— ํก์ˆ˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ํฐ ์ด์ ์€ Function ์‚ฌ์šฉ๋Ÿ‰์—์„œ ์—์…‹ ์š”์ฒญ์ด๋ผ๋Š” ์žก์Œ์„ ๊ฑท์–ด๋‚ด๊ณ  ์‹ค์ œ API ์ž‘์—…์— ์“ธ ์ปดํ“จํŒ… ์—ฌ์œ ๋ฅผ ๋ณด์กดํ•˜๋Š” ๋ฐ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐœ ์—์…‹ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ๊ฑฐ๋‚˜, ๊ธฐ์กด Function ๊ฒฝ๋กœ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•˜๋Š” ์‹œ๊ฐ„์ด ์ถฉ๋ถ„ํžˆ ๊ธธ์—ˆ๊ฑฐ๋‚˜, ์‘๋‹ต์ด ์˜๋ฏธ ์žˆ๋Š” Fast Origin Transfer๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ์ ˆ๊ฐํญ์ด ์ปค์ง‘๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ํŒŒ์ผ์ด ์ด๋ฏธ public/์— ์žˆ์—ˆ๊ฑฐ๋‚˜, ํŠธ๋ž˜ํ”ฝ์ด ์ ๊ฑฐ๋‚˜, ๋ณด์•ˆ ๊ทœ์น™ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ Function์— ๋‚จ๊ธฐ๋Š” ๊ฒƒ์ด ๋งž๋‹ค๋ฉด ํšจ๊ณผ๋Š” ์ž‘์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๋ณ€๊ฒฝ์ด ์—์…‹ ์ตœ์ ํ™”๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ™์€ ๋Œ€์šฉ๋Ÿ‰ JavaScript ๋ฒˆ๋“ค, ์ด๋ฏธ์ง€, ํฐํŠธ๋Š” ์—ฌ์ „ํžˆ CDN์„ ๊ฑฐ์ณ ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Fast Data Transfer๋ฅผ ์ค„์ด๋ ค๋ฉด ํŒŒ์ผ ์ž์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›”์š”์ผ์— ํ•  ์ผ

app.frontend() ๋˜๋Š” StaticFiles๊ฐ€ ๊ณต๊ฐœ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์ด Function ์‚ฌ์šฉ๋Ÿ‰์— ์žกํžŒ๋‹ค๋ฉด ์ด๋ฒˆ ์ฃผ์— ์กฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ๋ณดํ˜ธ๋˜์–ด ์žˆ๋Š”๋ฐ ์ ‘๊ทผ ๊ทœ์น™์„ ์•„์ง ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๊ด€๋ จ ํŒŒ์ผ์ด ์ด๋ฏธ public/์ด๋‚˜ ๋‹ค๋ฅธ CDN ๊ธฐ๋ฐ˜ ๊ฒฝ๋กœ์—์„œ ์ œ๊ณต๋œ๋‹ค๋ฉด ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์šด์˜ ๋น„์šฉ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ํ”Œ๋žซํผ ๋ณ€๊ฒฝ์„ ๋” ์‰ฝ๊ฒŒ ํ’€์–ด ์“ด ๊ธ€๋กœ ๋ฐ›์•„๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๊ตฌ๋…ํ•˜์„ธ์š”.

๊ฒŒ์‹œ์ผ
์นดํ…Œ๊ณ ๋ฆฌ
Explained
AI ์—์ด์ „ํŠธ ๋น„์šฉ, ๊ตฌ๋…๋ถ€ํ„ฐ ์ง์ ‘ ๊ฐœ๋ฐœ๊นŒ์ง€ ์›” ์˜ˆ์‚ฐ ๋น„๊ต

AI ์—์ด์ „ํŠธ ๋น„์šฉ, ๊ตฌ๋…๋ถ€ํ„ฐ ์ง์ ‘ ๊ฐœ๋ฐœ๊นŒ์ง€ ์›” ์˜ˆ์‚ฐ ๋น„๊ต

AI ์—์ด์ „ํŠธ ๋น„์šฉ์„ ๊ตฌ๋…ํ˜• ์„œ๋น„์Šค, ๋…ธ์ฝ”๋“œ ๋นŒ๋”, ์ง์ ‘ ๊ตฌ์ถ•ํ•œ API๋กœ ๋‚˜๋ˆ  ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์›” 1,000๊ฑด์˜ ๊ณ ๊ฐ ์ง€์› ์ด๋ฉ”์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋ฐฉ์‹์˜ ์˜ˆ์‚ฐ์„ ๊ณ„์‚ฐํ•˜๊ณ , ํ† ํฐ๊ณผ ํˆด ํ˜ธ์ถœ, ์—ฐ๊ฐ„ ๊ฒฐ์ œ์˜ ์ฒซ ์ฒญ๊ตฌ์•ก, ์‚ฌ๋žŒ์˜ ๊ฒ€ํ†  ์‹œ๊ฐ„๊นŒ์ง€ ์‹ค์ œ ์šด์˜์— ๋“œ๋Š” ๋น„์šฉ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.2026๋…„ 10์›” 7์ผExplained
Grok Voice Transcribe 2.0 ์ „ํ™˜: ์Œ์„ฑ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ๋น„์šฉ๊ณผ ๊ธฐ๋ณธ ๋ชจ๋ธ ์ ๊ฒ€๋ฒ•

Grok Voice Transcribe 2.0 ์ „ํ™˜: ์Œ์„ฑ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ๋น„์šฉ๊ณผ ๊ธฐ๋ณธ ๋ชจ๋ธ ์ ๊ฒ€๋ฒ•

Grok Voice Transcribe 2.0์€ ๋ฐฐ์น˜ ์‹œ๊ฐ„๋‹น $0.10, ์ŠคํŠธ๋ฆฌ๋ฐ ์‹œ๊ฐ„๋‹น $0.20์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชจ๋ธ ๋ณ€๊ฒฝ์€ ๊ฐ™์€ API ํ˜ธ์ถœ์˜ ์Œ์„ฑ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ์™€ ํ›„์† ์—…๋ฌด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ณ ์ •๊ณผ ์‹ค์ œ ์˜ค๋””์˜ค ๊ฒ€์ฆ ์ ˆ์ฐจ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 20์ผExplained
Cloudflare Browser Run ์‹คํŒจ, HAR ํŒŒ์ผ๋กœ ์žฌ์‹คํ–‰ ์ „์— ์ง„๋‹จํ•˜๊ธฐ

Cloudflare Browser Run ์‹คํŒจ, HAR ํŒŒ์ผ๋กœ ์žฌ์‹คํ–‰ ์ „์— ์ง„๋‹จํ•˜๊ธฐ

Cloudflare Browser Run์˜ ์ƒˆ Inspect ํŒจ๋„์—์„œ HAR ํŒŒ์ผ, ์ฝ˜์†” ๋กœ๊ทธ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ์ตœ์ข… DOM์„ ํ™•์ธํ•ด ์‹คํŒจ ์›์ธ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ก์„ ์–ธ์ œ ์ผœ์•ผ ํ•˜๋Š”์ง€, ์žฌ์‹คํ–‰ ์ „์— ๋ฌด์—‡์„ ์ ๊ฒ€ํ•ด์•ผ ํ•˜๋Š”์ง€, ๋น„์šฉ๊ณผ ๊ธฐ๋ก์˜ ํ•œ๊ณ„๊นŒ์ง€ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.2026๋…„ 9์›” 19์ผExplained
v0์—์„œ ์‚ฌ๋‚ด ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•

v0์—์„œ ์‚ฌ๋‚ด ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•

๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๋น„๊ณต๊ฐœ npm ํŒจํ‚ค์ง€๋ฅผ Vercel v0์— ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. NPM_TOKEN๊ณผ NPM_RC์˜ ์ฐจ์ด, ์ตœ์†Œ ๊ถŒํ•œ ์„ค์ •, ์š”๊ธˆ, ํ•œ๊ณ„, ํ”„๋กœํ† ํƒ€์ž…์„ ์‹ค์ œ ์ €์žฅ์†Œ๋กœ ๋„˜๊ธธ ๋•Œ ํ™•์ธํ•  ํ•ญ๋ชฉ๊นŒ์ง€ ์‹ค๋ฌด ๊ธฐ์ค€์œผ๋กœ ํ•จ๊ป˜ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.2026๋…„ 9์›” 19์ผExplained
Claude Code ๋น„์šฉ, ์ž๋™ ๋ชจ๋“œ ๋ถ„๋ฅ˜๊ธฐ ๊ณผ๊ธˆ์ด ์‚ฌ๋ผ์ง€๋Š” ์กฐ๊ฑด

Claude Code ๋น„์šฉ, ์ž๋™ ๋ชจ๋“œ ๋ถ„๋ฅ˜๊ธฐ ๊ณผ๊ธˆ์ด ์‚ฌ๋ผ์ง€๋Š” ์กฐ๊ฑด

Claude Code 2.1.278์€ ์„œ๋ฒ„๊ฐ€ ์ž๋™ ๋ชจ๋“œ ๊ฒ€์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ณ„๋„ ๋ถ„๋ฅ˜๊ธฐ ์š”์ฒญ ๋น„์šฉ์„ ์—†์•ฑ๋‹ˆ๋‹ค. APIยทEnterpriseยท๊ฒŒ์ดํŠธ์›จ์ด ํ™˜๊ฒฝ์—์„œ /status๋กœ ์‹ค์ œ ๊ณผ๊ธˆ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋น„์šฉ ์˜ˆ์ธก ์ „์— ์ ๊ฒ€ํ•ด์•ผ ํ•  ํ˜ธํ™˜ ์กฐ๊ฑด๊ณผ ํด๋ฐฑ ์‹ ํ˜ธ๋ฅผ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 19์ผExplained
Vercel ๋ฐฐํฌ ํ•œ ๋ฒˆ์—๋งŒ Turbo๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์šฉ

Vercel ๋ฐฐํฌ ํ•œ ๋ฒˆ์—๋งŒ Turbo๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์šฉ

Vercel ๋ฐฐํฌ๋งˆ๋‹ค ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ๋จธ์‹  ์„ค์ •์„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Pro์™€ Enterprise์—์„œ ๊ธด๊ธ‰ํ•œ ๋ฐฐํฌ ํ•œ ๋ฒˆ์—๋งŒ Turbo๋ฅผ ์ ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ๋ถ„๋‹น ๋น„์šฉ์„ ์‚ดํŽด๋ณด๊ณ , Basic๊ณผ ๋น„๊ตํ•ด ์‹ค์ œ๋กœ ์•„๋‚€ ์‹œ๊ฐ„๊ณผ ์ถ”๊ฐ€ ๋น„์šฉ์„ ๊ฒ€์ฆํ•˜๋Š” ์ ˆ์ฐจ๊นŒ์ง€ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 18์ผExplained
์›Œ๋“œ AI ์‹ค์ „ ๊ฐ€์ด๋“œ: ChatGPT๋กœ Word ๋ฌธ์„œ ์ž‘์„ฑ๋ถ€ํ„ฐ ์ˆ˜์ •๊นŒ์ง€

์›Œ๋“œ AI ์‹ค์ „ ๊ฐ€์ด๋“œ: ChatGPT๋กœ Word ๋ฌธ์„œ ์ž‘์„ฑ๋ถ€ํ„ฐ ์ˆ˜์ •๊นŒ์ง€

Word ์•ˆ์—์„œ ChatGPT๋กœ ์ดˆ์•ˆ์„ ๋งŒ๋“ค๊ณ  ์—ด๋ฆฐ ๋ฌธ์„œ๋ฅผ ์š”์•ฝยท์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์• ๋“œ์ธ ์„ค์น˜ ์กฐ๊ฑด, ๊ณต์œ  ์‚ฌ์šฉ๋Ÿ‰๊ณผ ํ† ํฐ ์š”์œจ, ๋ฐ์ดํ„ฐ ๊ฒฝ๊ณ„, ๊ฒ€ํ†  ์ ˆ์ฐจ๋ฅผ ํ™•์ธํ•˜๊ณ  ์•ฑ ์‚ฌ์ด ๋ณต์‚ฌยท๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์ค„์ด๋Š” ์›Œ๋“œ AI ์—…๋ฌด ํ๋ฆ„์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.2026๋…„ 9์›” 18์ผExplained
AI ์—์ด์ „ํŠธ ์šด์˜์ž๋ฅผ ์œ„ํ•œ Google Antigravity ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ

AI ์—์ด์ „ํŠธ ์šด์˜์ž๋ฅผ ์œ„ํ•œ Google Antigravity ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ

Google Antigravity์˜ 5์›” ์—์ด์ „ํŠธ๊ฐ€ 2026๋…„ 10์›” 5์ผ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. AI ์—์ด์ „ํŠธ ์ž‘์—…์˜ ์ถœ๋ ฅ ์ „์šฉยท๋กœ์ปฌ ํˆด ๊ฒฝ๋กœ๋ณ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฒ”์œ„์™€ ์ƒˆ ํŒŒ์ผ ํˆด ๊ณ„์•ฝ, ์•ˆ์ „ํ•œ ์–ด๋Œ‘ํ„ฐ ํ…Œ์ŠคํŠธ, ์˜ˆ์•ฝ ์ž‘์—… ์ ๊ฒ€ ์ˆœ์„œ๋ฅผ ์‹ค๋ฌด ๊ธฐ์ค€์œผ๋กœ ํ•œ๋ˆˆ์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.2026๋…„ 9์›” 18์ผExplained
๋‰ด์Šค๋ ˆํ„ฐ

๋งค์ฃผ ์ผ์š”์ผ, ํ•œ ํ†ต์˜ ํŽธ์ง€.๋œจ๊ฑฐ์šด ์˜๊ฒฌ์ด ์•„๋‹Œ, ๋Œ์•„๊ฐ€๋Š” ์‹œ์Šคํ…œ.

์ฃผ๊ฐ„ ๋ฐœํ–‰. ์ŠคํŒธ ์—†์Œ. ์–ธ์ œ๋“  ํ•ด์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.