Cloudflare CLI ์‚ฌ์šฉ๋ฒ•: cf ์„ค์น˜๋ถ€ํ„ฐ Worker ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊นŒ์ง€

Cloudflare CLI ์‚ฌ์šฉ๋ฒ•์„ ์„ค์น˜, ์ธ์ฆ, ๋ช…๋ น ๊ฒ€์ƒ‰, JSON ์ถœ๋ ฅ ์ˆœ์„œ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. cf๋กœ Worker๋ฅผ ๋งŒ๋“ค๊ณ  Vite ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•, Wrangler๋ฅผ ๊ณ„์† ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์•ˆ์ „ํ•œ ์ž๋™ํ™” ์›์น™๊นŒ์ง€ ์‹ค์ „ ์˜ˆ์ œ๋กœ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

๊ฒŒ์‹œ์ผ

์ž‘์„ฑ์ž
Cloudflare CLI ์‚ฌ์šฉ๋ฒ•: cf ์„ค์น˜๋ถ€ํ„ฐ Worker ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊นŒ์ง€

์ด์ œ Cloudflare CLI ํ•˜๋‚˜๋งŒ ์„ค์น˜ํ•˜๋ฉด ํ•„์š”ํ•œ ๋ช…๋ น์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๊ตฌ์กฐํ™”๋œ JSON ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„, ๊ฐ™์€ ์ง„์ž…์ ์—์„œ Worker๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 9์›” 28์ผ ์˜คํ”ˆ ๋ฒ ํƒ€๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ๋Š” cf๊ฐ€ ์ด์ œ 3,000๊ฐœ๊ฐ€ ๋„˜๋Š” Cloudflare API ์ž‘์—…์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ฝ 280๊ฐœ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Wrangler๋ณด๋‹ค ๋ฒ”์œ„๊ฐ€ ํ›จ์”ฌ ๋„“์ง€๋งŒ, Wrangler๊ฐ€ ํ•„์š”ํ•œ ์›Œํฌํ”Œ๋กœ์—์„œ๋Š” ์—ฌ์ „ํžˆ ๋‚ด๋ถ€์ ์œผ๋กœ Wrangler๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹ค์งˆ์ ์ธ ์ด์ ์€ ๋ช…๋ น์–ด๊ฐ€ ์งง์•„์กŒ๋‹ค๋Š” ๋ฐ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฐ๋™ ์ž‘์—… ์ž์ฒด๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์ฐฝ์—…์ž๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋’ค์ง€์ง€ ์•Š๊ณ  ๊ณ„์ •์„ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ๊ณ , ํ”Œ๋žซํผ ํŒ€์€ ์—์ด์ „ํŠธ์— ๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—์ด์ „์‹œ๋Š” ์ œํ’ˆ๋งˆ๋‹ค ๋ณ„๋„์˜ API ๋ž˜ํผ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ ๋„ ์—ฌ๋Ÿฌ ๊ณ ๊ฐ ๊ณ„์ •์˜ Cloudflare ์ž‘์—…์„ ํ‘œ์ค€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cf๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด ๋ณ„๋„ ๋ผ์ด์„ ์Šค๋ฅผ ์‚ด ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๊ณ , ์ž‘์€ Worker๋Š” Cloudflare Free ํ”Œ๋žœ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Workers Paid์˜ ์›” ์ตœ์†Œ ์š”๊ธˆ์€ $5์ž…๋‹ˆ๋‹ค. ์˜ˆ์‚ฐ์˜ ๋ฐ˜๋Œ€ํŽธ์—๋Š” Starter+ ํ‹ฐ์–ด๊ฐ€ $20,000์ธ Spacelift ๊ฐ™์€ ๋ฒ”์šฉ ์ธํ”„๋ผ ๊ฑฐ๋ฒ„๋„Œ์Šค ํ”Œ๋žซํผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. cf๋Š” ์ด ๋‘ ์„ ํƒ์ง€ ์‚ฌ์ด์—์„œ API ์—ฐ๋™์— ๋“œ๋Š” ์ˆ˜๊ณ ๋ฅผ ํฌ๊ฒŒ ๋œ์–ด ์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šน์ธ ์ ˆ์ฐจ, ๊ฐ์‚ฌ ์ถ”์ , ์„ธ์‹ฌํ•œ ๊ถŒํ•œ ์„ค๊ณ„๊นŒ์ง€ ์—†์•  ์ฃผ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด cf CLI๋Š” ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ๊ฐ€

cf๋Š” Cloudflare API ์ „์ฒด๋ฅผ ๋ช…๋ น์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ์ž๋™ ์ƒ์„ฑ๋œ ์ธํ„ฐํŽ˜์ด์Šค์—, Worker ์ƒ์„ฑยท๋นŒ๋“œยท๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ยท๋ฐฐํฌ ๊ฐ™์€ ์ž‘์—…์„ ์œ„ํ•ด ์ง์ ‘ ์„ค๊ณ„ํ•œ ํ”„๋กœ์ ํŠธ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋”ํ•œ ํˆด์ž…๋‹ˆ๋‹ค. Wrangler๊ฐ€ Worker๋ฅผ ์œ„ํ•œ ์ „๋ฌธ ์ž‘์—…๋Œ€๋ผ๋ฉด, cf๋Š” Cloudflare๋ผ๋Š” ๊ฑด๋ฌผ ์ „์ฒด๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ด์ž ์„œ๋น„์Šค ๋ฐ์Šคํฌ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ Wrangler๊ฐ€ ๋” ์•ˆ์ •์ ์ธ ์ž‘์—…์€ ๊ณ„์† Wrangler๋กœ ๋„˜๊น๋‹ˆ๋‹ค.

์ด ์ฐจ์ด๋Š” ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค์™€ Cloudflare์˜ 4์›” 13์ผ ๊ธฐ์ˆ  ํ”„๋ฆฌ๋ทฐ๋ฅผ ๊ฐ€๋ฅด๋Š” ๊ธฐ์ค€์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. 4์›” ๋นŒ๋“œ๋Š” ์ผ๋ถ€ ์ œํ’ˆ๋งŒ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค. 9์›” ์˜คํ”ˆ ๋ฒ ํƒ€์—๋Š” API ์ „์ฒด ๋ฒ”์œ„, ๊ธฐ๋ณธ JSON ์ถœ๋ ฅ, ๋ช…๋ น ๊ฒ€์ƒ‰, TypeScript Worker ์„ค์ •, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ Worker ๊ฒฝ๋กœ๋กœ์„œ์˜ Vite๊ฐ€ ํฌํ•จ๋์Šต๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ๋ฅผ ๋ฐ”๊พธ๋Š” ํ•ต์‹ฌ์€ ๋‹ค์Œ 4๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • API ์ „์ฒด ๋ฒ”์œ„: ์ž๋™ ์ƒ์„ฑ๋œ ๋ช…๋ น์€ 3,000๊ฐœ๊ฐ€ ๋„˜๋Š” ์ž‘์—…์— ๊ฑธ์ณ cf <product> [groupโ€ฆ] <operation> ํ˜•์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ช…๋ น ๊ฒ€์ƒ‰: cf cli search์— ์ž์—ฐ์–ด๋กœ ํ•  ์ผ์„ ์ž…๋ ฅํ•˜๋ฉด ๊ด€๋ จ๋„๊ฐ€ ๋†’์€ 5๊ฐœ ๋ช…๋ น์„ JSON์œผ๋กœ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. ๋ช…๋ น ํŠธ๋ฆฌ๋ฅผ ์™ธ์šธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์ถœ๋ ฅ์€ JSON: API ๊ฒฐ๊ณผ๊ฐ€ ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ •๋ฆฌ๋œ JSON์œผ๋กœ ํ‘œ์ค€ ์ถœ๋ ฅ์— ์ „๋‹ฌ๋˜๋ฏ€๋กœ ์‚ฌ๋žŒ, ์Šคํฌ๋ฆฝํŠธ, ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ ๊ฐ™์€ ์‘๋‹ต์„ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํƒ€์ž…์ด ์ ์šฉ๋œ Worker ์„ค์ •: cloudflare.config.ts ๋•๋ถ„์— ์—๋””ํ„ฐ์™€ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ TypeScript ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” Workers๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. DNS, zone, ์ •์ฑ…์„ ์•„์šฐ๋ฅด๋Š” ๊ณ„์ • ์ „์ฒด ์„ค์ •์€ ํ–ฅํ›„ ๋ฐฉํ–ฅ์ด๋ฉฐ, ์ง€๊ธˆ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์€ ์•„๋‹™๋‹ˆ๋‹ค.
์„ค์น˜, ์ธ์ฆ, ๋ช…๋ น ๊ฒ€์ƒ‰์„ ๊ฑฐ์ณ 3,000๊ฐœ๊ฐ€ ๋„˜๋Š” ์ž‘์—…์˜ JSON ์ถœ๋ ฅ์œผ๋กœ ์ด์–ด์ง€๋Š” ์•„ํ‚คํ…์ฒ˜ ํ๋ฆ„
์‹ค์šฉ์ ์ธ ๊ธฐ๋ณธ ํ๋ฆ„์€ ์„ค์น˜, ์ธ์ฆ, ๊ฒ€์ƒ‰, ๊ทธ๋ฆฌ๊ณ  JSON ์ฝ๊ธฐ ๊ฒฐ๊ณผ ๊ฒ€์ฆ์ž…๋‹ˆ๋‹ค.

Cloudflare CLI ์„ค์น˜, ์ธ์ฆ, ์ฝ๊ธฐ ํ…Œ์ŠคํŠธ

๋จผ์ € ์ฝ๊ธฐ ์ „์šฉ ์ž‘์—…๋ถ€ํ„ฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์— ๋ณ€๊ฒฝ ๊ถŒํ•œ์„ ์ฃผ๊ธฐ ์ „์— ํŒจํ‚ค์ง€, ์ธ์ฆ ์ •๋ณด, ๊ณ„์ • ์„ ํƒ, ๋ช…๋ น ๊ฒ€์ƒ‰, JSON ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ๋ชจ๋‘ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์‹ ํŒจํ‚ค์ง€๋Š” Node.js 22 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” cf auth login์ด ๊ธฐ๋ณธ OAuth ํ”„๋กœํ•„์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. CI์—์„œ๋Š” ๊ถŒํ•œ ๋ฒ”์œ„๋ฅผ ์ขํžŒ CLOUDFLARE_API_TOKEN์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. cf๋Š” ์ €์žฅ๋œ OAuth ํ”„๋กœํ•„๋ณด๋‹ค ์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ์‚ฌ๋‚˜ ํšŒ์‚ฌ ๊ณ„์ •์„ ์˜ค๊ฐˆ ๋•Œ๋Š” ์ด๋ฆ„์ด ์žˆ๋Š” ํ”„๋กœํ•„์„ ๋งŒ๋“ค๊ณ  ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cf cli search์— ๋„˜๊ธฐ๋Š” ๋ฌธ์žฅ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ, ์ด๋ฉ”์ผ ์ฃผ์†Œ, ๊ณ„์ • ID, ํ† ํฐ์„ ๋„ฃ์ง€ ๋ง๊ณ  ์ž‘์—…๊ณผ ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋งŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Bash
node --version
npm i -g cf
cf --version

cf auth login
cf auth whoami

cf cli search "list zones in an account"
cf zones list | jq -e 'type == "array" and all(.[]; has("name") and has("status"))'

ํ˜„์žฌ ์ด ์ž‘์—…์„ ๊ฒ€์ƒ‰ํ•˜๋ฉด cf zones list๊ฐ€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์ด ์‹ค์ œ ๊ฒ€์ฆ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ „์šฉ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ฒฐ๊ณผ๊ฐ€ name๊ณผ status๋ฅผ ํฌํ•จํ•œ ํ•ญ๋ชฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ JSON ๋ฐฐ์—ด์ผ ๋•Œ๋งŒ ์„ฑ๊ณต์œผ๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ •์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด --profile๋กœ ์ด๋ฆ„์ด ์žˆ๋Š” ํ”„๋กœํ•„์„ ๊ณ ๋ฅด๊ฑฐ๋‚˜ --account-id๋กœ ๋ช…๋ น ๋Œ€์ƒ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ์„ ์…ธ ๊ธฐ๋ก์— ์ง์ ‘ ๋ถ™์—ฌ ๋„ฃ์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋œ ํ† ํฐ์„ CI ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์— ๋‘๊ณ , ์ž‘์—…์— ๊ผญ ํ•„์š”ํ•œ ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ด ํ„ฐ๋ฏธ๋„์—์„œ ์ž‘์—…ํ•  ๋•Œ๋Š” cf๊ฐ€ ์„ ํƒ๋œ ํ”„๋กœํ•„์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ OAuth๊ฐ€ ๋” ํŽธํ•œ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

์ผํšŒ์šฉ ํ…Œ์ŠคํŠธ์—์„œ ํ™•์ธํ•œ ๋ฒ”์œ„

9์›” 29์ผ, ์ƒˆ๋กœ ๋ถ„๋ฆฌํ•œ ํ™˜๊ฒฝ์— ์„ค์น˜ํ–ˆ์„ ๋•Œ cf v1.0.0-beta.5๊ฐ€ ๋ฐ˜ํ™˜๋์Šต๋‹ˆ๋‹ค. ๋ช…๋ น ๊ฒ€์ƒ‰์€ ์œ ํšจํ•œ 5๊ฐœ ํ•ญ๋ชฉ์˜ JSON ๋ฐฐ์—ด์„ ๋Œ๋ ค์คฌ๊ณ , cf init์€ ํƒ€์ž…์ด ์ ์šฉ๋œ Worker ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ์™€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ Vite ํ”ฝ์Šค์ฒ˜ ๋ชจ๋‘ ๋กœ์ปฌ ๋นŒ๋“œ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™˜๊ฒฝ์—๋Š” Cloudflare ํ…Œ์ŠคํŠธ ๊ณ„์ • ์ธ์ฆ ์ •๋ณด๊ฐ€ ์—†์—ˆ์œผ๋ฏ€๋กœ, ์ธ์ฆ์ด ํ•„์š”ํ•œ zone ์ฝ๊ธฐ์™€ ๋ฐฐํฌ๋Š” ์™„๋ฃŒ๋œ ํ…Œ์ŠคํŠธ์— ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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

์ž‘์€ Worker๋ฅผ ๋งŒ๋“ค๊ณ  cf๊ฐ€ ์ƒ์„ฑํ•œ ํŒŒ์ผ ํ™•์ธํ•˜๊ธฐ

cf init์€ ์ƒˆ ํ”„๋กœ์ ํŠธ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊น”๋”ํ•˜๊ฒŒ ์‹œํ—˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋นˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์‹คํ–‰ํ•˜๋ฉด TypeScript ์†Œ์Šค, cloudflare.config.ts, vite.config.ts, ํŒจํ‚ค์ง€ ์Šคํฌ๋ฆฝํŠธ, ์ƒ์„ฑ๋œ Worker ํƒ€์ž…์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ์ด์–ด์„œ cf build๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Cloudflare Vite Plugin์— ๋นŒ๋“œ๋ฅผ ๋งก๊ธฐ๊ณ  ํ‘œ์ค€ํ™”๋œ Build Output์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Bash
cf init hello-cf --package-manager npm
cd hello-cf
npm run build

# In a copied existing Vite Worker:
cf migrate --dry-run
cf migrate
npm run build

์–ด๋А ๊ฒฝ๋กœ๋ฅผ ํƒํ•˜๋“  ์™„๋ฃŒ ํ›„์—๋Š” cloudflare.config.ts๋ฅผ ์—ด์–ด ๋ด…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ Worker๋ผ๋ฉด ์ด๋ฆ„, ํ˜ธํ™˜์„ฑ ๋‚ ์งœ, ์ง„์ž…์ , ํƒ€์ž…์ด ์ ์šฉ๋œ ๋ฐ”์ธ๋”ฉ์„ ํฌํ•จํ•˜๋Š” worker ๋ธ”๋ก์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๋ฐ”์ธ๋”ฉ์€ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ ๋ธ”๋ก์— ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  ์„ค์ • API๋ฅผ ํ†ตํ•ด ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ TypeScript์˜ ๊ฐ€์น˜๊ฐ€ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ํ•„๋“œ ์ด๋ฆ„์„ ์ž˜๋ชป ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๋ฐฐํฌ ์‹คํŒจ๊ฐ€ ์•„๋‹ˆ๋ผ ์—๋””ํ„ฐ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ๋จผ์ € ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ Vite ์„ค์ •์€ ์žฅ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด์ œ Vite๋Š” cf์˜ ๊ธฐ๋ณธ ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐ ๋นŒ๋“œ ๊ฒฝ๋กœ์ด๋ฉฐ, Cloudflare๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ API ๋ชจ๋‘์— Vite plugin์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผํšŒ์šฉ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” npm run build๊ฐ€ Vite์— ์ž‘์—…์„ ๋„˜๊ฒจ ์™„๋ฃŒ๋์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๋Š” ์˜๋„์ ์œผ๋กœ ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€ํ† ์™€ ๊ณ„์ • ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ๋ฌธ์„œ์— ์•ˆ๋‚ด๋œ cf deploy ๋ช…๋ น์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋นŒ๋“œ์™€ ์—…๋กœ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

cf init์—์„œ ํƒ€์ž…์ด ์ ์šฉ๋œ ์„ค์ •๊ณผ Vite๋ฅผ ๊ฑฐ์ณ ๋กœ์ปฌ ๋นŒ๋“œ๋กœ ์ด์–ด์ง€๋Š” Worker ์•„ํ‚คํ…์ฒ˜ ์›Œํฌํ”Œ๋กœ
์ƒˆ Worker ํ”„๋กœ์ ํŠธ๋Š” ์ด์ œ ํƒ€์ž…์ด ์ ์šฉ๋œ ์„ค์ •๊ณผ Vite ๋นŒ๋“œ ๊ฒฝ๋กœ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Wrangler๋ฅผ ๊ณ„์† ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

cf ์„ค์น˜๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ Wrangler๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒ๋‹จ์€ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ๊ฒฝ๋กœ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด Vite Worker์—์„œ๋Š” cf migrate๋กœ Wrangler JSON, JSONC, TOML์„ cloudflare.config.ts๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ Wrangler ์„ค์ • ์˜†์—์„œ Cloudflare Vite Plugin์„ ์ฐพ์•„ Vite ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„ ์–ธ๋ผ ์žˆ์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค๋Š” Wrangler ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฑด๋“œ๋ฆฌ๊ธฐ ์ „์— dry-run ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋ชจ๋“  ํ›„์† ํ•ญ๋ชฉ์„ ์ฝ์€ ๋’ค, ๋ณต์‚ฌ๋ณธ์ด๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๋Š” ๋ธŒ๋žœ์น˜์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

Wrangler์˜ esbuild ๋™์ž‘์— ๊ณ„์† ์˜์กดํ•˜๋Š” JavaScript Workers๋ผ๋ฉด cf๋Š” ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ๋ฅผ Wrangler์— ๋งก๊น๋‹ˆ๋‹ค. Rust์™€ Python Workers๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํŒจ๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค. ํŒ€์€ cf๋ฅผ ๋‹จ์ผ ์ง„์ž…์ ์œผ๋กœ ์“ฐ๋ฉด์„œ๋„ ๊ฒ€์ฆ๋œ ๋นŒ๋”๋ฅผ ์ž‘์—… ๊ฒฝ๋กœ์— ๋‚จ๊ฒจ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloudflare์˜ ์ง€์› ์ผ์ •๋„ ์˜คํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. Wrangler ์œ ์ง€๋ณด์ˆ˜๋Š” ์˜คํ”ˆ ๋ฒ ํƒ€๊ฐ€ ๋๋‚œ ๋’ค 18๊ฐœ์›” ๋™์•ˆ ์ด์–ด์งˆ ์˜ˆ์ •์ด๋ฉฐ, 9์›” 28์ผ ์ถœ์‹œ์ผ๋ถ€ํ„ฐ 18๊ฐœ์›”์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฒˆ ์ฃผ์— Rust, Python, esbuild ํ”„๋กœ์ ํŠธ๋ฅผ ์–ต์ง€๋กœ Vite๋กœ ์ „ํ™˜ํ•  ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Vite๋Š” cf ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฅด๊ณ  esbuild, Python, Rust๋Š” Wrangler๋ฅผ ๊ณ„์† ๊ฑฐ์น˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์˜์‚ฌ๊ฒฐ์ • ํ๋ฆ„
Vite๋Š” cf ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ํƒํ•ฉ๋‹ˆ๋‹ค. esbuild, Python, Rust์—๋Š” Wrangler๊ฐ€ ๊ณ„์† ๊ด€์—ฌํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ํšจ๊ณผ๋ฅผ ๋ณผ 7๊ฐ€์ง€ ์›Œํฌํ”Œ๋กœ

์ดˆ๊ธฐ ํ™œ์šฉ ์‚ฌ๋ก€๋กœ๋Š” ๋ฐ˜๋ณต๋˜๋Š” ๊ฒ€์ƒ‰๊ณผ ์ถœ๋ ฅ ํ˜•์‹ ๋ณ€ํ™˜์„ ์ค„์ด๋ฉด์„œ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ด‘๋ฒ”์œ„ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ์ฃผ์ง€ ์•Š๋Š” ์ž‘์—…์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

1. ์—์ด์ „์‹œ์˜ ๊ณ„์ • ์ ๊ฒ€ ํ‘œ์ค€ํ™”

์—์ด์ „์‹œ ์šด์˜์ž๋Š” ๊ณ ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋งˆ๋‹ค ์ด๋ฆ„์ด ์žˆ๋Š” OAuth ํ”„๋กœํ•„์„ ์—ฐ๊ฒฐํ•˜๊ณ , ํ•„์š”ํ•œ ์ฝ๊ธฐ ๋ช…๋ น์„ ๊ฒ€์ƒ‰ํ•œ ๋’ค, ๋™์ผํ•œ ํ˜•ํƒœ์˜ JSON์„ ๊ฒ€ํ†  ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์—”์ง€๋‹ˆ์–ด๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋‹ค๋ฅธ ์—”์ง€๋‹ˆ์–ด๋Š” ๋ณ„๋„ curl ๋ช…๋ น์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์ƒ๊ธฐ๋Š” ํŽธ์ฐจ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ DNS, zone, ๊ณ„์ • ์„ค์ •, ๋ณด์•ˆ ๊ฒ€ํ†  ๋“ฑ ๊ณ ๊ฐ๋ณ„ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•  ๋•Œ ํšจ๊ณผ๊ฐ€ ํฝ๋‹ˆ๋‹ค.

2. ํ”Œ๋žซํผ ํŒ€์ด ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์— ์•ˆ์ „ํ•œ Cloudflare ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

ํ”Œ๋žซํผ ์ฑ…์ž„์ž๋Š” AGENTS.md์— cf cli search ์‚ฌ์šฉ ๊ทœ์น™์„ ๋‘๊ณ , ์ฝ๊ธฐ ๋ช…๋ น์€ ๊ธฐ๋ณธ ํ—ˆ์šฉํ•˜๋˜ ๋ณ€๊ฒฝ ์ž‘์—…์—๋Š” ์‚ฌ๋žŒ์˜ ์Šน์ธ์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์€ ์—์ด์ „ํŠธ๊ฐ€ ์˜ˆ์ „ Wrangler ๋ฌธ๋ฒ•์„ ์ถ”์ธกํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ , JSON์€ ์ถœ๋ ฅ์„ ๊ฐ„๊ฒฐํ•˜๊ณ  ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒ€์ด ์ด๋ฏธ ์—์ด์ „ํŠธ์— ๋นŒ๋“œ ์ƒํƒœ, ๋กœ๊ทธ, ํ, ๊ณ„์ • ๋ฆฌ์†Œ์Šค ์ ๊ฒ€์„ ๋งก๊ธฐ๊ณ  ์žˆ์œผ๋ฉฐ ํ•˜๋‚˜์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์›ํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

3. ๋‹น์ง ์—”์ง€๋‹ˆ์–ด์˜ ์žฅ์•  ์ƒํ™ฉ ์ •๋ณด ์ˆ˜์ง‘

์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์šด์˜์ž๋Š” ์—ฌ๋Ÿฌ ์ œํ’ˆ ํŒจ๋„์„ ๋Œ์•„๋‹ค๋‹ˆ๋Š” ๋Œ€์‹  ํ•„์š”ํ•œ ๋กœ๊ทธ, zone, ๊ทœ์น™ ์„ธํŠธ, ๋ถ„์„ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ๋ช…๋ น์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ๋ช…๋ น์€ ์—ฌ์ „ํžˆ ์ค‘์š”ํ•˜๊ณ  ๊ถŒํ•œ๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋˜์ง€๋งŒ, ์ด์ œ ๋กœ์ปฌ์—์„œ ๋ช…๋ น์„ ์ฐพ๊ณ  ๊ณง๋ฐ”๋กœ jq๋กœ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Cloudflare Browser Run ๊ฐ™์€ ์ž‘์—…์„ ์šด์˜ํ•˜๋Š” ํŒ€์ด๋ผ๋ฉด ์‹คํŒจํ•œ ์ž‘์—…์—์„œ ์ฃผ๋ณ€ ๊ณ„์ • ์ƒํƒœ๊นŒ์ง€ ๋” ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์ฐฝ์—…์ž๊ฐ€ ํˆด์ฒด์ธ ์„ค๊ณ„ ์—†์ด Worker ํ•˜๋‚˜ ์‹œ์ž‘ํ•˜๊ธฐ

์›นํ›…, ๋ฆฌ๋””๋ ‰์…˜ ์„œ๋น„์Šค, ์†Œ๊ทœ๋ชจ ๋‚ด๋ถ€ API๋ฅผ ๋งŒ๋“œ๋Š” ์ฐฝ์—…์ž๋Š” cf init์„ ์‹คํ–‰ํ•˜๊ณ  ์ƒ์„ฑ๋œ Worker์™€ ๋ฐ”์ธ๋”ฉ์„ ํ™•์ธํ•œ ๋’ค, ํŒจํ‚ค์ง€๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณ ๋ฅด์ง€ ์•Š๊ณ  Vite ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋Š” Workers Free์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ๋ฃŒ ํ”Œ๋žœ์ด ํ•„์š”ํ•ด์ง€๋ฉด ํ˜„์žฌ ์ตœ์†Œ ์š”๊ธˆ์€ ๊ณ„์ •๋‹น ์›” $5์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ๊ฐ€์น˜๋Š” ๊ฒ€ํ†  ๊ฐ€๋Šฅํ•œ ๋กœ์ปฌ ๊ฒฐ๊ณผ๋ฌผ๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ๋„๋‹ฌํ•˜๋Š” ๋ฐ ์žˆ์ง€, ํ”„๋กœ๋•์…˜ ์šด์˜์ด ๋ฌด๋ฃŒ๊ฐ€ ๋œ๋‹ค๋Š” ์•ฝ์†์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

5. Vite ํŒ€์ด ์•ฑ ์žฌ์ž‘์„ฑ ์—†์ด ์„ค์ • ๋ณ€ํ™˜ํ•˜๊ธฐ

Vite ๊ธฐ๋ฐ˜ Worker๋ฅผ ์šด์˜ํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋ง ํŒ€์€ ๋ณต์‚ฌ๋ณธ์—์„œ cf migrate --dry-run์„ ์‹คํ–‰ํ•˜๊ณ , ์ƒ์„ฑ๋œ TypeScript๋ฅผ ๊ฒ€ํ† ํ•œ ๋‹ค์Œ, ๋ฐฐํฌ ๋ฐฉ์‹์„ ๋ฐ”๊พธ๊ธฐ ์ „์— ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ธ”๋ก์˜ ๋ฐ˜๋ณต์ด ๋Š˜์–ด๋‚œ ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ˜•์‹์€ ๊ณตํ†ต ๊ธฐ๋ฐ˜ ์„ค์ •์—์„œ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŒ€์ด ์˜ฎ๊ฒจ์•ผ ํ•  ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ํŒŒ์ผ ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๋™์ž‘์ž…๋‹ˆ๋‹ค.

6. ๋ฐ์ดํ„ฐยท์šด์˜ ํŒ€์ด Cloudflare ์ฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์„œ์— ์—ฐ๊ฒฐํ•˜๊ธฐ

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

7. Worker ํŒ€์ด ํ”„๋กœ๋•์…˜ ๋ณ€๊ฒฝ ์ „ ๋กœ์ปฌ ๋ฆฌ์†Œ์Šค ์ ๊ฒ€ํ•˜๊ธฐ

์ง€์›๋˜๋Š” ๋ช…๋ น์€ --local์„ ๋ฐ›์•„ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž ์‹œ ์‹คํ–‰๋˜๋Š” Miniflare ์ธ์Šคํ„ด์Šค์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. KV, D1, R2์—์„œ ์ •์˜๋œ ์ž‘์—…๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋Œ€์‘ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด cf๋Š” ์กฐ์šฉํžˆ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Cloudflare AI Search Worker๋ฅผ ๋งŒ๋“œ๋Š” ํŒ€์€ ์ด ๊ฒฝ๊ณ„๋ฅผ ์ด์šฉํ•ด ๊ฐœ๋ฐœ ๋ช…๋ น์ด ์›๊ฒฉ ์“ฐ๊ธฐ๋กœ ๋ฐ”๋€” ๊ฑฑ์ • ์—†์ด ๋ณด์กฐ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cf๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ๋งŒํ•œ ์ œํ’ˆ 2๊ฐ€์ง€

CLI ์ž์ฒด๊ฐ€ ๊ณง ์ œํ’ˆ ๊ธฐํšŒ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํญ๋„“์€ API๋ฅผ ์‹ค์ œ ์—…๋ฌด์— ์“ฐ๋ ค๋ฉด ์—ฌ์ „ํžˆ ํ•„์š”ํ•œ ์ œ์–ด ๊ณ„์ธต์— ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ๋งํ•œ ๊ธฐํšŒ: ์—์ด์ „์‹œ์šฉ Cloudflare ๋ณ€๊ฒฝ ํ†ต์ œ

์—ฌ๋Ÿฌ Cloudflare ๊ณ„์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ์—์ด์ „์‹œ๋‚˜ ์†Œ๊ทœ๋ชจ ํ”Œ๋žซํผ ํŒ€์„ ์œ„ํ•ด ์Šน์ธ๊ณผ ์ฆ์ ์— ์ง‘์ค‘ํ•œ ๊ณ„์ธต์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ DNS, zone, WAF, Worker ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๋ฉด ์ œํ’ˆ์ด cf๋กœ ํ˜„์žฌ JSON ์ƒํƒœ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ์ฐจ์ด๋ฅผ ๋ณด์—ฌ ์ฃผ๋ฉฐ, ์Šน์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋œ ํ”„๋กœํ•„๋กœ ๋ณ€๊ฒฝ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์š” ์‹ ํ˜ธ๋Š” ํฌ์ง€ ์•Š์ง€๋งŒ ์ƒ์—…์„ฑ์€ ์žˆ์Šต๋‹ˆ๋‹ค. cloudflare dns management๋Š” ๋ฏธ๊ตญ์—์„œ ์›”๊ฐ„ ๊ฒ€์ƒ‰๋Ÿ‰์ด ์•ฝ 170ํšŒ์ด๊ณ  CPC๋Š” $6์ด๋ฉฐ, ํŽ˜์ด์ง€ ์ƒ๋‹จ ์ž…์ฐฐ๊ฐ€๋Š” $3.85์—์„œ $36.64์ž…๋‹ˆ๋‹ค. ๋ฒ”์šฉ ์ธํ”„๋ผ ๊ฑฐ๋ฒ„๋„Œ์Šค์—๋„ ์‹ค์ œ ์˜ˆ์‚ฐ์ด ๋ฐฐ์ •๋ฉ๋‹ˆ๋‹ค. Spacelift์˜ Starter+ ๊ฐ€๊ฒฉ์€ $20,000์ž…๋‹ˆ๋‹ค. Cloudflare ์ „์šฉ ์ œํ’ˆ์€ ๋ชจ๋“  ํด๋ผ์šฐ๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋” ์ €๋ ดํ•˜๊ณ  ๋„์ž…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์†Œ ํŒ๋งค ๊ฐ€๋Šฅ ๋ฒ„์ „์€ DNS์™€ Worker ๋ณ€๊ฒฝ์„ ๋‹ค๋ฃจ๋Š” GitHub app ๋˜๋Š” ํ˜ธ์ŠคํŒ…ํ˜• ๊ฒ€ํ†  ํ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ•„ ๊ฒฉ๋ฆฌ, ๋ช…๋ น ํ—ˆ์šฉ ๋ชฉ๋ก, ๋ณ€๊ฒฝ ์ „ํ›„ JSON, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ฐ˜ API๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ์›ํด๋ฆญ ๋กค๋ฐฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋ฐฉ์–ด๋ ฅ์ž…๋‹ˆ๋‹ค. ๋ช…๋ น ๋ฒ”์œ„๋Š” ์ด๋ฏธ cf๊ฐ€ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์ฐจ๋ณ„ํ™”ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์€ ์ •์ฑ…, ์ฆ์ , ๊ถŒํ•œ, ์—์ด์ „์‹œ ์›Œํฌํ”Œ๋กœ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ GUI ๋ž˜ํผ๋Š” ๋น ๋ฅด๊ฒŒ ๋ณต์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ์šฉํ•œ ๊ธฐ๋Šฅ: Worker ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ค€๋น„๋„

์ €์žฅ์†Œ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ Vite, Wrangler ๊ธฐ๋ฐ˜ esbuild, Python, Rust ๊ฐ€์šด๋ฐ ์–ด๋””์— ์†ํ•˜๋Š”์ง€ ๋ถ„๋ฅ˜ํ•˜๊ณ , ์•ˆ์ „ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์‹คํ–‰ํ•œ ๋’ค, ํ›„์† ํ•ญ๋ชฉ์„ pull request ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊ฟ” ์ฃผ๋Š” ์Šค์บ๋„ˆ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ตฌ๋งค์ž๋Š” ์ž‘์€ ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฐœ์ธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ Worker๋ฅผ ๋ณด์œ ํ•œ ํŒ€์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ๋งŒ์œผ๋กœ ํšŒ์‚ฌ๋ฅผ ์„ธ์šฐ๊ธฐ์—๋Š” ์ˆ˜์š”๊ฐ€ ๋„ˆ๋ฌด ์ž‘์Šต๋‹ˆ๋‹ค. cloudflare worker deployment์˜ ๋ฏธ๊ตญ ์›”๊ฐ„ ๊ฒ€์ƒ‰๋Ÿ‰์€ ์•ฝ 10ํšŒ์— ๋ถˆ๊ณผํ•˜์ง€๋งŒ, ๊ฒ€์ƒ‰ ์˜๋„๋Š” ๊ฑฐ๋ž˜ํ˜•์ž…๋‹ˆ๋‹ค. ํ•ฉ๋ฆฌ์ ์ธ MVP๋Š” Cloudflare ์šด์˜ ์ œํ’ˆ์ด๋‚˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค์˜ ์œ ๋ฃŒ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ €์žฅ์†Œ ์Šค์บ”, cf migrate --dry-run, ๋นŒ๋“œ ๊ฒ€์ฆ, ๋ช…ํ™•ํ•œ Wrangler ๋Œ€์ฒด ๊ฒฝ๋กœ ๋ณด๊ณ ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋ฒ ํƒ€ ๊ธฐ๊ฐ„์˜ ๋ฆด๋ฆฌ์Šค ๋ณ€๋™์ž…๋‹ˆ๋‹ค. ์Šค์บ๋„ˆ๊ฐ€ cf์™€ Cloudflare Vite Plugin ๋ฒ„์ „์„ ๋ฉด๋ฐ€ํžˆ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ณด๋‹ค ์กฐ์–ธ์ด ๋” ๋นจ๋ฆฌ ๋‚ก์Šต๋‹ˆ๋‹ค.

ํ•œ๊ณ„์™€ ํ˜„์‹ค์ ์ธ ์„ ํƒ

์ง€๊ธˆ cf๊ฐ€ ์ž˜ ๋งž๋Š” ์šฉ๋„๋Š” ๋ช…๋ น ๊ฒ€์ƒ‰, JSON ์ค‘์‹ฌ์˜ ๊ณ„์ • ์ฝ๊ธฐ, ์ƒˆ Vite Workers, ์‹ ์ค‘ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹œํ—˜์ž…๋‹ˆ๋‹ค. cf๊ฐ€ ์ž‘์—…์„ Wrangler์— ๋งก๊ธฐ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Wrangler๋ฅผ ๊ณ„์† ์„ค์น˜ํ•ด ๋‘๊ณ , ํ”„๋กœ๋•์…˜ ์“ฐ๊ธฐ๋Š” ๋ช…์‹œ์ ์ธ ๊ถŒํ•œ ๋ฒ”์œ„์™€ ๊ฒ€ํ†  ์ ˆ์ฐจ ๋’ค์— ๋‘ก๋‹ˆ๋‹ค.

ํ˜„์žฌ ์˜คํ”ˆ ๋ฒ ํƒ€์—์„œ cloudflare.config.ts๋Š” ๊ณ„์ • ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋‹จ์ผ ๊ธฐ์ค€ ์ •๋ณด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹œ์ž‘์ ์€ Workers์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Cloudflare API ์ž‘์—…์„ ๋ชจ๋‘ ์•ˆ์ „ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์›Œํฌํ”Œ๋กœ๋กœ ๋ฐ”๊ฟ” ์ฃผ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด API๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํ† ํฐ์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋„ ๋„“์–ด์ง„๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ, ์ตœ์†Œ ๊ถŒํ•œ๊ณผ ๋ช…๋ น ๊ฒ€ํ† ๋Š” ๋œ ์ค‘์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค.

๋กœ์ปฌ ์˜ต์…˜์˜ ๋ฒ”์œ„๋Š” ์˜๋„์ ์œผ๋กœ ์ œํ•œ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” KV, D1, R2, Durable Object, Workflow ์ž‘์—…์€ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋กœ์ปฌ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์— ๋Œ€์‘ ํ•ญ๋ชฉ์ด ์—†๋Š” ์ž‘์—…์€ ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. ์•ˆ์ „ ์ธก๋ฉด์—์„œ๋Š” ๋ฐ”๋žŒ์งํ•œ ์†์„ฑ์ด์ง€๋งŒ, --local์ด Cloudflare ์ „์ฒด๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฒ”์šฉ ์˜คํ”„๋ผ์ธ ๋ฏธ๋Ÿฌ๋ผ๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐ”๋€๋‹ˆ๋‹ค. ํŒ€ ์ž‘์—…์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ์— cf ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜๊ณ , ์ƒ์„ฑ๋œ ์„ค์ •์„ ๊ฒ€ํ† ํ•˜๋ฉฐ, CI๊ฐ€ ํ”„๋กœ์ ํŠธ ๋กœ์ปฌ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ „์—ญ ์„ค์น˜๋Š” ๋ช…๋ น์„ ํƒ์ƒ‰ํ•  ๋•Œ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ํ˜‘์—…์ž ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๋™์ž‘์„ ์–ป์œผ๋ ค๋ฉด ๋ฒ„์ „์„ ๊ณ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Cloudflare CLI๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜์š”?

npm์œผ๋กœ cf๋ฅผ ์„ค์น˜ํ•˜๊ณ  cf auth login ๋˜๋Š” ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋œ CLOUDFLARE_API_TOKEN์œผ๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ cf cli search๋กœ ๋ช…๋ น์„ ์ฐพ๊ณ , ์“ฐ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์ „์— ์ฝ๊ธฐ ์ „์šฉ JSON ๊ฒฐ๊ณผ๋ถ€ํ„ฐ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ Worker๋Š” cf init์œผ๋กœ ์‹œ์ž‘ํ•œ ๋’ค cloudflare.config.ts๋ฅผ ํ™•์ธํ•˜๊ณ  ๋กœ์ปฌ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

CF CLI๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ด ๊ฐ€์ด๋“œ์—์„œ cf๋Š” 3,000๊ฐœ๊ฐ€ ๋„˜๋Š” Cloudflare API ์ž‘์—…๊ณผ Worker ํ”„๋กœ์ ํŠธ ์›Œํฌํ”Œ๋กœ๋ฅผ ์œ„ํ•œ Cloudflare์˜ ์˜คํ”ˆ ๋ฒ ํƒ€ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ cf ์ด๋ฆ„์„ ์“ฐ๋Š” ๋ณ„๊ฐœ์˜ Cloud Foundry CLI์™€๋Š” ๋‹ค๋ฅธ ํˆด์ž…๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ Cloudflare CLI๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ•˜๋‚˜์š”?

Node.js 22 ์ด์ƒ์„ ์„ค์น˜ํ•œ ๋‹ค์Œ npm i -g cf๋ฅผ ์‹คํ–‰ํ•˜๊ณ  cf --version์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋Š” Cloudflare์˜ ์˜คํ”ˆ ์†Œ์Šค ์ €์žฅ์†Œ์—์„œ ๋ฐฐํฌํ•˜๋Š” scope ์—†๋Š” cf ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค.

CLI๋กœ Cloudflare Wrangler๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ•˜๋‚˜์š”?

Wrangler๋Š” ๋ณ„๋„ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด cf ๋ฒ ํƒ€๋Š” Wrangler์˜ esbuild ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•œ ํ”„๋กœ์ ํŠธ์™€ Rust ๋˜๋Š” Python Workers์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ Wrangler๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. cf๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๊ณ  ๊ณง๋ฐ”๋กœ Wrangler๋ฅผ ์ง€์šฐ์ง€ ๋ง๊ณ , ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํˆด์„ ์„ค์น˜ํ•ด ๋ฒ„์ „์„ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.

Cloudflare Workers๋ฅผ ๋กœ์ปฌ์—์„œ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋‚˜์š”?

์„ค์ •๋œ Worker ํ”„๋กœ์ ํŠธ ์•ˆ์—์„œ cf dev๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. cf init์œผ๋กœ ๋งŒ๋“  ์ƒˆ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Cloudflare Vite Plugin์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๋ฆฌ์†Œ์Šค ๋ช…๋ น์—๋Š” --local์„ ๋ถ™์—ฌ Miniflare ๊ธฐ๋ฐ˜ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ€์— ๋งž๋Š” ์•ˆ์ „ํ•œ Cloudflare ์ž๋™ํ™” ๊ฒฝ๋กœ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด AI production systems๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๊ฒŒ์‹œ์ผ
์นดํ…Œ๊ณ ๋ฆฌ
Build
Cursor IDE vs VSCode 2026: ์ „ํ™˜ ์ „์— ๋”ฐ์ ธ๋ณผ ์ฐจ์ด

Cursor IDE vs VSCode 2026: ์ „ํ™˜ ์ „์— ๋”ฐ์ ธ๋ณผ ์ฐจ์ด

Cursor IDE์™€ VSCode ์ค‘ ๋ฌด์—‡์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ์š”? Tab๊ณผ ์—์ด์ „ํŠธ, CopilotยทClaude CodeยทCodex, ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ํ˜ธํ™˜์„ฑ, ์š”๊ธˆ๊ณผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ •์ฑ…์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ• ์ง€, Cursor๋กœ ์˜ฎ๊ธธ์ง€ ํŒ๋‹จํ•  ๊ธฐ์ค€๊ณผ ์ „ํ™˜ ์ „ ์ ๊ฒ€ ์ˆœ์„œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.2026๋…„ 10์›” 18์ผBuild
n8n ๋ฆฌ๋ทฐ: ๊ฐ€๊ฒฉ๊ณผ ๋ฌด๋ฃŒ ํ”Œ๋žœ, ๊ธฐ์—… ์ž๋™ํ™”์— ํ•„์š”ํ•œ ์šด์˜ ์กฐ๊ฑด

n8n ๋ฆฌ๋ทฐ: ๊ฐ€๊ฒฉ๊ณผ ๋ฌด๋ฃŒ ํ”Œ๋žœ, ๊ธฐ์—… ์ž๋™ํ™”์— ํ•„์š”ํ•œ ์šด์˜ ์กฐ๊ฑด

n8n์€ ์–ด๋–ค ๊ธฐ์—…์— ์ ํ•ฉํ• ๊นŒ์š”? ๊ฐ€๊ฒฉ๊ณผ ๋ฌด๋ฃŒ Community์˜ ํ˜‘์—… ์ œํ•œ, Cloud์™€ ์…€ํ”„ ํ˜ธ์ŠคํŒ…์˜ ์ฐจ์ด, ์ฝ”๋“œยทAI ์—์ด์ „ํŠธ์˜ ํ™œ์šฉ ์กฐ๊ฑด์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ZapierยทMake์™€์˜ ์„ ํƒ ๊ธฐ์ค€๋ถ€ํ„ฐ ์˜ค๋ฅ˜ ๋ณต๊ตฌ์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ๊นŒ์ง€, ์ž๋™ํ™”๋ฅผ ์ฑ…์ž„์งˆ ๋‹ด๋‹น์ž๊ฐ€ ํ™•์ธํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 18์ผBuild
Railway ๋ฐฐํฌ์™€ Render ๋ฐฐํฌ, 2026๋…„ ์š”๊ธˆยท์šด์˜ ์กฐ๊ฑด ๋น„๊ต

Railway ๋ฐฐํฌ์™€ Render ๋ฐฐํฌ, 2026๋…„ ์š”๊ธˆยท์šด์˜ ์กฐ๊ฑด ๋น„๊ต

Railway ๋ฐฐํฌ์™€ Render ๋ฐฐํฌ๋ฅผ ๊ณ ๋ฏผํ•œ๋‹ค๋ฉด ์š”๊ธˆ๊ณผ ๋ณต๊ตฌยท์šด์˜ ์กฐ๊ฑด์„ ํ•จ๊ป˜ ๋น„๊ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์†Œ๊ทœ๋ชจ ์•ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ๋Ÿ‰ ๊ณผ๊ธˆ๊ณผ ์ธ์Šคํ„ด์Šค ์š”๊ธˆ, ๋ฌด๋ฃŒ ํ”Œ๋žœ์˜ ํ•œ๊ณ„, Postgres ๋ณต๊ตฌ, ์›Œ์ปคยทcron, ๋ฆฌ์ „ ํ™•์žฅ ์ฐจ์ด๋ฅผ ์งš๊ณ  ์‹ค์ œ ์›Œํฌ๋กœ๋“œ์— ๋งž๋Š” ์„ ํƒ ๊ธฐ์ค€์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 18์ผBuild
Pydantic AI๋กœ Python ์—์ด์ „ํŠธ ๋งŒ๋“ค๊ธฐ: ๊ฒ€์ฆ๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€

Pydantic AI๋กœ Python ์—์ด์ „ํŠธ ๋งŒ๋“ค๊ธฐ: ๊ฒ€์ฆ๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€

Pydantic AI๋กœ Python ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ํˆด, ์˜์กด์„ฑ ์ฃผ์ž…, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ๊ฒ€์ฆ์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ๊ณ ๊ฐ ๋ฌธ์˜ ๋ถ„๋ฅ˜ ์˜ˆ์ œ๋กœ ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ณ , ๋ชจ๋ธ ๊ต์ฒด์™€ ํ‰๊ฐ€, ์‹คํ–‰ ๋ณต๊ตฌ์˜ ํ•œ๊ณ„๊นŒ์ง€ ํ™•์ธํ•˜๋ฉฐ LangGraphยทLangChain๊ณผ ๋น„๊ตํ•ด ์„ ํƒ ๊ธฐ์ค€์„ ์žก์Šต๋‹ˆ๋‹ค.2026๋…„ 10์›” 17์ผBuild
AI ๋ณด์•ˆ ๊ฐ€๋“œ๋ ˆ์ผ ์„ค๊ณ„: ํˆด ๋น„๊ต๋ถ€ํ„ฐ ์ตœ์†Œ ํ†ต์ œ ํ•ญ๋ชฉ๊นŒ์ง€

AI ๋ณด์•ˆ ๊ฐ€๋“œ๋ ˆ์ผ ์„ค๊ณ„: ํˆด ๋น„๊ต๋ถ€ํ„ฐ ์ตœ์†Œ ํ†ต์ œ ํ•ญ๋ชฉ๊นŒ์ง€

AI ๋ณด์•ˆ์„ ์œ„ํ•œ ๊ฐ€๋“œ๋ ˆ์ผ์€ ์–ด๋””์—, ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ด์•ผ ํ• ๊นŒ์š”? ๊ณ ๊ฐ์˜ ํ™˜๋ถˆ ์š”์ฒญ์„ ๋”ฐ๋ผ ์ž…๋ ฅ ๊ฒ€์‚ฌ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ถŒํ•œ, ํˆด ์‹คํ–‰ ์Šน์ธ, ์ถœ๋ ฅ ๊ฒ€์ฆ๊นŒ์ง€ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์ฃผ์š” ํˆด์˜ ๊ณต์‹ ๋ฌธ์„œ์ƒ ๊ธฐ๋Šฅ๊ณผ ํ•œ๊ณ„, ์†Œ๊ทœ๋ชจ ํŒ€์ด ๋จผ์ € ๊ฐ–์ถœ ํ†ต์ œ ํ•ญ๋ชฉ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 17์ผBuild
ํ• ๋ฃจ์‹œ๋„ค์ด์…˜, ์™œ ์ƒ๊ธฐ๊ณ  ์–ด๋–ป๊ฒŒ ์ค„์ผ๊นŒ? LLM ์˜ค๋ฅ˜๋ฅผ ๋ง‰๋Š” ์‹ค๋ฌด ๊ฐ€์ด๋“œ

ํ• ๋ฃจ์‹œ๋„ค์ด์…˜, ์™œ ์ƒ๊ธฐ๊ณ  ์–ด๋–ป๊ฒŒ ์ค„์ผ๊นŒ? LLM ์˜ค๋ฅ˜๋ฅผ ๋ง‰๋Š” ์‹ค๋ฌด ๊ฐ€์ด๋“œ

LLM์ด ์‚ฌ์‹ค๊ณผ ์ˆซ์ž, ์ธ์šฉ ์ถœ์ฒ˜, ํˆด ์ธ์ž๋ฅผ ์ž˜๋ชป ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์ตœ์‹  ์ž๋ฃŒ๋ฅผ ํ™œ์šฉํ•˜๋Š” RAG๋ถ€ํ„ฐ ์ธ์šฉยท์ˆ˜์น˜ ๊ฒ€์ฆ, ๋ถˆํ™•์‹คํ•  ๋•Œ์˜ ์‘๋‹ต ๋ณด๋ฅ˜, ํ‰๊ฐ€ ์„ค๊ณ„๊นŒ์ง€, ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ ๊ณ ๊ฐ์—๊ฒŒ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์žก์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ Python ์˜ˆ์ œ์™€ ์ฃผ๊ฐ„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 17์ผBuild
์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ: ๊ฐœ๋…๋ถ€ํ„ฐ ์˜ˆ์‹œยทํ…œํ”Œ๋ฆฟ๊นŒ์ง€

์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ: ๊ฐœ๋…๋ถ€ํ„ฐ ์˜ˆ์‹œยทํ…œํ”Œ๋ฆฟ๊นŒ์ง€

์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์— ๋„ฃ์„ ์—ญํ• ยท๊ทœ์น™ยท์ถœ๋ ฅ ํ˜•์‹ยทํˆด ์‚ฌ์šฉ ์ง€์นจ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ์™€์˜ ์ฐจ์ด, AnthropicยทOpenAIยทGemini์˜ ์„ค์ • ๋ฐฉ์‹, ํ”„๋กฌํ”„ํŠธ ์ธ์ ์…˜๊ณผ ๊ถŒํ•œ ํ†ต์ œ์˜ ํ•œ๊ณ„๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์˜ˆ์‹œ์™€ ๋ณต์‚ฌํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ž‘์„ฑ ๊ธฐ์ค€์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 17์ผBuild
tool calling์œผ๋กœ LLM์— ํˆด ์—ฐ๊ฒฐํ•˜๊ธฐ: ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ถ€ํ„ฐ ์‹คํ–‰ ๊ฒ€์ฆ๊นŒ์ง€

tool calling์œผ๋กœ LLM์— ํˆด ์—ฐ๊ฒฐํ•˜๊ธฐ: ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ถ€ํ„ฐ ์‹คํ–‰ ๊ฒ€์ฆ๊นŒ์ง€

tool calling๊ณผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ฃผ๋ฌธ ์กฐํšŒ ์˜ˆ์ œ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํˆด ์Šคํ‚ค๋งˆ๋ถ€ํ„ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜๊นŒ์ง€ ์‚ดํŽด๋ณด๊ณ , OpenAIยทAnthropicยทGemini์˜ ์ฐจ์ด, ์ธ์ˆ˜ ๊ฒ€์ฆ๊ณผ ๊ถŒํ•œ ์ฒ˜๋ฆฌ, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ๊ณผ MCP๋ฅผ ์„ ํƒํ•  ๊ธฐ์ค€์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.2026๋…„ 10์›” 17์ผBuild
๋‰ด์Šค๋ ˆํ„ฐ

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

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