ν°μ€ν 리 λ·°
π¨ AI λͺ¨λΈ μ₯μ λμ μ λ΅
– “OpenAIκ° ν°μ Έλ μλΉμ€λ μ μ£½κ² λ§λλ ꡬ쑰”
(RAG · NestJS · SaaS μ΄μμμ μ§μ§ νμνλ λμ μλ리μ€)
AI κΈ°λ₯μ μ€μλΉμ€μ μ¬λ¦¬κ³ λλ©΄
μΈμ κ° λ°λμ μ΄ μκ°μ΄ μ΅λλ€.
“AI μλ΅μ΄ μ μμ.”
“μ΄μ κΉμ§ λλ κ² κ°μκΈ° λ©μ·μ΄μ.”
“OpenAI μν νμ΄μ§ λ³΄μ ¨μ΄μ…?”
μ΄λ μλΉμ€κ° κ°μ΄ λ©μΆλ©΄
그건 **AI μλΉμ€κ° μλλΌ ‘AI μμ‘΄ μλΉμ€’**μ
λλ€.
μ΄λ² κΈμ
AI λͺ¨λΈ(OpenAI, μΈλΆ LLM)μ΄ μ₯μ λ₯Ό μΌμΌμΌλ
π μ°λ¦¬ μλΉμ€λ κ³μ μ΄μ μκ² λ§λλ μ λ΅μ
μ΄μμμ μ€μ λ‘ μΌλ ꡬ쑰 κ·Έλλ‘ μ 리ν©λλ€.
π§ μ΄ κΈμ λͺ©ν
- AI μ₯μ μ νμ μ νν λΆλ₯
- μ₯μ μ “λ¬΄μ‘°κ±΄ μ€ν¨”κ° μλ λ¨κ³μ λμ
- RAG / LLM / Vector DB κ°κ°μ fallback μ λ΅
- PM·λνμκ² μ€λͺ κ°λ₯ν μ΄μ ꡬ쑰 λ§λ€κΈ°
1οΈβ£ AI μ₯μ λ μκ°λ³΄λ€ μμ£Ό, λ€μν ννλ‘ μ¨λ€
μ΄μνλ©΄μ κ²ͺμ μ₯μ μ νμ λλ΅ μ΄λ μ΅λλ€.
1) LLM API μμ μ₯μ
- 5xx
- timeout
- rate limit νλ°
2) λΆλΆ μ₯μ
- μλ΅μ μ€λλ° κ·Ήλ¨μ μΌλ‘ λλ¦Ό
- νΉμ λͺ¨λΈλ§ μ₯μ
3) κ°μ μ₯μ
- μλ² λ© API μ₯μ
- Vector DB μ₯μ
- λ€νΈμν¬ μ΄μ
π μ€μν 건
“AI μ₯μ = μ 체 μλΉμ€ μ₯μ ”κ° λλ©΄ μ λλ€λ μ .
2οΈβ£ κ°μ₯ μνν ꡬ쑰 (μ λ μ΄λ κ² νμ§ λ§μ)
@Post('/ai/chat')
async chat(@Body() query: string) {
return this.openai.chat.completions.create(...);
}
μ΄ κ΅¬μ‘°μ λ¬Έμ μ :
- AI μ μ€λ©΄ → API μ체 μ€ν¨
- νλ‘ νΈλ ν° νλ©΄
- μ¬μ©μλ “μλΉμ€ μ£½μ”μΌλ‘ μΈμ
π μ΄κ±΄ μ΄μ κ΄μ μμ μ΅μ μ λλ€.
3οΈβ£ κΈ°λ³Έ μμΉ: AIλ “νμ κΈ°λ₯”μ΄ μλλΌ “κ°μΉ μΆκ° κΈ°λ₯”
μ΄μ κΈ°μ€μμ AIλ μ΄λ κ² λ΄μΌ ν©λλ€.
β AI = μλΉμ€μ μ λΆ
β AI = μλΉμ€μ λΆκ° κ°μΉ
μ΄ κ΄μ μ΄ μμ΄μΌ
fallback μ λ΅μ΄ μμ°μ€λ½κ² μ€κ³λ©λλ€.
4οΈβ£ 1λ¨κ³ λμ: Timeout + Circuit Breaker
β AI νΈμΆμ λ°λμ νμμμμ΄ μμ΄μΌ νλ€
const breaker = new CircuitBreaker(
() => openai.chat.completions.create(...),
{
timeout: 5000,
errorThresholdPercentage: 50,
resetTimeout: 30000,
}
);
- 5μ΄ μμ μλ΅ μμΌλ©΄ μ€ν¨
- μΌμ λΉμ¨ μ΄μ μ€ν¨ μ μλ μ°¨λ¨
- 30μ΄ ν λ€μ μλ
π μ΄κ±Έ μ νλ©΄
λλ¦° AIκ° μλ² μ 체λ₯Ό λ¬Άμ΄λ²λ¦½λλ€.
5οΈβ£ 2λ¨κ³ λμ: RAG fallback μ λ΅
RAGμμμ fallback μ°μ μμ
1. μΊμλ μ΄μ λ΅λ³
2. Vector DB κ²μ κ²°κ³Ό μμ½
3. FAQ / μ μ μλ΅
4. "νμ¬ AI μλ΅μ΄ μ§μ°λκ³ μμ΅λλ€" λ©μμ§
1οΈβ£ μΊμλ λ΅λ³ λ°ν
const cached = await redis.get(cacheKey);
if (cached) return cached;
π μ¬μ©μλ
**“μλ΅μ λͺ» λ°μλ€”κ° μλλΌ
“μ‘°κΈ λ λλν λ΅λ³μ λ°μλ€”**κ³ λλλλ€.
2οΈβ£ Vector DB κ²μ κ²°κ³Όλ§ λ°ν
const docs = await qdrant.search(...);
return {
mode: 'fallback',
results: docs.map(d => d.summary),
};
π AI μμ±μ μμ§λ§
μ 보λ μ 곡λ¨
3οΈβ£ FAQ / μ μ λ΅λ³
if (isFaq(query)) {
return faqService.answer(query);
}
π κ³ κ°μΌν°·ν¬ν μμμμ νΉν μ€μ
6οΈβ£ 3λ¨κ³ λμ: “AI μλ΅ μμ”μ UXλ‘ μ¨κΈ°μ§ λ§ κ²
μ΄κ±΄ μμΈλ‘ μ€μν ν¬μΈνΈμ λλ€.
β μ΄λ κ² νλ©΄ μ λ©λλ€.
“μ μ ν λ€μ μλν΄μ£ΌμΈμ.”
μ¬μ©μλ
- μ μ λλμ§ λͺ¨λ₯΄κ³
- κ³μ μλ‘κ³ μΉ¨νκ³
- κ²°κ΅ λ λ©λλ€.
β μ΄λ κ² λ§ν΄μΌ ν©λλ€
“νμ¬ AI μλ΅μ΄ μΌμμ μΌλ‘ μ§μ°λκ³ μμ΅λλ€.
λμ κ΄λ ¨ λ¬Έμλ₯Ό λ°λ‘ 보μ¬λ릴κ²μ.”
π ν¬λͺ
+ λμ μ μ
μ΄κ² UX κ΄μ μμ ν¨μ¬ λ«μ΅λλ€.
7οΈβ£ 4λ¨κ³ λμ: λͺ¨λΈ λ€μ€ν (κ°λ₯νλ€λ©΄)
μ΄κ±΄ μ¬μ μμ λ λμ ν©λλ€.
μμ μ λ΅
μ°μ μμλͺ¨λΈ
| 1 | OpenAI |
| 2 | λ€λ₯Έ OpenAI λͺ¨λΈ |
| 3 | λ‘컬 LLM |
| 4 | μ μ μλ΅ |
try {
return await openaiMain.chat(...);
} catch {
return await openaiBackup.chat(...);
}
π λͺ¨λ μλΉμ€μ νμλ μλμ§λ§
μν°νλΌμ΄μ¦μ κ°κΉμμ§μλ‘ μ€μ
8οΈβ£ μ₯μ κ°μ§ & μλ¦Ό (μ΄μμ ν΅μ¬)
AI μ₯μ λ
μ¬μ©μλ³΄λ€ μ°λ¦¬κ° λ¨Όμ μμμΌ ν©λλ€.
λ°λμ κ°μ§ν΄μΌ ν μ§ν
- AI μλ΅ μ€ν¨μ¨
- νκ· μλ΅ μκ°
- timeout λ°μ νμ
- fallback μ§μ νμ
if (fallbackUsed) {
metrics.increment('ai_fallback');
}
Slack μλ¦Ό μμ
π¨ AI μλ΅ μ₯μ κ°μ§
- μ€ν¨μ¨: 62%
- νκ· μλ΅ μκ°: 7.2s
- fallback μ§μ
: 183ν (5λΆ)
π μ΄ μλ¦Όμ΄ μμΌ
μ΄μμκ° μ μμ κΉΉλλ€.
9οΈβ£ μ₯μ λμ μλλ¦¬μ€ (Runbook μμ½)
μν© 1: OpenAI μμ μ₯μ
1. Circuit Breaker μ°¨λ¨ νμΈ
2. μΊμ μλ΅ νμ±ν
3. RAG → λ¬Έμ κ²μ λͺ¨λ μ ν
4. Slack 곡μ§
5. μν νμ΄μ§ νμΈ
μν© 2: μλ΅ μ§μ°λ§ λ°μ
1. timeout κ°μ
2. context κΈΈμ΄ μΆμ
3. κ³ κΈ λͺ¨λΈ → κ²½λ λͺ¨λΈ μ ν
10οΈβ£ μ΄μνλ©΄μ κΉ¨λ¬μ μ§μ§ ν΅μ¬
μ΄κ±΄ μ λ§ μ€μν λ¬Έμ₯μ λλ€.
AI μ₯μ λμμ
κΈ°μ λ¬Έμ κ° μλλΌ
μλΉμ€ μ€κ³ λ¬Έμ λ€.
- AIκ° λ©μ·μ λ
- μλΉμ€κ° κ°μ΄ λ©μΆλ©΄ β
- μλΉμ€κ° μ°νν΄μ κ³μ λμνλ©΄ β
μ΄ μ°¨μ΄κ°
λ°λͺ¨ μλΉμ€μ
μ€μ μλΉμ€λ₯Ό κ°λ¦
λλ€.
λ€μ κΈ μκ³
λ€μ κΈμμλ
π “AI κΈ°λ₯μ ‘μ νν κΈ°λ₯’μΌλ‘ μ€κ³νλ UX/κΈ°ν μ λ΅”
μ λ€λ£Ήλλ€.
- AIλ₯Ό μ λ©΄μ λ λ vs λ€μ λ λ
- AI μμ΄λ μΈ μ μλ μλΉμ€ ꡬ쑰
- μ¬μ©μ λΆλ§μ΄ μ€μ΄λλ μ€κ³
κΈ°μ + κΈ°ν μκΈ°λ‘ λμ΄κ°λλ€.
AIμ₯μ λμ, RAGμ΄μ, OpenAIμ₯μ , SaaSμ΄μ, NestJS, AIμλΉμ€μ€κ³, CircuitBreaker, AIUX, λ°±μλμ΄μ
'study > λ°±μλ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
- Total
- Today
- Yesterday
- Next.js
- μΏ λ²λ€ν°μ€
- NestJS
- fastapi
- νλ‘ νΈμλκ°λ°
- DevOps
- aiμ² ν
- seo μ΅μ ν 10κ°
- flax
- JWT
- PostgreSQL
- REACT
- Express
- Redis
- Prisma
- JAX
- node.js
- λ₯λ¬λ
- Docker
- λ°±μλκ°λ°
- rag
- Python
- kotlin
- κ°λ°λΈλ‘κ·Έ
- μΉκ°λ°
- SEOμ΅μ ν
- llm
- nextJS
- CI/CD
- μλ°λ©΄μ
| μΌ | μ | ν | μ | λͺ© | κΈ | ν |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |

