SLO, SLI & Error Budget Physics
서비스의 신뢰도를 수치적 지표(SLI)와 목표(SLO)로 정의하고, 허용 가능한 실패의 양인 에러 예산을 통해 혁신과 안정의 물리적 균형을 맞추는 SRE 핵심 물리학을 다룹니다.
Article
M
Me
hyunyoun's Blog
software-engineering-devopssoftware-engineeringdev-opsmaintenancetech-debtsloslierror-budget-physics12 min read
1. Overview
SLO와 에러 버젯의 물리학(SLO, SLI & Error Budget Physics)은 "우리 서버는 1년 365일 단 1초도 죽으면 안 돼!"라는 비즈니스 부서의 비현실적인 망상을 부수고, 완벽함(100%)을 포기함으로써 역설적으로 배포의 속도와 시스템의 안정성을 쟁취하는 SRE(Site Reliability Engineering)의 수학적 타협술을 해부합니다.
학습자는 막연하게 "서버가 빠르면 좋겠다"는 소망을, 분모(전체 요청)와 분자(성공 요청)로 나눌 수 있는 **SLI(서비스 수준 지표)**라는 냉혹한 측정기로 뜯어봅니다. 나아가 "우리는 99.9%의 성공률만 약속한다"고 선을 긋는 **SLO(서비스 수준 목표)**와, 이를 어겼을 때 고객에게 돈(위약금)을 물어주는 **SLA(서비스 수준 계약)**의 법적 경계를 장악합니다. 마지막으로, 100%에서 99.9%를 뺀 나머지 '0.1%의 여유 공간'을 **에러 버젯(Error Budget)**으로 환산하여, 이 예산이 남아있으면 미친 듯이 신기능을 배포하고 예산이 바닥나면 배포를 올스톱하는 데이터 주도 거버넌스 역량을 확보합니다.
2. Scope & Boundaries
In-Scope
- SRE Core Metrics: SLI (무엇을 측정할 것인가?), SLO (우리의 목표는 몇 % 인가?), SLA (어기면 얼마를 배상할 것인가?).
- The Physics of 9s: 99% (Two 9s, 연간 3일 다운타임) vs 99.999% (Five 9s, 연간 5분 다운타임)의 기하급수적 비용 차이.
- Error Budget (에러 버젯): 100% - SLO. 합법적으로 서버를 고장 낼 수 있는 허용치이자 신기능 배포의 속도 제한기.
- MTTR vs MTBF: 장애가 나는 간격(MTBF)을 늘리려는 헛된 노력보다, 장애 복구 시간(MTTR)을 1초로 줄이는 안티 프래질(Anti-fragile) 전략.
Out-of-Scope
- 프로메테우스(Prometheus) 쿼리 작성법:
rate(http_requests_total[5m])같은 구체적 PromQL 문법 09-06-01 Observability 또는 도구 매뉴얼로 위임. - 인프라 이중화(HA) 구축: 99.99%를 달성하기 위해 Active-Standby DB를 어떻게 구성할 것인가 07-02-02 High Availability & Load Balancing 영역으로 분리.
Boundaries
- 100% vs 99.9%: 100%의 안정성을 추구하면? 아무것도 배포하지 않고 서버를 얼려두면(Freeze) 됩니다. 하지만 회사는 망합니다(혁신 부재). 구글(Google) SRE의 대원칙은 "100%는 잘못된 목표(The Wrong Objective)"라는 것입니다. 99.9%와 100% 사이의 유저 체감 차이는 없지만, 100%를 달성하기 위한 인프라 비용은 1,000배가 듭니다. SLO는 '얼마나 안정적일 것인가'를 정하는 게 아니라, '얼마나 혁신(배포)할 것인가'의 브레이크 페달을 세팅하는 **경제학적 타협(Economic Trade-off)**의 경계선임을 명확히 긋습니다.
3. Counterexample
- 100%의 망상과 배포 전쟁: 기획팀이 "우리 앱은 단 1번의 결제 실패도 용납할 수 없다(100% 타겟)"고 선언했습니다. 에러 버젯(허용치)이 0입니다. 개발팀은 신기능 배포를 할 때마다 결제가 터질까 두려워, 결재 라인을 5단계로 늘리고 배포를 한 달에 1번으로 줄였습니다. 결과적으로 에러는 안 났지만, 경쟁사가 하루에 10번씩 신기능을 배포하며 치고 나가는 동안 앱은 시장에서 도태되었습니다. 완벽함(100%)을 추구하다 굶어 죽는 전형적인 비즈니스 붕괴입니다.
- 측정 불가능한 약속 (SLI 부재): 영업팀이 B2B 고객과 "우리는 빠른 응답 속도를 보장합니다"라는 SLA(계약)를 맺었습니다. 고객이 "서버가 너무 느리다, 위약금을 내놔라"고 항의합니다. 개발팀이 "어제 응답 속도 1초였는데요?"라고 반박하자, 고객은 "체감상 5초였다"라고 우깁니다. 무엇이 '빠른' 것인지(예: 99번째 백분위수 응답 시간이 200ms 이하)를 수학적 분모/분자(SLI)로 합의해 놓지 않아 벌어지는 법적/감정적 진흙탕 싸움입니다.
4. Prerequisites
- 관측 가능성 (Basic): 텔레메트리 데이터를 수집할 수 있는 아키텍처. (09-06-01 Observability)
- CI/CD 파이프라인 (Basic): 언제든 빠르게 롤백할 수 있는 인프라. (09-05-01-04 GitOps)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: 측량할 수 없다면 통제할 수 없다 (The Anatomy of SLI)
- Why to Learn: "우리 서버 오늘 쾌적하네요"라는 엔지니어의 감(Feeling)을 죽여버리고, 누구나 멱등하게 판별할 수 있는 차가운 수학적 분수식(Fraction)을 설계하기 위함입니다.
- What to Learn:
- Concepts: SLI (Service Level Indicator), Good Events, Valid Total Events, Latency SLI, Availability SLI, Percentile (P99, P95).
- Skills: "응답 속도가 빠르다"는 요구사항을
(200ms 이내에 HTTP 200 OK로 응답한 요청 수) / (유저가 보낸 전체 유효 요청 수) * 100이라는 분모/분자 공식으로 번역하기.
- How to Learn:
- 1단계: 추상의 배제: 기획자가 "서버가 안 끊겼으면 좋겠어요"라고 합니다. SLI는 이 말을 거부합니다. "Load Balancer에 들어온 Ping 요청 중 HTTP 200이 반환된 비율을 말하는 겁니까?"
- 2단계: 분모와 분자: 모든 SLI는
좋은 이벤트(Good) / 유효한 전체 이벤트(Total)의 형태를 가집니다. 디도스(DDoS) 공격을 받아 HTTP 403으로 막아낸 요청은 '유효한 전체 이벤트' 분모에서 빼야 합니다. 안 그러면 에러율이 치솟아 억울해집니다. - 3단계: 백분위수(Percentile): 평균(Average)의 함정을 조심해야 합니다. 99명의 유저가 0.1초 만에 응답을 받았는데, 1명의 VIP 유저가 10초를 기다렸습니다. 평균은
0.2초로 매우 쾌적해 보입니다. 이를 막기 위해 "P99(하위 99% 유저)의 응답 속도가 200ms 이내일 것"처럼 통계적 아웃라이어를 방어하는 치밀한 척도 설계를 뜯어봅니다.
- Implement: 모호한 요구사항 SLI 수학적 번역 모사.
요구사항: "결제 시스템이 안정적이어야 함."잘못된 SLI: "서버 CPU가 80%를 넘지 않음" (유저는 CPU 따위에 관심 없음).정확한 SLI:(200ms 이내에 승인/거절 응답을 완료한 결제 트랜잭션 수) / (클라이언트가 시도한 전체 결제 트랜잭션 수). 측정의 초점을 '서버 인프라'에서 '유저의 체감 가치'로 이동시키는 렌더링.
Recommended
Core Topic 02: 목표와 계약의 갭, SLO vs SLA (Internal vs Legal)
- Why to Learn: 개발팀의 목표치(SLO)를 그대로 영업팀의 계약서(SLA)에 갖다 썼다가, 0.01%의 사소한 서버 지연에도 고객에게 수천만 원의 위약금을 토해내는 파산을 막기 위함입니다.
- What to Learn:
- Concepts: SLO (Service Level Objective), SLA (Service Level Agreement), Buffer (버퍼/여유 공간), Breach (위반), Penalties (위약금).
- Skills: "우리의 진짜 목표(SLO)는 99.9% 달성이지만, 대외적으로 고객과 계약(SLA)할 때는 99.0%만 보장한다고 뻥을 쳐서(버퍼 확보)" 위약금 리스크를 완전히 박살 내기.
- How to Learn:
- 1단계: SLO (내부의 약속): "우리는 SLI 99.9%를 달성할 거야!" 개발팀이 내부적으로 세운 가장 빡센 타겟입니다. 어기면? 기분은 나쁘지만 감옥에 가거나 돈을 뺏기진 않습니다.
- 2단계: SLA (외부의 법적 계약): "우리 서비스가 99.0% 밑으로 떨어지면 이용료를 전액 환불해 주겠다." 이건 영업팀이 고객과 맺는 돈이 걸린 계약서입니다.
- 3단계: 버퍼(Buffer)의 미학: SLO와 SLA는 절대 같으면 안 됩니다.
SLA(99.0%) < SLO(99.9%)여야 합니다. 이 사이의 0.9% 갭이 회사의 목숨을 살리는 방어선입니다. 서버가 며칠 뻗어서 내부 목표(SLO)는 실패하더라도, 최후의 마지노선인 SLA 위약금만큼은 피할 수 있게 아키텍처와 비즈니스의 간극을 벌려놓는 지혜를 해부합니다.
- Implement: 장애 발생 시 위약금(Penalty) 계산 시뮬레이터.
설정: SLA=99.0%, SLO=99.9%. (월 총 시간 720시간).장애 상황: 이번 달에 누적 3시간 동안 서버 접속 끊김. (가동률 99.58% 기록).결과 평가:SLO (99.9%): 미달(Breach). 개발팀 반성문 작성 및 신기능 배포 동결.SLA (99.0%): 통과(Met). 위약금 0원, 고객 배상 의무 없음. 개발팀을 쪼는 동시에 회사의 현금 붕괴를 막아내는 이중 방어막 시각화.
Practical
Core Topic 03: 허용된 폭주의 권한, 에러 버젯 (Error Budget: The Pace Car)
- Why to Learn: "우리 배포해도 돼요?"를 팀장님 기분이나 QA팀의 꼰대력으로 결정하는 정치적 사투를 끝내고, 통장 잔고(데이터)를 까보고 배포를 승인/거부하는 냉혹한 통제 시스템을 구축하기 위함입니다.
- What to Learn:
- Concepts: Error Budget (에러 버젯), Burn Rate (소진율), Freeze (코드 동결), Data-driven Governance.
- Skills: SLO가 99.9%라면, 나머지 0.1%(한 달에 약 43분)를
에러 버젯(허용된 뻘짓의 시간)으로 계산해 놓고, 배포하다 에러가 나서 30분을 까먹으면 "이번 달 남은 예산은 13분입니다"라고 전광판에 띄우기.
- How to Learn:
- 1단계: 예산의 부여: 완벽함(100%)은 없습니다. 구글 SRE는
100% - SLO를 공식 예산(Budget)으로 줍니다. 한 달이 43,200분인데 SLO가 99.9%면, **한 달에 43분은 합법적으로 서버를 뻗게 만들어도 되는 권리(예산)**를 부여받은 겁니다. - 2단계: 예산의 소비 (혁신의 가속): 개발팀은 이 예산이 남는 한, 테스트가 덜 끝났든 뭐든 미친 듯이 하루에 10번씩 신기능을 실서버에 배포합니다. 배포하다 버그가 나면 에러 버젯을 5분 차감합니다. 예산이 남았으니 계속 달립니다.
- 3단계: 예산의 고갈 (혁신의 중지): 어제 거대한 버그를 쳐서 에러 버젯 43분을 다 써버렸습니다(잔고 0원). 즉시 모든 신기능 배포 권한이 박탈(Freeze)당합니다. 이번 달이 끝날 때까지 개발팀은 짐 싸고 코드 리팩터링과 테스트 코드 작성(안정성 작업)만 해야 합니다. 인간의 입김이 아니라 '수학'이 개발 속도(Agility)와 안정성(Reliability)의 밸런스를 강제로 조율하는 위대한 페이스메이커를 뜯어봅니다.
- 1단계: 예산의 부여: 완벽함(100%)은 없습니다. 구글 SRE는
- Implement: Error Budget Burn Rate(소진율) 통제기 모사.
이번 달 예산: 43분 허용 (SLO 99.9%).Day 5: 핫픽스 실패로 다운타임 40분 발생. (남은 예산: 3분, 소진율 93%).Day 6: 마케팅팀이 "내일 당장 새 이벤트 배포해 주세요!" 요구.기계의 심판: 봇이 [Reject] 도장을 찍음.이유: 에러 버젯 잔고(3분) 부족. 다음 달 1일까지 신규 피처 배포 금지. 예외 없음.사내 정치와 직급을 씹어 먹는 데이터 거버넌스의 승리 시각화.
Advanced
Core Topic 04: 시간의 물리학과 Nine의 마법 (The Physics of 9s & MTTR)
- Why to Learn: 비즈니스 임원이 "아마존은 99.999% 라던데, 우리도 무조건 파이브 나인(Five 9s) 맞춰!"라고 할 때, 그 뒤에 숨겨진 '수십억 원의 인프라 구축 비용' 청구서를 던져주며 헛소리를 논리적으로 분쇄하기 위함입니다.
- What to Learn:
- Concepts: The Nines (99.9%, 99.99%), MTBF (Mean Time Between Failures), MTTR (Mean Time To Recovery), High Availability Cost Curve.
- Skills: "99.9% (연간 8시간 다운 허용)는 서버 2대로 가능하지만, 99.999% (연간 5분 다운 허용)는 전 세계 분산 DB와 3중 로드밸런서가 필요해 인프라 비용이 100배로 뛴다"는 비선형적 비용(Cost) 곡선을 증명하기.
- How to Learn:
- 1단계: 9의 마법 (The Nines): 9가 늘어날 때마다 다운타임은 1/10로 줍니다.
- 2개의 9 (99%): 1년에 3일 15시간 다운. (동네 쇼핑몰)
- 3개의 9 (99.9%): 1년에 8시간 다운. (스타트업 표준)
- 4개의 9 (99.99%): 1년에 52분 다운. (대기업 인프라)
- 5개의 9 (99.999%): 1년에 단 5분 다운. (항공/의료/AWS 코어)
- 2단계: 수확 체감의 법칙: 99.9%에서 99.99%로 올리려면 인프라 비용이 10배 뜁니다. 그런데 유저들은 8시간 장애나 52분 장애나 똑같이 "앱이 가끔 뻗네" 정도로 인식합니다. 돈은 10배로 쓰는데 유저 체감 가치는 제자리걸음입니다.
- 3단계: MTBF vs MTTR: 장애가 안 나게 간격(MTBF)을 늘리려는 노력은 불가능합니다. 번개는 떨어집니다. 대신, 장애가 났을 때 복구하는 시간(MTTR)을 3시간에서 5분으로 줄이는 자동화(GitOps 롤백)에 투자하는 것이 가성비가 1,000배 뛰어나다는 SRE 인프라 물리학의 최종 결론을 뜯어봅니다.
- 1단계: 9의 마법 (The Nines): 9가 늘어날 때마다 다운타임은 1/10로 줍니다.
- Implement: The 9s 비용-효용 매트릭스 도출.
요구사항: 사내 게시판 (월 수익 100만 원). 임원이 99.999%(Five 9s) 요구.엔지니어 분석: 99.999%를 위한 Active-Active 멀티 리전 아키텍처 및 무중단 failover 시스템 구축 비용 월 5,000만 원 예상.결론: 100만 원 벌려고 5,000만 원의 인프라를 태우는 멍청한 짓임을 수학적으로 증명하고, 99.0%(Two 9s, 월 서버비 10만 원)로 역제안하는 기술 비즈니스 렌더링.
7. Terminology
8. References
Primary
- [P1] CS2023 - Software Engineering (SE) - Software Reliability (SLOs, SLIs, and Error Budgets)
- [P5] SFIA - Quality Management (QUMG) - Service level management
Secondary
- [Site Reliability Engineering] Google (Niall Richard Murphy et al.) - Embracing Risk, Service Level Objectives
- [The Site Reliability Workbook] Google - Implementing SLOs and Error Budgets
Industry
- [Google Cloud Architecture Center] - SRE fundamentals: SLIs, SLAs, and SLOs
- [Datadog Blog] - How to set and monitor SLOs and Error Budgets
9. Final Checklist
Primary
- 경영진이 "우리 서비스의 안정성 목표는 무조건 100%여야 한다"고 주장할 때, 완벽함(100%)을 추구할 경우 수반되는 기하급수적인 인프라 비용 증가와 신기능 배포 속도의 정체를 지적하며 99.9%의 타협점을 논증할 수 있는가?
- 시스템 상태를 측정할 때, 내부 인프라 지표인 "CPU 사용률 80% 이하" 대신, 사용자가 직접 체감하는 "API 응답시간 P99(하위 99%)가 200ms 이하(Latency SLI)"로 분모와 분자 공식을 설계할 수 있는가?
Secondary
- 외부 B2B 고객과 약속한 법적 위약금 마지노선인 SLA(예: 99.0%)를 방어하기 위해, 개발팀 내부적으로는 그보다 더 빡빡한 SLO(예: 99.9%)를 설정하여 사고 발생 시 대응할 수 있는 버퍼(Buffer) 공간을 어떻게 확보하는지 설명할 수 있는가?
- 한 달(43,200분) 기준으로 SLO가 99.9%일 때 부여받은 약 43분의 에러 버젯(Error Budget)을 계산하고, 핫픽스로 30분을 소진한 상황에서 잔여 예산이 13분 남았음을 수치로 증명하여 무리한 금요일 배포를 데이터로 기각할 수 있는가?
Industry
- 에러 버젯의 소진율(Burn Rate)이 평소보다 10배 빠르게 타들어가고 있을 때, 단순히 알람(Alert)을 띄우는 것을 넘어 CI/CD 파이프라인의 배포 게이트를 강제로 잠가(Code Freeze) 인간의 자의적 판단을 기계적으로 차단할 수 있는가?
- 99.9% (연 8시간 다운) 인프라를 99.99% (연 52분 다운)로 업그레이드할 때 발생하는 10배 이상의 비용(Cost) 증가 곡선을 근거로, 고장 발생 간격(MTBF)을 늘리려는 헛된 투자 대신 자동 롤백을 통해 장애 복구 시간(MTTR)을 압살하는 전략적 우위를 설계할 수 있는가?