๐Ÿฆž AI ์—์ด์ „ํŠธ์™€ ํ•จ๊ป˜ํ•œ ์ฝ˜ํ…์ธ  ์ž๋™ํ™” ์—ฌ์ • 03 (๋‚˜์—๊ฒŒ ์ตœ์ ํ™” ๋œ ์—…๋ฌดํŒŒํŠธ๋„ˆ&์˜์–ด ์ฝ”์น˜ ๋™์‹œ์—)

์†Œ๊ฐœ

์‹œ๋„ํ•˜๊ณ ์ž ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ทธ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.

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

๊ทธ๋ž˜์„œ ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์ด๋Ÿฐ ํŒŒํŠธ๋„ˆ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์™”์Šต๋‹ˆ๋‹ค.

"๋‚ด๊ฐ€ ๋ฐฉ๊ธˆ ํ•œ ๋ง์„ ๋ฐ”๋กœ ๊ณ ์ณ์ฃผ๊ณ , ๋‚ด ์—…๋ฌด ๋งฅ๋ฝ์—์„œ ๋Œ€ํ™”๋ฅผ ์˜ˆ์˜๋ฐ”๋ฅด๊ฒŒ ์ด์–ด๊ฐ€ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ƒ๋Œ€."

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

๊ทธ ์ƒ๊ฐ์ด ์˜ค๋ž˜ ๋จธ๋ฆฟ์†์— ์žˆ์—ˆ๋Š”๋ฐ, Claude๋ฅผ ์“ฐ๋ฉด์„œ "์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒ ๋‹ค"๋Š” ์ƒ๊ฐ์ด ์ฒ˜์Œ์œผ๋กœ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ง„ํ–‰ ๋ฐฉ๋ฒ•

์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜์…จ๋‚˜์š”?

1๋‹จ๊ณ„ โ€” ์ผ๋‹จ ๋ง๋กœ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค

Claude.ai์—์„œ ์ฒ˜์Œ ์š”์ฒญ์€ ๋‹จ์ˆœํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” K-Beauty ํ•ด์™ธ ์˜์—… ๋‹ด๋‹น์ž์•ผ.
๋ฐ”์ด์–ด ๋ฏธํŒ… ์˜์–ด ์—ฐ์Šต์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋กคํ”Œ๋ ˆ์ด ์•ฑ์„ ๋งŒ๋“ค์–ด์ค˜.
AI๊ฐ€ ๋ฐ”์ด์–ด ์—ญํ• ์„ ํ•˜๊ณ , ๋‚ด ๋ง์„ ๊ต์ •ํ•ด์คฌ์œผ๋ฉด ํ•ด.

์ฒ˜์Œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ์€ ๋‹จ์ˆœํ•œ ์ฑ„ํŒ… UI์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ํ•ต์‹ฌ ๊ตฌ์กฐ๋Š” ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. AI ๋ฐ”์ด์–ด๊ฐ€ ์‹ค์ œ์ฒ˜๋Ÿผ ์งˆ๋ฌธํ•˜๊ณ , ์ œ ๋‹ต๋ณ€ ์•„๋ž˜์— ๊ต์ • ๋ธ”๋ก์ด ๋ถ™๋Š” ํ˜•ํƒœ์˜€์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์š•์‹ฌ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

"๋ฐ”์ด์–ด ๋ชฉ์†Œ๋ฆฌ๋กœ ์ฝ์–ด์ค„ ์ˆ˜ ์—†์–ด?"          โ†’ TTS ์Œ์„ฑ ์ถœ๋ ฅ ์ถ”๊ฐ€
"๋‚ด๊ฐ€ ๋งํ•˜๋ฉด ํ…์ŠคํŠธ๋กœ ๋ฐ”๊ฟ”์ค˜"              โ†’ ๋งˆ์ดํฌ ์Œ์„ฑ ์ž…๋ ฅ ์ถ”๊ฐ€
"์‹œ์žฅ ์ •๋ณด๋„ ๊ฐ™์ด ๋‚˜์™”์œผ๋ฉด ํ•ด"             โ†’ ๐Ÿ“Š Market Insight ๋ธ”๋ก ์ถ”๊ฐ€
"๊ต์ • ์Šคํƒ€์ผ์„ ๋‚ด๊ฐ€ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜"     โ†’ ๊ผผ๊ผผํžˆ / ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ / ๊ณ ๊ธ‰ ํ‘œํ˜„ ์˜ต์…˜ ์ถ”๊ฐ€

๊ธฐ๋Šฅ์„ ํ•˜๋‚˜ ์š”์ฒญํ•˜๋ฉด Claude๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์คฌ๊ณ , ์ €๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ํ”ผ๋“œ๋ฐฑ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.


2๋‹จ๊ณ„ โ€” ์˜ค๋ฅ˜์™€์˜ ์ „์Ÿ (์‚ฝ์งˆ ๊ธฐ๋ก)

์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜ โ€” JS ๋ฌธ๋ฒ• ์˜ค๋ฅ˜

์•ฑ์„ ์ฒ˜์Œ ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ์ฝ˜์†”์— ์ด๋Ÿฐ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด์Šต๋‹ˆ๋‹ค.

Uncaught SyntaxError: Unexpected identifier 'm'
Uncaught ReferenceError: handleKey is not defined

์›์ธ์€ Claude.ai ์•„ํ‹ฐํŒฉํŠธ ํ™˜๊ฒฝ์ด ๊ตฌํ˜• JS ์—”์ง„์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑํ‹ฑ(`) ์•ˆ์— ์ค„๋ฐ”๊ฟˆ์ด ์žˆ์œผ๋ฉด ํŒŒ์‹ฑ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ Claude์—๊ฒŒ ๋ถ™์—ฌ๋„ฃ์—ˆ๋”๋‹ˆ ์›์ธ์„ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์˜ค๋ฅ˜ โ€” ์ตœ์‹  JS ๋ฌธ๋ฒ• ๋ฏธ์ง€์›

Uncaught SyntaxError: Unexpected identifier 's'
Uncaught SyntaxError: Unexpected end of input

์ด๋ฒˆ์—” .finally()์™€ Array.from()์ด ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. Claude๊ฐ€ ์•„ํ‹ฐํŒฉํŠธ ํ™˜๊ฒฝ์—์„œ ๊ธˆ์ง€๋œ ๋ฌธ๋ฒ• ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ธˆ์ง€

๋Œ€์ฒด ๋ฐฉ๋ฒ•

.finally()

XMLHttpRequest๋กœ ๊ต์ฒด

Array.from()

for ๋ฃจํ”„

const / let

var

Arrow function =>

function(){}

์ดํ›„ ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค Node.js๋กœ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์ž๋™์œผ๋กœ ๋Œ๋ ธ์Šต๋‹ˆ๋‹ค.

bash

node -e "
var js = require('fs').readFileSync('index.html','utf8')
  .match(/<script>([\s\S]*?)<\/script>/)[1];
try { new Function(js); console.log('Syntax OK'); }
catch(e) { console.log('ERROR:', e.message); }
"

์„ธ ๋ฒˆ์งธ ์˜ค๋ฅ˜ โ€” CORS ๋ฒฝ

์•ฑ์—์„œ Anthropic API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋‹ˆ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค.

HTTP 0 โ€” API ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

๋ธŒ๋ผ์šฐ์ €์—์„œ ์™ธ๋ถ€ API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด ๋ณด์•ˆ ์ •์ฑ…(CORS)์œผ๋กœ ๋ง‰ํž™๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ Anthropic์ด ์ œ๊ณตํ•˜๋Š” ํŠน์ˆ˜ ํ—ค๋”์˜€์Šต๋‹ˆ๋‹ค.

javascript

headers: {
  "x-api-key": userApiKey,
  "anthropic-version": "2023-06-01",
  "anthropic-dangerous-direct-browser-access": "true"
}

์ด ํ—ค๋” ๋•๋ถ„์— ๋ณ„๋„ ์„œ๋ฒ„ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ API ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณธ์ธ Anthropic API Key๋ฅผ ์•ฑ์— ์ž…๋ ฅํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.


3๋‹จ๊ณ„ โ€” ์ฒ˜์Œ์—” K-Beauty ์ „์šฉ์ด์—ˆ๋Š”๋ฐ

์ฒ˜์Œ ๋งŒ๋“  ์•ฑ์€ ๋„ค์ผยท์ƒ‰์กฐ ํ™”์žฅํ’ˆ(Enth) ์ „์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค 5๊ฐœ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋ผ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

"SaaS ํ•ด์™ธ ์˜์—…, ์ž๋™์ฐจ ๋ถ€ํ’ˆ ์ˆ˜์ถœ, ์‹ํ’ˆ ์œ ํ†ต ๋‹ด๋‹น์ž๋“ค๋„ ์“ธ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?"

Claude์—๊ฒŒ ๋ฐฉํ–ฅ์„ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

ํ•ต์‹ฌ์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณธ์ธ ์—…์ข…์„ ์ž…๋ ฅํ•˜๋ฉด Claude API๊ฐ€ ๊ทธ์— ๋งž๋Š” ๋ฐ”์ด์–ด ํŽ˜๋ฅด์†Œ๋‚˜์™€ ์‹œ๋‚˜๋ฆฌ์˜ค 5๊ฐœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ž…๋ ฅ: ์ง๋ฌด/์—…์ข… ยท ์ด๋ฆ„ ยท ์ฃผ์š” ์ƒํ™ฉ ยท ๊ต์ • ์Šคํƒ€์ผ
     โ†“
Claude API โ†’ ๋งž์ถค ์‹œ๋‚˜๋ฆฌ์˜ค 5๊ฐœ JSON ์ƒ์„ฑ
     โ†“
์‹œ๋‚˜๋ฆฌ์˜ค ์„ ํƒ โ†’ AI ๋ฐ”์ด์–ด ๋“ฑ์žฅ โ†’ ๋กคํ”Œ๋ ˆ์ด ์‹œ์ž‘

4๋‹จ๊ณ„ โ€” ๋ฌธ์„œํ™”๊นŒ์ง€ ํ•œ ๋ฒˆ์—

์•ฑ์ด ์–ด๋А ์ •๋„ ์™„์„ฑ๋˜์ž, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ๋ฐฐํฌํ•˜๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์—†์œผ๋‹ˆ ๋ฌธ์„œ๋ถ€ํ„ฐ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“  ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ
PRD, TRD, Task.md, build.sh๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ B2B ์˜์–ด ์ฝ”์น˜ ๊ธฐ์ค€์œผ๋กœ.

๋ช‡ ๋ถ„ ๋งŒ์— 4๊ฐœ ํŒŒ์ผ์ด ์™„์„ฑ๋์Šต๋‹ˆ๋‹ค.

  • PRD.md โ€” ์ œํ’ˆ ์ •์˜, ์‚ฌ์šฉ์ž ํŽ˜๋ฅด์†Œ๋‚˜, ๊ธฐ๋Šฅ ๋ชฉ๋ก, ๋กœ๋“œ๋งต

  • TRD.md โ€” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, API ์ŠคํŽ™, ES5 ์ œ์•ฝ์‚ฌํ•ญ, ๋ฐฐํฌ ์„ค์ •

  • Task.md โ€” Phase 0(์™„๋ฃŒ) ~ Phase 3๊นŒ์ง€ 53๊ฐœ ํƒœ์Šคํฌ

  • build.sh โ€” ํ•œ ์ค„ ๋ฐฐํฌ (bash build.sh vercel)

bash

bash build.sh status
# โ†’ Progress: 9 / 53 tasks complete

๊ฒฐ๊ณผ์™€ ๋ฐฐ์šด ์ 

์™„์„ฑ๋œ ๊ฒƒ

ํ•œ๊ตญ์–ด ์›น์‚ฌ์ดํŠธ์˜ ์Šคํฌ๋ฆฐ์ƒท

(์ตœ๊ทผ Nail๊ณผ ์ƒ‰์กฐํšŒ์‚ฌ ์—…๋ฌด๋ฅผ ์‹œ์ž‘ํ•ด์„œ ์ด ๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ๋ฐ˜์˜์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค)

๋‹จ์ผ HTML ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋™์ž‘ํ•˜๋Š” B2B ์˜์–ด ๋กคํ”Œ๋ ˆ์ด ์•ฑ์ž…๋‹ˆ๋‹ค. ์„ค์น˜ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ณธ์ธ Anthropic API Key๋งŒ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค. 5๊ฐ€์ง€ ์—…๋ฌด ์‹œ๋‚˜๋ฆฌ์˜ค ์„ ํƒ, AI ๋ฐ”์ด์–ด์™€ ์‹ค์‹œ๊ฐ„ ๋Œ€ํ™”, TTS๋กœ ๋ฐ”์ด์–ด ๋ชฉ์†Œ๋ฆฌ ๋“ฃ๊ธฐ, ๋งˆ์ดํฌ๋กœ ๋งํ•˜๋ฉด ์ž๋™ ์ธ์‹ ํ›„ ์ „์†ก, ๋งค ์‘๋‹ต ํ›„ ๊ต์ • ํ‘œํ˜„ + ํ•œ๊ตญ์–ด ํŒ + ์‹œ์žฅ ์ •๋ณด ํ‘œ์‹œ.

์‹œํ–‰์ฐฉ์˜ค์—์„œ ๋ฐฐ์šด ๊ฒƒ

์˜ค๋ฅ˜๊ฐ€ ๋‚  ๋•Œ๋งˆ๋‹ค ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ๋„ฃ๋Š” ๊ฒŒ ๊ฐ€์žฅ ๋น ๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด์—ˆ์Šต๋‹ˆ๋‹ค. "์™œ ์•ˆ ๋˜์ง€?"๋ฅผ ํ˜ผ์ž ๊ณ ๋ฏผํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜คํžˆ๋ ค ๋” ๋‚ญ๋น„์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Claude๋Š” ์ฝ”๋“œ๋งŒ ์งœ์ฃผ๋Š” ๊ฒŒ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. "๋ฒ”์šฉ์œผ๋กœ ๊ฐ€์•ผ ํ•˜๋‚˜, ์ „์šฉ์œผ๋กœ ๊ฐ€์•ผ ํ•˜๋‚˜?" ๊ฐ™์€ ๋ฐฉํ–ฅ ์งˆ๋ฌธ์—๋„ ์ด์œ ๋ฅผ ๋“ค์–ด ์˜๊ฒฌ์„ ์คฌ์Šต๋‹ˆ๋‹ค. ์ž‘์—… ์ค‘๊ฐ„์ค‘๊ฐ„์— ์ด๋Ÿฐ ๋Œ€ํ™”๊ฐ€ ๊ฝค ๋„์›€์ด ๋์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„

ํ˜„์žฌ API Key๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๊ตฌ์กฐ๋ผ ๋งค๋ฒˆ ๋„ฃ์–ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. localStorage ์ €์žฅ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„ ์˜ˆ์ •์ธ๋ฐ, ๋ณด์•ˆ ๊ด€๋ จํ•ด์„œ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ๊ณ„ํš

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

๋„์›€ ๋ฐ›์€ ๊ธ€ (์˜ต์…˜)

์‚ผ์„ฑPM Kenny ๋‹˜์˜ "API Manager ์ œ์ž‘ ๋ฐฉ์‹ (Rust ๊ธฐ๋ฐ˜ build.sh ์š”์ฒญ ๋ถ€๋ถ„)"์„ ์ฐธ๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค

๋‰ด์Šค๋ ˆํ„ฐ ๋ฌด๋ฃŒ ๊ตฌ๋…

๐Ÿ‘‰ ์ด ๊ฒŒ์‹œ๊ธ€๋„ ์ฝ์–ด๋ณด์„ธ์š”