๐ก ์์ ํด์? โ AI ๋น์ฉยท๋ณด์ยท๋ฐฑ์
์ด ๋ ์จ์ด ๋๋๋ฉด
- Anthropic Console์์ ์ ์ฌ์ฉ ํ๋ + ์๋์ ์ผ์ AI ๋น์ฉ ํญ์ฃผ๋ฅผ ๋ง์๋ค
- API ํค ๋ ธ์ถยทOAuth ์ค์ ยทSQL injection ๋ฑ ๊ธฐ๋ณธ ๋ณด์ ์ ๊ฒ 10ํญ๋ชฉ์ ํต๊ณผํ๋ค
- DB ์๋ ๋ฐฑ์ ์ด ๋งค์ผ ๋๊ณ ์๊ณ , ๋ณต์ ์ ์ฐจ๋ฅผ ํ ๋ฒ ํ์ธํ๋ค
์ ์ด ์์ญ์ด ๊ฐ์ฅ ๋ฌด์์ด๊ฐ
๋น๊ฐ๋ฐ์๊ฐ SaaS๋ฅผ ์ถ์ํ์ ๋ ๊ฐ์ฅ ์์ฃผ ๊ฒช๋ 3๊ฐ์ง ์ฌ๊ณ ๊ฐ ๋ฐ๋ก ์ด ์์ญ์ด์์. ๋ชจ๋ "์ถ์๋ ํ๋๋ฐ ์๋ฆผ ํ ํต ๋ฐ๊ณ ์์๋ ํ๋ฆฌ๋" ์๋๋ฆฌ์ค๋ค์ด์์.
| ์ฌ๊ณ | ์ค์ ์ฌ๋ก | ์๋ฐฉ๋ฒ(์ด๋ฒ lesson) |
|---|---|---|
| AI ๋น์ฉ ํญ์ฃผ | ํ ์ฌ์ฉ์๊ฐ ์๋ํ ๋ฃจํ ๋๋ ค์ ํ๋ฃจ์ $300 ์ฒญ๊ตฌ | ์ ํ๋ + ์๋ (๋จ๊ณ 1~2) |
| API ํค ์ ์ถ | .env๋ฅผ GitHub public์ ์ฌ๋ ค์ ํค ๋์ฉ โ 24์๊ฐ ๋ง์ $5,000 | 10ํญ๋ชฉ ๋ณด์ ์ ๊ฒ (๋จ๊ณ 3) |
| ๋ฐ์ดํฐ ๋ ์๊ฐ | DB ๋ง์ด๊ทธ๋ ์ด์ ์๋ชปํด์ user ํ ์ด๋ธ ํต์งธ๋ก ์ญ์ | ๋งค์ผ ์๋ ๋ฐฑ์ + ๋ณต์ ํ ์คํธ (๋จ๊ณ 4) |
์ด ์์ญ์ "ํ ๋ฒ ์ผ๋๋ฉด ๊ณ์ ๋ณดํธ๋๋" ํญ๋ชฉ์ด์์. 30๋ถ๋ง ํฌ์ํ๋ฉด ๊ทธ ๋ค์ 6๊ฐ์์ ์์ฌํด๋ ๋ผ์.
์ ํญ์ checklist "์์ ํด์?" ์์ญ + Claude Code์์ /v4-security
์ด๋ฒ lesson์ ๋ ํ๊ฒฝ์ ๊ฐ์ด ์จ์. vuild.kr checklist๋ฅผ ์ ํญ์ ๋์ฐ๊ณ , Claude Code ํฐ๋ฏธ๋์ ๋ค์ ํ ์ค.
์ ๋ ฅ (Claude Code ํฐ๋ฏธ๋)
/v4-security
์ด ์คํฌ์ ๋ณธ์ธ ๋น๋ํท์ ์ฝ๋์ ํ๊ฒฝ๋ณ์๋ฅผ ์๋์ผ๋ก ์ค์บํด์ ๋ณด์ ์ํ ํญ๋ชฉ์ ๋ฆฌํฌํธํด์. API ํค ๋ ธ์ถยทOAuth ์ฝ๋ฐฑยทCSPยทHTTPS ๊ฐ์ ยทSQL injection ๊ฐ๋ฅ์ฑ ๋ฑ 10๊ฐ์ง๋ฅผ ํ ๋ฒ์ ์ ๊ฒํด ์ค์. ์คํฌ์ด ์งํ๋๋ ๋์ vuild.kr checklist์ "์์ ํด์?" ์์ญ์ ์์์ ๋ณด๋ฉด์ ๊ฐ์ด ๋ฐ๋ผ๊ฐ์.
๋จ๊ณ 1 โ Anthropic Console์์ ์ ํ๋ ์ค์ (๊ฐ์ฅ ๋จผ์ )
Ch.4-13์์ ๋ณธ์ธ ์๋น์ค์ Claude API๋ฅผ ๋ถ์๋ค๋ฉด(ANTHROPIC_API_KEY) ๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ์ ํ๋ ์ค์ ์ด์์.
ํ๋ ์์ด ๋๋ฉด ๋๊ตฐ๊ฐ ์๋ํ๋ก API๋ฅผ ๋ฌดํ ํธ์ถํ์ ๋ ๋ณธ์ธ ์ ์ฉ์นด๋๊ฐ ๋น๋ช
์ ์ง๋ฌ์.
- console.anthropic.com ์ ์ โ ๋ณธ์ธ ๊ณ์ ๋ก๊ทธ์ธ (LEARN์์ ์ฐ๋ ๊ทธ ๊ณ์ )
- ์ข์ธก ์ฌ์ด๋๋ฐ "Settings โ Limits" ํด๋ฆญ
- "Monthly spend limit" ์ ๋ ฅ โ ๋ณธ์ธ์ด ๊ฐ๋น ๊ฐ๋ฅํ ๊ธ์ก (๊ถ์ฅ: $20~50)
- "Email alerts" ์ฒดํฌ โ 50% / 80% / 95% ๋๋ฌ ์ ์ด๋ฉ์ผ ๋ฐ๊ธฐ
- "Save" ํด๋ฆญ
์ด๊ฑธ ์ผ๋๋ฉด ํ๋์ ๋๋ฌํ๊ธฐ ์ ์ ์๋ฆผ์ ๋ฐ์์. 95%์ ๋๋ฌํ๋ฉด ๊ทธ ์ฆ์ API ํธ์ถ์ด ๋ฉ์ถฐ์. ๋ณธ์ธ ์๋น์ค๋ ์ ๊น ์ ๋์ง๋ง ์ฒญ๊ตฌ์ ํญํ์ ๋ง์ ์ ์์ด์. ์ ํ์ ์ธ "์ ๊น ๋ฉ์ถค vs ๊ฑฐ์ก ์์ค" ํธ๋ ์ด๋์คํ์ธ๋ฐ, ๋ฌด์กฐ๊ฑด ์ ๊น ๋ฉ์ถค ์ชฝ์ด ์ณ์์.
๋จ๊ณ 2 โ ๋ค๋ฅธ LLM๋ ๊ฐ์ ํจํด (OpenAI / Google)
Anthropic ์ธ์ OpenAI๋ Google API๋ฅผ ๊ฐ์ด ์ฐ๋ฉด ๊ทธ์ชฝ๋ ๋๊ฐ์ด ํ๋๋ฅผ ์ค์ ํด์ผ ํด์. ๊ฐ ์ฝ์์ ์์น๋ง ๋ฉ๋ชจํด ๋ฌ์.
- OpenAI:
platform.openai.com/account/billing/limitsโ "Set monthly budget" + "Email notifications" - Google AI Studio (Gemini):
aistudio.google.comโ ๋ฌด๋ฃ ํฐ์ด ์ฐ์ , ๊ฒฐ์ ๋ฑ๋ก ์ GCP Billing alerts ํจ๊ป - OpenRouter:
openrouter.ai/accountโ "Credits" ์ถฉ์ ์์ด๋ผ ์๋ ํ๋. ์ถฉ์ ํ ๋งํผ๋ง ์ฐ์
OpenRouter์ฒ๋ผ ์ถฉ์ ์ ๋ชจ๋ธ์ ์ฌ์ค์ ํ๋ ์์ฒด๊ฐ ์ถฉ์ ์์ก์ด๋ผ ๊ฐ์ฅ ์์ ํด์. ์ ์ฉ์นด๋ ์๋ ๊ฒฐ์ ๊ฐ ๋ฌด์์ฐ๋ฉด OpenRouter๋ก ์ฎ๊ธฐ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด์์.
๋จ๊ณ 3 โ ๋ณด์ ์ ๊ฒ 10ํญ๋ชฉ (์คํฌ ์๋ + ๋ณธ์ธ ํ์ธ)
/v4-security ์คํฌ์ด ๋ณธ์ธ ์ฝ๋๋ฅผ ์ค์บํด์ ๋ค์ 10ํญ๋ชฉ์ ์๋์ผ๋ก ๋ฆฌํฌํธํด ์ค์.
๊ฐ ํญ๋ชฉ๋ง๋ค โ
ํต๊ณผ / โ ๏ธ ์ฃผ์ / โ ์ํ์ผ๋ก ํ์. โ๊ฐ ์์ผ๋ฉด ๊ทธ ์๋ฆฌ์์ ๊ณ ์น๊ธฐ.
| # | ์ ๊ฒ ํญ๋ชฉ | ์ํ๋ |
|---|---|---|
| 1 | .env ํ์ผ์ด .gitignore์ ์๋ (GitHub ๋ ธ์ถ ๋ฐฉ์ง) | ์น๋ช ์ |
| 2 | ์ฝ๋ ์์ API ํค๊ฐ ํ๋์ฝ๋ฉ๋์ด ์์ง ์๋ | ์น๋ช ์ |
| 3 | Rails master.key๊ฐ .gitignore์ ์๋ | ์น๋ช ์ |
| 4 | production์์ HTTPS ๊ฐ์ (config.force_ssl = true) |
๋์ |
| 5 | CSP(Content Security Policy) ํค๋ ์ค์ | ๋์ |
| 6 | SQL injection ๊ฐ๋ฅ์ฑ (raw SQL ์ฌ์ฉ ๊ฒ์ฌ) | ๋์ |
| 7 | XSS ๋ฐฉ์ด (์ฌ์ฉ์ ์ ๋ ฅ sanitize) | ๋์ |
| 8 | OAuth callback URL์ด Railway ๋๋ฉ์ธ๊ณผ ์ผ์น | ์ค๊ฐ |
| 9 | ๊ด๋ฆฌ์ ๊ฒฝ๋ก(/admin) ์ธ์ฆ ํ์ | ์ค๊ฐ |
| 10 | ๊ฐ๋ฐ์ฉ ์๋ ์ฌ์ฉ์(์: admin@test.com) production์์ ๋นํ์ฑ |
์ค๊ฐ |
โ ๏ธ GitHub์ .env๊ฐ ์ด๋ฏธ ์ฌ๋ผ๊ฐ ์๋ค๋ฉด (๊ฐ์ฅ ํํ ์ฌ๊ณ )
๊ณผ๊ฑฐ ์ปค๋ฐ์ .env๋ ํค ํ์ผ์ด ํฌํจ๋ ์ฑ๋ก GitHub์ ์ฌ๋ผ๊ฐ ์์ผ๋ฉด, .gitignore์ ์ถ๊ฐ๋ง ํด์๋ ๋ถ์กฑํด์.
๊ทธ ํค๋ ์ด๋ฏธ ๋
ธ์ถ๋ ๊ฑฐ์์. 3๊ฐ์ง๋ฅผ ์ฆ์ ํด์ผ ํด์.
- ๋ ธ์ถ๋ ํค ์ฆ์ ํ๊ธฐ โ Anthropic/OpenAI ์ฝ์์์ ๊ทธ ํค "Revoke" โ ์ ํค ๋ฐ๊ธ.
- ์ ํค๋ฅผ Railway Variables์ ๋ฑ๋ก, ๋ณธ์ธ .env๋ ๊ฐฑ์ .
- (์ ํ)
git filter-repo๋ก ๊ณผ๊ฑฐ ์ปค๋ฐ์์ .env ์ ๊ฑฐ + force push. ๋น๊ฐ๋ฐ์ ํผ์๋ ์ด๋ ค์ฐ๋ ์ 1~2๋ง ํด๋ ์ถฉ๋ถ.
๋จ๊ณ 4 โ DB ์๋ ๋ฐฑ์ ํ์ฑํ + ๋ณต์ ํ ๋ฒ ํ ์คํธ
๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ๋ ๊ฐ์ฅ ํํ ์์ธ์ ๋ณธ์ธ์ด ์๋ชป๋ ๋ง์ด๊ทธ๋ ์ด์ ์ production์ ์ ์ฉํ ๊ฑฐ์์. ๋ฐฑ์ ์ด ์์ผ๋ฉด 5๋ถ ์์ ๋ณต์ ๊ฐ๋ฅ. ์์ผ๋ฉด user ์ ๋ณด๊ฐ ํต์งธ๋ก ๋ ์๊ฐ์. Railway/Render ๋ ๋ค ๋ฌด๋ฃ ํ๋์์๋ ์๋ ๋ฐฑ์ ๊ฐ๋ฅํด์.
| DB | Railway | Render |
|---|---|---|
| SQLite (๊ธฐ๋ณธ ๋ชจ๋) | Volume์ ์ ์ฅ โ Volume Snapshot ๋งค์ผ | Persistent Disk Snapshot ๋งค์ผ |
| PostgreSQL (์ฌํ ๋ชจ๋) | Postgres ํ๋ฌ๊ทธ์ธ โ "Backups" ์๋ ๋งค์ผ | Postgres ์๋น์ค โ ๋ฌด๋ฃ ํ๋ 7์ผ ๋ณด๊ด |
๊ธฐ๋ณธ ๋ชจ๋(SQLite)์ธ ๊ฒฝ์ฐ Railway์์ โ ๋ณธ์ธ ์๋น์ค โ "Settings โ Volumes" โ ๋ณธ์ธ Volume ์ ํ โ "Backup Schedule"์ "Daily"๋ก. ์ฌํ ๋ชจ๋(PostgreSQL)๋ Railway โ ๋ณธ์ธ Postgres ํ๋ฌ๊ทธ์ธ โ "Backups" ํญ โ "Enable Daily Backups".
๋ฐฑ์ ์ด ์ผ์ก๋ค๊ณ ๋์ด ์๋์์. ๋ณต์์ด ์ง์ง ๋๋์ง ํ ๋ฒ ํ์ธํด์ผ ํด์. Railway์์ "Backup โ Restore"๋ฅผ ๋๋ฅด๋ฉด ๊ทธ ๋ฐฑ์ ์ด ์ ์์ ํ๊ฒฝ์ ๋ณต์๋ผ์. ๋ฐฑ์ ๋ฐ์ดํฐ์ ๋ณธ์ธ user/data๊ฐ ๋ณด์ด๋ฉด OK. ์ง์ง production์ ๋ฎ์ด์ฐ์ง๋ ๋ง์ธ์. ๋จ์ "๋ณต์์ด ๋์ํ๋ค๋ ์ฌ์ค"๋ง ํ์ธํ๋ ๋จ๊ณ์์.
๋จ๊ณ 5 โ ๋ณด์ ์๊ฐ์ง๋จ 10ํญ๋ชฉ ํต๊ณผ ํ ํ ๊ธ โ
์ ๋จ๊ณ 1~4๋ฅผ ๋ค ํ์ผ๋ฉด vuild.kr checklist์ ๐ก "์์ ํด์?" ์์ญ์ ๊ฐ์ 3๊ฐ ํญ๋ชฉ ํ ๊ธ์ โ ๋ก ์ผ์.
- "AI ๋น์ฉ ํญ์ฃผ ๋ฐฉ์ง ์ผ์ ธ์" โ Anthropic + OpenAI ๋ฑ ๋ชจ๋ ํ๋ + ์๋ ์ค์ ์๋ฃ ์ โ
- "๋ณด์ ์ ๊ฒ ํต๊ณผํ์ด์" โ
/v4-security10ํญ๋ชฉ ์ค โ๊ฐ 0๊ฐ์ผ ๋ โ (โ ๏ธ๋ ์์ด๋ OK) - "๋ฐ์ดํฐ๊ฐ ๋งค์ผ ๋ฐฑ์ ๋ผ์" โ Railway/Render์์ daily backup ํ์ฑํ + ๋ณต์ ํ ๋ฒ ํ ์คํธ ์ โ
๋ฒ์ธ โ Rate Limiting (๋ฐ๋ณต ํธ์ถ ์ฐจ๋จ)
AI ๋น์ฉ ํญ์ฃผ ๋ฐฉ์ง์ ๋ ๋ฒ์งธ ๋ณดํธ๋ง์ ๋ณธ์ธ ์๋น์ค ์์์ ํ ์ฌ์ฉ์๊ฐ ๋ถ๋น Nํ ์ด์ ํธ์ถ ๋ชป ํ๊ฒ ๋ง๋ ๊ฒ์ด์์.
Rails๋ผ๋ฉด rack-attack gem์ด ํ์ค์ด์์.
์ด ๋จ๊ณ๋ ์ฒซ ์ฌ์ฉ์ 5๋ช
๋จ๊ณ์์๋ ์ ํ. ์ฌ์ฉ์ 100๋ช
๋์ด๊ฐ๋ฉด ํ์.
Claude Code์ "rack-attack๋ก Claude API ํธ์ถ์ ์ฌ์ฉ์๋น ๋ถ๋น 5ํ๋ก ์ ํํด์ค" ํ ์ค. ์คํฌ์ด ์์์ Gemfile + ์ค์ ํ์ผ + ํ ์คํธ๊น์ง ๋ง๋ค์ด ์ค์.
๋งํ๋ ์ง์ โ ๋ฏธ๋ฆฌ ๋ต
- "Anthropic Console์ ๊ฒฐ์ ์ ๋ณด๊ฐ ์์ด์ Limits ํ์ด์ง๊ฐ ์ ๋ ์." โ Free tier๋ง ์ฐ๊ณ ์๋ค๋ ๋ป. Free tier๋ ์๋์ผ๋ก ํ๋๊ฐ ์์ด์ OK. ๊ฒฐ์ ๋ฑ๋ก ์ ๊น์ง๋ ์ด ๋จ๊ณ ๊ฑด๋๋ฐ์ด๋ ๋จ.
- "
/v4-security๊ฐ โ 6๊ฐ๋ฅผ ๋ณด๊ณ ํ์ด์." โ ์ ์์ด์์. ํ ๋ฒ์ ๋ค ๊ณ ์น์ง ๋ง๊ณ ์์์๋ถํฐ 1๊ฐ์ฉ. Claude Code์ "1๋ฒ ํญ๋ชฉ๋ถํฐ ๊ณ ์ณ์ค" ํ ์ค. ๋ค ๊ณ ์น ํ ์คํฌ ์ฌ์คํ. - "GitHub์ ์๋ ์ .env ์ฌ๋ ธ๋๋ฐ ์ด๋กํด์?" โ ํค ํ๊ธฐ + ์ ํค ๋ฐ๊ธ + Railway ์ฌ๋ฑ๋ก๋ง ํ๋ฉด ์ผ๋จ ์์ . ๊ณผ๊ฑฐ ์ปค๋ฐ ์ ๋ฆฌ๋ ์ํํ๋ ์ ํด๋ OK.
- "Railway ๋ฐฑ์ ์ต์ ์ด ์ ๋ณด์ฌ์." โ Free ํ๋์ ์ผ๋ถ ๋ฐฑ์ ๊ธฐ๋ฅ์ด ์ ํ๋จ. Hobby($5/์) ์ด์์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๊ฑฐ๋, Render์ Postgres Free ํ๋์ 7์ผ ๋ฐฑ์ ๋ฌด๋ฃ.
- "๋ฐฑ์ ๋ณต์ํด๋ณด๋ ๋ฐ์ดํฐ๊ฐ ๋น์ด ์์ด์." โ ๋ฐฑ์ ์ด ๋๋ฌด ์ผ์ฐ ์กํ๊ฑฐ๋ production์ ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์์ด์. ๋ฉฐ์น ์ด์ ํ ๋ค์ ํ์ธ.
์๋ฃ ์ฒดํฌ๋ฆฌ์คํธ (๋ชจ๋ โ ์ด๋ฉด 5-4๋ก)
- โ Anthropic Console ์ ํ๋ + ์๋ ์ค์ (๋ค๋ฅธ LLM๋ ํจ๊ป)
- โ
/v4-security์คํ โ โ ํญ๋ชฉ ๋ชจ๋ ํด๊ฒฐ - โ Railway/Render์ DB ์๋ ๋ฐฑ์ ํ์ฑํ
- โ ๋ณต์ ์ ์ฐจ 1ํ ํ ์คํธ (์ค์ ์ด์ ๋ฎ์ด์ฐ๊ธฐ X)
- โ vuild.kr checklist ๐ก ์์ญ 3๊ฐ ํญ๋ชฉ โ
๋ค์ ๋จ๊ณ โ 5-4 โ๏ธ ๋ฒ์ ์ผ๋ก ๊ด์ฐฎ์์? โ ๊ฐ์ธ์ ๋ณดยท์ฝ๊ด
์์ ์ด ์กํ์ผ๋ ์ด์ ๋ฒ์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์. ๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๋ฐฉ์นจ๊ณผ ์ด์ฉ์ฝ๊ด์ vuild.kr checklist์ "์๋ ์์ฑ" ๋ฒํผ ํ ๋ฒ์ผ๋ก ๋ง๋ค๊ณ , ํธํฐ์ ์ฌ์ ์ ์ ๋ณด๋ฅผ ๋ฃ์ด์. ๋น๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ๋ง๋งํ ๋ถ๋ถ์ 5๋ถ์ ๋๋ด์.
vuild.kr launch/checklist (์์ ํด์? ์์ญ)
๋ก๊ทธ์ธ ํ ๋ณธ์ธ ํ๋ก์ ํธ๋ก ์งํํ ์ ์์ต๋๋ค.
์ค์ตํ๊ธฐ
๋ก๊ทธ์ธํ๋ฉด ์คํฌ์ ์ค์ตํ ์ ์์ต๋๋ค