Post

품질 속성은 숫자다

성능·확장성·가용성을 SLI/SLO/SLA로 수치화해 설계를 강제하는 품질 속성 프레임

품질 속성은 숫자다

이 글의 결론

대규모 시스템에서 품질 속성은 “잘 동작한다”는 인상이 아니라, 설계를 강제하는 측정 지표로만 의미가 있다.


왜 품질 속성이 설계의 중심인가

기능이 ‘무엇을 만드는가’라면, 품질 속성은 ‘어떻게 망가질 수 있는가’를 규정한다.

대규모 시스템은 기능이 아니라 품질 속성의 한계에서 실패한다. 성능 병목, 확장 실패, 가용성 저하 중 하나라도 수치로 고정되지 않으면, 설계는 낙관에 의존하게 된다.

무엇

  • 성능(Performance): 요청 하나가 얼마나 빨리 처리되는가
  • 확장성(Scalability): 부하 증가 시 성능 저하 없이 처리량을 늘릴 수 있는가
  • 가용성(Availability): 시스템이 사용 가능한 상태로 존재하는 비율
  • 내결함성(Fault Tolerance): 장애가 발생해도 기능을 유지하는 능력
  • 고가용성(High Availability): 장애를 사용자가 거의 인지하지 못하도록 설계하는 전략

어떻게

품질 속성을 모두 SLI(측정) → SLO(목표) → SLA(계약) 구조로 번역한다.


기준 사례: 포럼 서비스

이 글 전체는 ‘포럼 서비스(게시글/댓글/조회)’ 하나의 사례를 재사용한다.

  • 일일 활성 사용자: 50만
  • 트래픽 피크: 평시 대비 5배
  • 읽기:쓰기 = 20:1

성능·확장성·가용성 비교 표

이 셋을 섞어 말하는 순간, 설계 논의는 붕괴된다.

구분정의대표 지표설계 영향흔한 오해
성능단일 요청 처리 특성p95 latency, TPS캐시, 쿼리 최적화“확장하면 해결”
확장성부하 증가 대응 능력throughput 증가 곡선무상태화, 샤딩“서버 늘리면 됨”
가용성사용 가능 비율uptime %, error rate이중화, failover“장애 없게 만들자”

성능 (Performance)

성능은 ‘빠르다’가 아니라 ‘p95 200ms 이하’ 같은 문장이다.

정의

단일 요청이 완료되기까지 걸리는 시간과 처리량 특성.

직관

평균(latency avg)은 의미 없다. 느린 5%가 사용자 경험을 결정한다.

측정/지표

  • p50 / p95 / p99 latency
  • 요청당 CPU time
  • DB query latency

설계 영향

  • 포럼 조회 API의 p95가 300ms 초과 → 캐시 도입
  • 비동기 처리로 write latency 격리

흔한 함정

  • 평균 응답 시간만 보고 “충분히 빠르다” 판단

확장성 (Scalability)

확장성은 서버 개수가 아니라, 증가 곡선의 형태다.

정의

부하 증가 시 성능 저하 없이 처리량을 늘릴 수 있는 능력.

직관

2배 서버 → 2배 처리량이 나오지 않으면 확장성 문제다.

측정/지표

  • QPS 증가 대비 latency 변화
  • scale-out 시 선형성

설계 영향

  • 포럼 읽기 트래픽 급증 → stateless API
  • DB 샤딩 키를 게시글 ID로 고정

흔한 함정

  • 오토스케일링 = 확장성이라고 착각

가용성·내결함성·고가용성

가용성은 결과, 내결함성은 수단, 고가용성은 전략이다.

가용성 정의

일정 기간 동안 시스템이 정상 사용 가능한 비율.

측정/지표

  • 성공 요청 비율
  • error rate
  • uptime %

‘nines’ 직관과 다운타임

과장은 금물이다. 0.1%는 생각보다 크다.

가용성월 다운타임연 다운타임
99%~7.2시간~3.65일
99.9%~43분~8.7시간
99.99%~4.3분~52분

설계 영향

  • 포럼 글쓰기: 99.9%
  • 조회 API: 99.99% (읽기 우선)

흔한 함정

  • 모든 기능에 동일한 가용성 목표 설정

SLA / SLO / SLI

이 셋은 문서가 아니라 ‘의사결정 언어’다.

관계

  • SLI: 실제 측정 지표
  • SLO: 내부 목표
  • SLA: 외부 계약

예시 1 (포럼 조회)

  • SLI: p95 latency
  • SLO: p95 < 200ms, 월 99.99%
  • SLA: 월 99.9% 미만 시 크레딧 제공

예시 2 (글쓰기)

  • SLI: 성공 요청 비율
  • SLO: 99.9%
  • SLA: 없음 (내부 기능)

트레이드오프 사례 4개

품질 속성은 항상 서로를 깎는다.

  1. 성능 vs 비용
    • 캐시 히트율 ↑ → 메모리 비용 ↑
  2. 가용성 vs 일관성
    • 장애 시 읽기 허용 → stale data 허용
  3. 확장성 vs 복잡도
    • 샤딩 도입 → 운영 난이도 급증
  4. 내결함성 vs 운영 난이도
    • 재시도·서킷브레이커 → 디버깅 난이도 ↑

면접 답변 템플릿

숫자 없는 답변은 즉시 탈락 신호다.

  • “우리 시스템의 핵심 SLI는 p95 latency이고 SLO는 200ms / 99.99%이다. 이유는 읽기 중심 포럼이기 때문이다.”
  • “이 요구사항 때문에 consistency를 eventual로 두고 availability를 높게 둔다.”

재학습 체크리스트 (12)

  • 모든 품질 속성에 수치가 있는가
  • 평균이 아닌 percentile을 쓰는가
  • 기능별로 SLO를 분리했는가
  • SLA와 SLO를 구분했는가
  • 비용 증가를 명시했는가
  • 트레이드오프를 말할 수 있는가
  • 읽기/쓰기 목표를 분리했는가
  • 장애 시 허용 범위를 정했는가
  • 확장 곡선을 확인했는가
  • 운영 복잡도를 인지했는가
  • “빠르다”라는 말을 제거했는가
  • 설계 선택을 숫자로 방어할 수 있는가

면접 3분 구술 스크립트

“이 시스템은 읽기 중심 포럼입니다.
핵심 품질 속성은 성능과 가용성입니다.
SLI는 p95 latency와 성공 요청 비율이며,
SLO는 조회 p95 200ms, 99.99%입니다.
이를 위해 캐시와 stateless API를 선택했고,
장애 시 consistency를 완화하는 대신 availability를 유지했습니다.”


한 줄 요약

품질 속성은 추상 개념이 아니라, 설계를 강제하는 숫자다.


This post is licensed under CC BY 4.0 by the author.