---
type: knowledge
domain: architecture
status: active
last-reviewed: 2026-07-27
---

# SLO·성능·용량 설계

> 한 줄 정의
> 단일 시스템의 신뢰성·성능을 **설계 시점에 숫자로 결정**하는 기준 — SLO·타임아웃 예산·저하 모드·용량 산정. 분산된 뒤의 정합성은 [[분산 신뢰성 패턴]], 프로젝트별 확정값 템플릿은 [[03_비기능 요구·실패 설계]](02_기획 Tech Lead).

## 1. SLO — 무엇을 얼마나 약속하나

- SLI(측정 가능한 지표)를 먼저 정하고, 그 위에 SLO(목표값)를 얹는다. 측정 못 하는 목표는 목표가 아니다 ([[요구사항과 완료 조건]]의 기계 검증 원칙과 동일).
- **사용자 여정 기준으로 소수(2~4개)만**: 가용성(성공률)·지연(p95/p99)·정합성 중 사용자가 실제로 느끼는 것. 지표 20개는 지표 0개와 같다.
- **100%는 목표가 아니다** — 마지막 9 하나가 비용을 지수적으로 올린다. 남는 여유(에러 예산)는 배포·실험의 속도 조절기로 쓴다: 예산이 남으면 공격적으로, 소진되면 안정화 우선.
- 외주·SI에서 SLO는 계약 언어다: 검수·SLA 기준으로 쓸 값은 **측정 방법(어느 구간, 어느 백분위)까지 착수 전 합의**한다 — "응답 3초"는 평균인지 p95인지에 따라 전혀 다른 시스템이다.

## 2. 타임아웃 예산 — 전체에서 역산해 배분한다

- 사용자 응답 예산(예: 3s)에서 시작해 계층별로 **역산 배분**한다: 게이트웨이 → 앱 → DB·외부 호출. 하위 합이 상위를 넘으면 상위 타임아웃은 장식이다.
- 재시도는 예산 안에서만: 재시도 횟수 × 개별 타임아웃 ≤ 배분 예산. 예산 무시 재시도가 겹치면 장애 시 트래픽이 배가되는 retry storm이 된다.
- **멱등한 호출만 재시도한다** ([[분산 신뢰성 패턴]] 3절). 비멱등 호출의 재시도는 중복 실행 사고다.
- 모든 외부 호출에 명시적 타임아웃 — 라이브러리 기본값(무한 대기 포함)을 신뢰하지 않는다.

## 3. 저하 모드 — 실패 시 무엇을 포기할지 미리 정한다

- all-or-nothing이 기본값이 되게 두지 않는다. 의존성이 죽었을 때의 단계적 후퇴를 설계한다: 캐시된 응답 → 읽기 전용 모드 → 핵심 기능만 → 정중한 오류.
- 포기 순서는 기술이 아니라 **업무 우선순위**다 — 어떤 기능이 마지막까지 살아야 하는지는 발주사·도메인 오너와 합의한다 ([[우선순위와 스코프]]의 컷 순서와 동형).
- 저하 상태는 사용자에게 노출한다("일부 기능 지연 중") — 조용한 저하는 장애 신고로 돌아온다.

## 4. 용량 산정 — 평균이 아니라 피크

- 산정 기준은 **피크 트래픽 × 성장 여유**다. 평균으로 산정한 시스템은 매일 피크마다 죽는다.
- 추측 성능은 근거가 아니다 ([[아키텍처 스타일 선택]] 판단 축) — **측정 후 확장**: 부하 테스트는 검수 성능 기준이 걸린 시나리오부터 실행한다.
- 한계를 아는 것이 늘리는 것보다 먼저다: 시스템이 어느 지점에서 무너지는지(한계 부하·병목 자원)를 알아야 용량 계획과 알림 임계값이 선다.
- 무한 확장은 없다 — 상한(rate limit·큐 길이·동시 접속)을 설계에 명시하고, 상한 도달 시의 동작(대기·거절·저하)을 3절과 연결한다.

## 5. NFR로의 연결

- 여기서 정한 값은 요구사항 표의 행이 된다 ([[요구사항과 완료 조건]] 4절 NFR) — 착수 전 합의된 임계값만 검수 기준이 될 수 있다.
- 임계값을 모르겠으면 현재 값을 측정해 기준선으로 삼는다. 기준선 없는 개선 목표는 분쟁의 씨앗이다.

## 안티패턴

- **SLO 없는 "빠르게·안정적으로"** — 형용사는 검수 불가. 숫자·백분위·측정 구간으로 바꾼다.
- **기본값 타임아웃 방치** — 무한 대기 하나가 스레드 풀 전체를 잠근다.
- **전 구간 무차별 재시도** — 장애를 증폭기로 만드는 가장 빠른 길.
- **평균 기반 용량 산정** — p99와 피크가 사용자의 실제 경험이다.
- **저하 모드 없는 설계** — 의존성 하나의 장애가 전체 장애가 되는 구조는 설계 미완이다.

## 관련 문서

- [[00_설계 허브]] · [[분산 신뢰성 패턴]] · [[아키텍처 스타일 선택]] · [[03_비기능 요구·실패 설계]]
- [[백엔드 원리]] · [[인프라 원리]] · [[요구사항과 완료 조건]]
