SRE์ DevOps Engineer๋ค์ด ์ฅ์ ๋์์ ์ํด์, Datadog, CloudWatch, Dynatrace, Prometheus ๊ฐ์ Monitoring Tool์ ์ฌ์ฉํ์ง๋ง, Monitoring์ ์ด๋ค ๊ฒ์ด ์ง์ง ๋ฌธ์ ์ธ์ง, ์ด๋ค ๊ฒ์ ๋จ์ํ ๋ ธ์ด์ฆ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ๋ฌด์์ ๋จผ์ ํด์ผ ํ ์ง์ ๋ํด์ ๋ค์ ํผ์ ์ ์๊ธฐํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ์๋ํํ๊ณ , ๋ฐ๋น ๋ฅธ ์กฐ์น๋ฅผ ํ๊ธฐ ์ํด, AI์ ๊ท์น ๊ธฐ๋ฐ ์ ๊ทผ์ ํ์ฉํด CloudOps ๊ตฌํ์ ๋ง๋ Story๋ฅผ ๊ณต์ ํฉ๋๋ค.
CloudOps๋ฅผ ์ํ Agent๋ Node.js + React ๊ธฐ๋ฐ์ผ๋ก, ์๋์ ๋ฐ์์ ์ฌ๊ฑด ๋จ์๋ก ๋ฌถ๊ณ , Pod ์ฌ์์์ด๋ ๋ฆด๋ฆฌ์ค ๋กค๋ฐฑ ๊ฐ์ ๋์์ฑ ์ ์ ์ํ๋ฉฐ, ์ด์์์ ํผ๋๋ฐฑ(RLHF-lite)์ ํตํด ์ ์ ๋ ๋์ ์ถ์ฒ์ ํ ์ ์๋๋ก ์ค๊ณํ์ต๋๋ค.
์ ์์ํ์๊น?
- ์๋ ํผ๋ก๊ฐ: ๋์ผํ ๊ทผ๋ณธ ์์ธ์ธ๋ฐ๋ ์์ญ ๊ฐ์ ๋ถํ์ํ ์๋ ๋ฐ์
- ์๋ ๋ถ๋ฅ: ์ด๋ค ์กฐ์น๋ฅผ ๋จผ์ ์ทจํ ์ง ํ๋จํ๋๋ผ ์๊ฐ ๋ญ๋น
- ๋๋ฆฐ MTTR: ๋ค์ดํ์์ด ๊ธธ์ด์ง์๋ก ๋น์ฉ๊ณผ ์ ๋ขฐ๋ ์์ค ๋ฐ์
์ ์ํ๋ ํด๊ฒฐ์ฑ w/ Autonomous CloudOps Agent
- ์๋์ ์ฌ๊ฑด ๋จ์๋ก ๋ฌถ์ด โ ๋ ธ์ด์ฆ๋ฅผ ์ค์ด๊ณ , 20๊ฐ์ ์๋์ 1๊ฐ์ ์นด๋๋ก ๋จ์ํ
- ์๋ํ๋ ๋์์ฑ ์ ์ โ Pod ์ฌ์์, ๋ฆด๋ฆฌ์ค ๋กค๋ฐฑ, ๋ ํ๋ฆฌ์นด ํ์ฅ
- ํผ๋๋ฐฑ์ ๋ฐ์ํด ์ถ์ฒ ๊ฐ์ โ RLHF-lite Loop๋ก Confidence ์ ์ ์ฌ์กฐ์
์ํคํ ์ฒ ๊ฐ์
![]()
์ฌ์ฉ๋ ์ฃผ์ ๊ตฌ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Backend: Node.js + TypeScript + Fastify
- Persistence: Prisma ORM + SQLite(๊ฐ๋ฐ์ฉ), ์ดํ PostgreSQL
- Frontend(์์ ): React + Vite ๊ธฐ๋ฐ ๋์๋ณด๋
- ์๋ฆผ(๊ณํ ์ค): Slack ์ฐ๋
- ํผ๋๋ฐฑ ๋ฃจํ:
/
๊ธฐ๋ฐ RLHF-lite
ํ์ฌ๊น์ง์ ์งํํ ํญ๋ชฉ
Backend ์ด๊ธฐํ (Node.js + TypeScript + Prisma)
Database ์คํค๋ง ์ ์ ๋ฐ ์ฒซ Migration ์ ์ฉ
Database Schema with Prisma
model Incident {
createdAt DateTime @default(now())
status String @default(โopenโ)
severity String @default(โmediumโ)
title String
description String
alerts Alert[]
suggestions ActionSuggestion[]
}
model Alert {
source String
message String
severity String
ts DateTime @default(now())
incident Incident? @relation(fields: [incidentId], references: [id])
incidentId String?
}
model ActionSuggestion {
incidentId String
actionType String
description String
confidence Float @default(0.5)
feedback Feedback[]
}
model Feedback {
suggestionId String
value Int
comment String?
createdAt DateTime @default(now())
}
Fastify API ๋ผ์ฐํธ(incidents + feedback)
API Routes
- GET /api/incidents โ list incidents with alerts & suggestions
- POST /api/incidents/ingest โ create demo incident from mock alerts
- POST /api/feedback โ record
/
feedback
Analyzer Service (rules-based)
export function analyzeIncidents(alerts) {
const hasOOM = alerts.some(a => /OOMKilled/.test(a.message));
const has5xx = alerts.some(a => /5\d{2}/.test(a.message));
const suggestions = [];
if (hasOOM) suggestions.push({ actionType: โrestart_podsโ, description: โRestart pods with memory limits.โ, confidence: 0.7 });
if (has5xx) suggestions.push({ actionType: โrollbackโ, description: โRollback to previous stable release.โ, confidence: 0.65 });
return {
title: has5xx ? โError-rate spikeโ : hasOOM ? โPods OOMKilledโ : โGeneral alertโ,
severity: has5xx || hasOOM ? โhighโ : โmediumโ,
suggestions
};
}
์ถ๊ฐ์ ์ผ๋ก ์งํํด์ผํ๋ ํญ๋ชฉ
Analyzer ์๋น์ค(๊ธฐ๋ณธ ๊ท์น)
React ๋์๋ณด๋
Slack ์๋ฆผ + CI/CD ํ์ดํ๋ผ์ธ
RLHF-lite ํผ๋๋ฐฑ ๋ฃจํ
์ป์ ์ญ๋
- Backend ์์ง๋์ด๋ง: Fastify, TypeScript ESM, Prisma ORM
- Database ๋ชจ๋ธ๋ง: ์ฌ๊ฑด, ์๋, ํผ๋๋ฐฑ ๋ฃจํ ์ค๊ณ
- API-first ๊ฐ๋ฐ: ํ ์คํธ ๊ฐ๋ฅํ ์๋ํฌ์ธํธ ์ค๊ณ
- DevOps ์ค๋ฌด: Migration, .env ๊ด๋ฆฌ, CI ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- SRE ์ง์: ์ฌ๊ฑด ๋ชจ๋ธ๋ง, ๋์ ํ๋ ์ด๋ถ ์ค๊ณ
์์ผ๋ก์ ๋ก๋๋งต
- React ๋์๋ณด๋ โ ์ฌ๊ฑด ์๊ฐํ ๋ฐ ์ํด๋ฆญ ํผ๋๋ฐฑ
- Slack ์ฐ๋ โ ์๋ก์ด ์ฌ๊ฑด ์๋ฆผ ๋ฐ ๋์ ์คํ ์๋ฎฌ๋ ์ด์
- Datadog + CloudWatch ์ด๋ํฐ โ Mock ์๋ ๋์ ์ค์ ์๊ทธ๋ ์ฐ๊ณ
- ํผ๋๋ฐฑ ์ฌ๊ฐ์ค์น โ Confidence ์ ์๋ฅผ ์ด์์ ํผ๋๋ฐฑ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฐ์ดํธ
- ๋ฐฐํฌ โ Docker + Kubernetes ๋งค๋ํ์คํธ๋ก ์ค์ฌ์ฉ ํ๊ฒฝ ์ ์ฉ
์์ผ๋ก์ ๋น์ : LLM๊ณผ Agentic AI MVP ๋จ๊ณ์์๋ ๊ท์น ๊ธฐ๋ฐ ๋ถ์์ผ๋ก ์์ํ์ง๋ง, ์ฅ๊ธฐ์ ์ผ๋ก๋ LLM๊ณผ Agentic AI๋ฅผ ๊ฒฐํฉํด ๋ ๊ณ ๋ํ๋ ์ฅ์ ๋ถ์์ ๋ชฉํ๋ก ํฉ๋๋ค.
LLM ํ์ฉ ๋ฐฉ์
- ์์ฐ์ด ์์ฝ: ์๋ง์ ์๋์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๊ฐ๊ฒฐํ ์ฌ๊ฑด ์์ฝ์ผ๋ก ๋ณํ
- Runbook ๊ฒ์(RAG): ๋ด๋ถ Runbook/Confluence/Jira ๋ฌธ์๋ฅผ ์ง์ํด ๊ฒ์ฆ๋ ๋์์ฑ ์ ๊ณต
- ๋งฅ๋ฝ์ ์ถ๋ก : ๋ก๊ทธ, ์๋ฌ ํธ๋ ์ด์ค, ๋ฉํธ๋ฆญ์ ์ฐ๊ฒฐํด โ๊ฐ๋ฅํ ์์ธโ์ ์ค๋ช
Agentic AI ํ์ฉ ๋ฐฉ์
- ๋ค๋จ๊ณ ์์ฌ๊ฒฐ์ : ๋จ์ ์ ์์ด ์๋๋ผ ์ฐ์์ ์ธ ๊ณํ ์๋ฆฝ โ โ๋กค๋ฐฑ โ Pod ํ์ฅ โ ์๋ฌ์จ ๊ฒ์ฆ โ Slack ์๋ฆผโ
- ์์จ ์คํ(์์ ์ฅ์น ํฌํจ): ์น์ธ ๊ธฐ๋ฐ์ผ๋ก ์์ ํ ๋์์ฑ ์๋ ์คํ
- ํ์ต ๋ฃจํ: RLHF-lite๋ก ๋งค๋ฒ ๋ ๋์ triage ๊ฒฐ์
์ด ํ์ ์ด SRE & DevOps๋ฅผ ๋ฐ๊พธ๋ ์ด์
- ๋ฐ์์ โ ์ ์ ์ : ๋จ์ ์๋ ๋์์ ๋์ด, ์ํํ ๋ฐฐํฌ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ง
- ์ธ๊ฐ-์ค์ฌ AI: ์์ง๋์ด๋ฅผ ์๋ํ๋ ๋ฐ์ดํฐ ๋์ , ๋ช ํํ ๋ค์ ๋จ๊ณ๋ฅผ ์ ์
- ํ์ฅ ๊ฐ๋ฅํ ์ง์ ์ถ์ : ๋ชจ๋ ๊ฒฐ์ ๊ณผ ๊ฒฐ๊ณผ๊ฐ ์ง์์ผ๋ก ์ถ์ ๋์ด ์ํ์ง ์์
- ๋ ๋น ๋ฅธ ๋ณต๊ตฌ, ๋ ์ ์ ํผ๋ก: MTTR ๋จ์ถ, ๋ถํ์ํ ์๋ ๊ฐ์, ์จ์ฝ ์คํธ๋ ์ค ์ํ
์ฆ, ์ค๋์ ๊ท์น ๊ธฐ๋ฐ triage๊ฐ ๋ด์ผ์ ํ์ต-driven ์์ด์ ํธ ์ฝํ์ผ๋ฟ์ผ๋ก ๋ฐ์ ํด SRE/DevOps ํ์ ๋ ๋ ํ ํํธ๋๊ฐ ๋ ๊ฒ์ ๋๋ค.
๊ธฐ์ ์ ์ฃผ๋ ๊ฐ์น
- MTTR ๋จ์ถ โ ๋ค์ดํ์ ๋น์ฉ ์ ๊ฐ
- ์๋ ํผ๋ก๊ฐ ๊ฐ์ โ ์ค๋ณต/๋ ธ์ด์ฆ ์๋ ์ต์ํ
- ์์ฌ๊ฒฐ์ ํ์ง ํฅ์ โ ๊ท์น๊ณผ ๊ณผ๊ฑฐ ํผ๋๋ฐฑ ๊ธฐ๋ฐ์ ์ ์
- ์ง์ ๋ฃจํ ๊ตฌ์ถ โ ๋์ ํ๋ ์ด๋ถ์ด ์๋์ผ๋ก ์งํ
์ด๋ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ ์ด์ํ๋ ๊ธฐ์ ์๊ฒ, ์์ง๋์ด์ ๋ฐค์์ ์ค์ด๊ณ ๊ณ ๊ฐ์๊ฒ๋ ๋ ์์ ์ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.
