Skip to main content

SRE 기초

Site Reliability Engineering(SRE)은 Google에서 시작된 소프트웨어 엔지니어링 접근법으로, **“운영 문제를 소프트웨어 엔지니어링으로 해결한다”**는 철학을 기반으로 합니다. 전통적인 시스템 운영(Ops)이 수동 작업과 반복적 업무에 의존했다면, SRE는 자동화, 측정, 그리고 명확한 신뢰성 목표를 통해 서비스를 안정적으로 유지합니다. AI/ML 서비스가 프로덕션에 배포되면서, 모델 서빙 지연, GPU 장애, 추론 품질 저하 같은 새로운 유형의 신뢰성 문제가 등장했습니다. SRE 원칙은 이런 상황에서 체계적으로 대응하는 프레임워크를 제공합니다.

학습 목표

  • SRE의 핵심 원칙과 전통 운영, DevOps와의 차이를 설명할 수 있다
  • SLI/SLO/SLA를 정의하고 Error Budget을 계산하여 의사결정에 활용할 수 있다
  • 장애 감지부터 포스트모템까지 체계적인 대응 프로세스를 수립할 수 있다
  • AI/ML 서비스에 SRE 원칙을 적용하여 모델 품질과 인프라 안정성을 관리할 수 있다

왜 중요한가

서비스 장애는 매출 손실, 사용자 이탈, 브랜드 신뢰 하락으로 이어집니다. Amazon의 경우 1초의 지연이 연간 16억 달러의 손실을 의미한다는 연구도 있습니다. SRE는 이런 위험을 정량적으로 관리하는 체계를 제공합니다. 특히 AI 서비스에서는 모델 추론 지연, 할루시네이션, 데이터 드리프트 같은 전통 서비스에 없던 장애 유형이 존재합니다. SRE를 이해하면 이런 AI 특유의 신뢰성 문제를 체계적으로 다룰 수 있고, LLMOps 파이프라인에서 모델 품질 SLO를 설정하고 모니터링하는 역량을 갖출 수 있습니다.

SRE 정의와 핵심 원칙

Google의 Ben Treynor는 SRE를 **“소프트웨어 엔지니어에게 운영 기능을 설계하도록 맡긴 것”**이라고 정의했습니다. SRE의 핵심 원칙은 다음과 같습니다.
  1. 자동화 우선(Eliminate Toil): 반복적 수동 작업을 자동화하여 엔지니어링 시간 확보
  2. 측정 기반 의사결정: 직감이 아닌 SLI/SLO 데이터로 판단
  3. 점진적 변화(Progressive Rollout): Canary, Blue-Green 배포로 위험 최소화
  4. 공유 책임(Shared Ownership): 개발팀과 운영팀이 서비스 신뢰성을 공동 책임

SRE vs 전통 운영 vs DevOps

항목전통 운영(Ops)DevOpsSRE
철학안정성 우선, 변경 최소화개발과 운영의 협업소프트웨어로 운영 문제 해결
변경 관리변경 위원회(CAB) 승인CI/CD 자동화Error Budget 기반 배포 속도 조절
장애 대응런북 기반 수동 복구자동화된 복구 도구자동 복구 + Blameless 포스트모템
목표 설정가용성 99.99% (정성적)배포 빈도, 리드타임SLO로 정량적 목표 설정
팀 구성Ops 팀 분리크로스 펑셔널 팀SRE 팀 (50% 개발 + 50% 운영)
자동화스크립트 중심도구 체인 통합Toil 제거, 자동화 필수(50% 이상)
확장 방식서버 투입인프라 코드화소프트웨어 엔지니어링으로 확장

SLI / SLO / SLA

SLI (Service Level Indicator)

SLI는 서비스 품질을 나타내는 측정 지표입니다. 좋은 SLI는 사용자 경험을 직접 반영해야 합니다. 좋은 SLI 선택 기준:
  • 사용자가 직접 체감하는 지표인가?
  • 측정이 가능하고 자동화할 수 있는가?
  • 의미 있는 변화를 감지할 수 있는 민감도를 갖는가?
SLI 유형정의측정 예시
가용성(Availability)성공 요청 / 전체 요청HTTP 200 비율
지연(Latency)요청 처리 시간p50, p95, p99 응답시간
처리량(Throughput)단위 시간당 처리 요청 수초당 요청 수(RPS)
오류율(Error Rate)실패 요청 / 전체 요청HTTP 5xx 비율
정확도(Correctness)올바른 결과 / 전체 결과데이터 정합성 비율
신선도(Freshness)데이터 최신성마지막 업데이트 후 경과 시간

SLO (Service Level Objective)

SLO는 SLI에 대한 목표 범위입니다. 100%는 올바른 SLO가 아닙니다. 100%를 목표로 하면 배포를 멈춰야 하고, 비용이 기하급수적으로 증가합니다.
SLO 예시:
- 가용성: 월간 99.9% (허용 다운타임 ~43분)
- 지연: p99 < 200ms
- 오류율: < 0.1%
SLO 설정 가이드:
1

사용자 기대 파악

사용자가 실제로 체감하는 품질 수준을 파악합니다. 내부 도구와 외부 서비스의 기대치는 다릅니다.
2

현재 성능 측정

최소 2~4주간 실제 SLI 데이터를 수집하여 기준선(baseline)을 설정합니다.
3

비즈니스 요구사항 반영

비용, 경쟁사 수준, 규정 요구사항을 고려하여 현실적인 목표를 설정합니다.
4

점진적 강화

처음에는 느슨한 SLO로 시작하고, 안정화되면 점진적으로 목표를 높입니다.

SLA (Service Level Agreement)

SLA는 고객과의 계약입니다. SLO 위반 시 크레딧 환불, 위약금 등 비즈니스 결과가 따릅니다.
SLA는 항상 SLO보다 느슨하게 설정합니다. SLO가 99.95%라면 SLA는 99.9%로 설정하여 내부적으로 먼저 대응할 여유를 확보합니다.

Error Budget

Error Budget은 “허용 가능한 비신뢰성의 양”입니다. SLO가 99.9%라면, 0.1%가 Error Budget입니다.

계산 공식

월간 Error Budget = (1 - SLO) × 총 시간(분)

예시: SLO 99.9%, 30일 기준
Error Budget = 0.001 × 30 × 24 × 60 = 43.2분/월

분기 Error Budget = 0.001 × 90 × 24 × 60 = 129.6분/분기

Error Budget 기반 의사결정

Error Budget 소진율상태허용 액션제한 액션
0~50%안전기능 배포, 실험, 마이그레이션없음
50~75%주의중요 기능 배포, 점검 강화대규모 마이그레이션 자제
75~90%위험버그 수정만 배포신규 기능 배포 중단
90~100%동결안정성 개선 작업만모든 비안정성 작업 중단
100% 초과SLO 위반인시던트 대응 모드원인 해결 때까지 전면 동결

Error Budget 정책 설계

Error Budget 정책은 팀 전체가 합의한 문서여야 합니다. Budget 소진 시 자동으로 트리거되는 액션을 미리 정의합니다.
# Error Budget Policy 예시
policy:
  service: recommendation-api
  slo: 99.9%
  window: 30d

  actions:
    budget_50_percent:
      - 배포 검토 미팅 주 1회 추가
      - 모니터링 임계치 강화
    budget_75_percent:
      - 신규 기능 배포 중단
      - 안정성 스프린트 시작
    budget_100_percent:
      - 전체 배포 동결
      - 포스트모템 필수
      - 경영진 보고

장애 대응 프로세스

1

감지(Detection)

모니터링 시스템이 알림을 발생시킵니다. SLI 임계치 초과, 사용자 리포트, 합성 모니터링(Synthetic Monitoring) 등 다양한 채널을 통해 감지합니다.
2

심각도 분류(Severity Classification)

인시던트의 비즈니스 영향도에 따라 심각도를 분류합니다.
3

에스컬레이션(Escalation)

심각도에 맞는 담당자에게 알립니다. SEV1은 즉시 경영진까지, SEV4는 다음 근무일에 처리합니다.
4

War Room 운영

SEV1~2 인시던트는 전용 채널(Slack, Teams)을 열고 Incident Commander가 조율합니다.
5

복구(Recovery)

롤백, 스케일아웃, 설정 변경 등으로 서비스를 복구합니다. 원인 분석보다 복구가 우선입니다.
6

커뮤니케이션

내부 이해관계자와 외부 사용자에게 상태를 업데이트합니다. 상태 페이지(Status Page)를 활용합니다.

심각도 분류 테이블

등급영향 범위응답 시간예시에스컬레이션
SEV1전체 서비스 장애5분 이내전체 사이트 다운, 데이터 유출즉시 경영진, On-call 전원
SEV2주요 기능 장애15분 이내결제 불가, 로그인 장애팀 리드 + 관련 팀
SEV3부분 기능 저하1시간 이내검색 느림, 일부 API 오류담당 팀
SEV4경미한 이슈다음 근무일UI 깨짐, 로그 경고백로그 등록

런북(Runbook) 작성법

런북은 장애 발생 시 누구든 따라할 수 있는 복구 절차서입니다.

런북 구조

# [서비스명] - [증상]
## 증상
- 어떤 알림이 발생하는가
- 사용자에게 어떤 영향이 있는가

## 가능한 원인
1. 원인 A: 설명
2. 원인 B: 설명

## 확인 명령
# 원인 A 확인
kubectl get pods -n production | grep -v Running
curl -s http://service:8080/health | jq .status

## 복구 절차
### 원인 A인 경우
1. 구체적인 명령어
2. 확인 방법
3. 성공 기준

### 원인 B인 경우
1. 구체적인 명령어

## 에스컬레이션
- 15분 내 미해결: 팀 리드 @이름
- 30분 내 미해결: SRE 팀 @채널
좋은 런북은 “새벽 3시에 잠에서 깬 주니어 엔지니어도 따라할 수 있어야” 합니다. 모호한 표현 대신 복사-붙여넣기 가능한 명령어를 포함하세요.

포스트모템(Postmortem)

Blameless 문화

포스트모템의 핵심은 개인이 아닌 시스템을 탓하는 것입니다. “누가 실수했는가”가 아니라 “시스템이 왜 실수를 허용했는가”를 묻습니다.

포스트모템 템플릿

# 포스트모템: [인시던트 제목]
- 날짜: YYYY-MM-DD
- 심각도: SEV1~4
- 작성자: 이름
- 상태: 초안 / 검토 완료

## 요약
한 문단으로 전체 인시던트 설명

## 영향
- 영향 시간: HH:MM ~ HH:MM (총 N분)
- 영향 사용자: N명 / N%
- 비즈니스 영향: 매출 손실, SLO 영향 등

## 타임라인
| 시각 | 이벤트 |
|------|--------|
| 09:00 | 배포 시작 |
| 09:15 | 알림 발생 |
| 09:20 | 원인 파악 |
| 09:30 | 롤백 완료 |

## 근본 원인
기술적 원인을 상세히 기술

## 교훈
### 잘 된 점
- 알림이 5분 내 발생
### 개선할 점
- 카나리 배포가 적용되지 않음

## 액션 아이템
| 액션 | 담당자 | 우선순위 | 기한 |
|------|--------|----------|------|
| 카나리 배포 적용 | @이름 | P1 | 2주 |
| 알림 임계치 조정 | @이름 | P2 | 1주 |

On-call 운영

로테이션 설계

  • 주기: 1~2주 교대가 일반적 (1주 권장)
  • 최소 인원: 최소 5~6명으로 구성하여 번아웃 방지
  • Primary/Secondary: 1차 대응자와 백업 대응자를 함께 지정
  • 핸드오프: 교대 시 진행 중인 이슈와 주의사항을 인수인계

알림 피로(Alert Fatigue) 관리

알림이 너무 많으면 모든 알림이 무시됩니다. 알림의 80%가 액션 가능(actionable)해야 하며, 나머지는 대시보드로 옮깁니다.
  • 동일 알림 중복 제거(Deduplication)
  • 알림 그룹핑으로 노이즈 감소
  • 정기적으로 비액션 알림 정리
  • 알림 발생률 추세 모니터링

Chaos Engineering

Chaos Engineering은 **“시스템이 혼란스러운 상황에서도 작동하는지 사전에 검증”**하는 실천법입니다.
1

가설 설정

“서버 1대가 종료되어도 사용자에게 영향이 없을 것이다” 같은 가설을 세웁니다.
2

실험 설계

통제된 환경에서 폭발 반경(Blast Radius)을 제한한 실험을 설계합니다.
3

실험 실행

프로덕션 또는 스테이징에서 실험을 실행합니다. 반드시 롤백 계획을 준비합니다.
4

관찰 및 학습

가설과 실제 결과를 비교하고, 발견된 약점을 수정합니다.
도구제공자특징
Chaos MonkeyNetflixEC2 인스턴스 랜덤 종료
LitmusChaosCNCFKubernetes 네이티브, 다양한 실험
GremlinGremlin Inc.상용, GUI 기반, 안전 장치 내장
AWS FISAWSAWS 네이티브, IAM 통합

AI/ML 서비스의 SRE

AI/ML 서비스는 전통적인 웹 서비스와 다른 SLI가 필요합니다.

모델 품질 SLI

SLI설명측정 방법
정확도(Accuracy)모델 예측의 정확성정기적 벤치마크, A/B 테스트
TTFTTime to First Token (LLM)프록시/게이트웨이 로그
TPSTokens Per Second (LLM)스트리밍 응답 속도 측정
할루시네이션율사실과 다른 응답 비율샘플링 기반 인간 평가
데이터 드리프트입력 데이터 분포 변화PSI, KS-test 등 통계 검정

GPU 장애 대응

# GPU 장애 대응 런북 핵심
gpu_health_check:
  - nvidia-smi 상태 확인
  - GPU 메모리 사용률 확인
  - ECC 에러 카운트 확인
  - GPU 온도 모니터링 (80–90°C에서 스로틀링, 모델별 상이)

recovery_actions:
  - GPU 프로세스 강제 종료: fuser -v /dev/nvidia*
  - CUDA 컨텍스트 리셋
  - 노드 재시작 (최후 수단)
  - 트래픽 다른 노드로 자동 전환

모델 롤백 전략

모델 배포에서도 롤백은 핵심입니다. 새 모델 버전이 SLO를 위반하면 이전 버전으로 자동 복구해야 합니다.
모델 롤백은 코드 롤백보다 복잡합니다. 모델 바이너리 크기가 크고, 로딩 시간이 길며, 피처 스토어 호환성도 확인해야 합니다. Canary 배포로 소수 트래픽에 먼저 적용한 뒤 확대하세요.

AI/ML에서 SRE가 중요한 이유

LLMOps 파이프라인에서 SRE는 모델의 “운영 품질”을 보장하는 핵심입니다.
  1. 모델 서빙 안정성: GPU 클러스터 장애, OOM(Out of Memory), CUDA 에러 대응
  2. 추론 품질 모니터링: 정확도 SLO, 드리프트 감지, A/B 테스트 결과 추적
  3. 비용 효율성: Error Budget과 연계하여 불필요한 과잉 투자 방지
  4. 재현성 보장: 장애 원인 추적을 위한 모델 버전, 데이터 버전, 설정 추적
100% SLO는 “절대 장애가 없어야 한다”는 뜻이며, 이는 곧 “절대 변경하지 않는다”와 같습니다. Error Budget이 0이 되어 어떤 배포도 할 수 없게 됩니다. 또한 100% 가용성을 위한 비용은 99.99% 대비 10배 이상 증가합니다. 사용자 경험에 맞는 현실적인 목표를 설정하는 것이 핵심입니다.
네, 이것이 SRE의 핵심 메커니즘입니다. Error Budget 소진 시 기능 배포를 중단하고 안정성 작업에 집중합니다. 이를 통해 개발 속도와 안정성 사이의 균형을 자동으로 조절합니다. 단, 보안 패치나 심각한 버그 수정은 예외로 허용하는 것이 일반적입니다.
비난 문화에서는 엔지니어가 실수를 숨기고, 이는 더 큰 장애로 이어집니다. Blameless 문화에서는 “왜 시스템이 이런 실수를 허용했는가”에 집중하여 구조적 개선을 이끌어냅니다. Google, Netflix 등 성숙한 조직이 모두 이 방식을 채택하고 있습니다.
물론입니다. 전담 SRE 팀이 없어도 SLI/SLO 설정, Error Budget 추적, 포스트모템 작성은 모든 개발팀이 적용할 수 있습니다. “임베디드 SRE” 모델에서는 기존 개발팀 내에서 한 명이 SRE 역할을 겸하기도 합니다. 중요한 것은 팀이 아니라 원칙과 실천입니다.
Netflix, Google, Amazon 등은 실제 프로덕션에서 Chaos Engineering을 수행합니다. 핵심은 폭발 반경(Blast Radius)을 제한하고, 즉시 중단할 수 있는 킬 스위치를 준비하는 것입니다. 처음에는 스테이징 환경에서 시작하고, 경험이 쌓이면 프로덕션으로 확대합니다.
전통적인 가용성, 지연 SLO에 더해 모델 품질 SLO를 추가합니다. 예를 들어 “추천 모델 정확도 p95 > 85%”, “LLM TTFT p99 < 500ms”, “할루시네이션율 < 2%“와 같이 설정합니다. 초기에는 느슨하게 시작하고, 운영 데이터가 쌓이면 점진적으로 강화합니다.

체크리스트

  • SRE와 전통 운영, DevOps의 차이를 설명할 수 있다
  • SLI/SLO/SLA의 관계를 이해하고 적절한 SLI를 선택할 수 있다
  • Error Budget을 계산하고 정책 기반 의사결정을 할 수 있다
  • SEV1~4 심각도 분류와 에스컬레이션 경로를 설계할 수 있다
  • 효과적인 런북을 구조화하여 작성할 수 있다
  • Blameless 포스트모템 템플릿을 활용하여 장애 보고서를 작성할 수 있다
  • On-call 로테이션과 알림 피로 관리 방안을 설명할 수 있다
  • Chaos Engineering의 개념과 시작 방법을 이해한다
  • AI/ML 서비스에 적합한 SLI를 선정하고 모니터링 방안을 설계할 수 있다

다음 문서