SLA, SLO, SLI의 계층 구조
SLI(Service Level Indicator)는 서비스의 특정 측면을 정량화하는 신중하게 정의된 지표입니다. 요청 지연 시간, 에러율, 시스템 처리량, 가용성 등이 일반적인 SLI입니다. 핵심은 측정값을 '성공한 이벤트 수 / 전체 이벤트 수' 비율로 표현하여 0~100% 범위로 정규화하는 것입니다.
SLO(Service Level Objective)는 SLI가 만족해야 할 목표값 또는 범위입니다. SLI ≤ 목표값 또는 하한값 ≤ SLI ≤ 상한값 형태로 정의되며, 내부 팀의 신뢰성 목표를 나타냅니다. 예를 들어 '99.9% 가용성' 또는 '90% 요청이 100ms 이내 응답' 같은 구체적인 목표를 설정합니다.
SLA(Service Level Agreement)는 서비스 제공자와 사용자 간의 명시적 또는 암시적 계약이며, SLO 위반 시 재정적 또는 기타 실질적인 결과를 포함합니다. SLO와 SLA의 구분 방법은 간단합니다: SLO 미달 시 실제 결과가 있으면 SLA, 없으면 SLO입니다.
에러 버짓을 활용한 아키텍처 설계
에러 버짓 = 100% - SLO입니다. SLO가 99.9%면 0.1%의 에러 버짓을 허용하므로, 한 달에 300만 건 요청이면 3,000개 오류를 견딜 수 있습니다. 이는 신뢰성과 혁신 속도 사이의 균형을 수량화하는 핵심 메커니즘으로, 버짓 소진 시 기능 출시를 중단하고 안정성 작업에 집중하도록 강제합니다. 또한 다중 시스템의 종속성을 고려할 때 하위 계층은 상위 계층보다 높은 SLO를 가져야 하는데(예: 네트워크 99.99% vs 서비스 99.9%), 공통 장애점을 간과하면 계산이 무의미합니다.
실무 구현 시 주의점
SLI 측정은 서버 로그, 로드 밸런서, 클라이언트 측 계측 등 다양한 방식이 가능하며 각각 정확도와 커버리지, 비용 트레이드오프가 있습니다. 평균값은 긴 꼬리 지연을 숨기므로 백분위수(p50, p95, p99)를 사용해야 합니다. 또한 SLO 설정 시 100% 가능성이 변화와 개선을 원천 차단하므로, 실현 가능하고 사용자 경험 기반의 목표를 선택하되 정기적으로 검증하고 개선해야 합니다.