왜 평균은 거짓말을 하는가: p99 latency가 사용자가 실제로 느끼는 것

발행: (2025년 12월 30일 오전 09:04 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Introduction

대부분의 성능 대시보드는 보기 좋습니다:

  • Average latency: low
  • CPU: stable
  • Memory: healthy

그럼에도 불구하고 사용자는 “앱이 느리게 느껴진다”고 불평합니다. 이것은 미스터리가 아니라 측정 지표 문제입니다.

The problem with averages

다음과 같은 시스템을 상상해 보세요:

  • 요청의 99 %가 10 ms 안에 완료
  • 1 %의 요청은 1000 ms가 걸림

평균 지연 시간은 약 20 ms로 차트에서는 훌륭해 보입니다.
하지만 100명 중 1명은 1초짜리 정지를 경험합니다. 이는 예외 상황이 아니라 실제 사용자입니다.

Why percentiles matter

  • p50 – 일반적인 상황을 보여줍니다
  • p90 / p95 – 변동성이 증가하는 모습을 나타냅니다
  • p99 – 시스템이 실제로 붕괴되는 지점을 보여줍니다

p99가 나쁘면, 평균이 완벽해 보여도 시스템은 나쁘게 느껴집니다.

Variance and jitter

높은 분산은 일정하게 느린 성능보다 더 큰 피해를 줍니다.

  • 40 ms 로 안정적인 시스템이 5 ms200 ms 사이를 오가는 시스템보다 더 빠르게 느껴집니다.
  • 이러한 변동성(지터)은 UI 끊김, 오디오 끊김, 프레임 손실을 초래합니다.

Latency Lens – a lightweight analysis tool

나는 Latency Lens라는 작은 CLI 도구를 만들었습니다. 이 도구는 평균이 아닌 tail behavior에 초점을 맞춥니다. 제공 기능은 다음과 같습니다:

  • p50 / p90 / p95 / p99
  • Jitter (표준 편차와 MAD)
  • Spike detection
  • Worst‑case time windows

Installation

  • GitHub:
  • PyPI:

How to diagnose “slow feeling”

사용자가 시스템이 느리게 느껴진다고 말한다면:

  1. 평균을 보지 마세요
  2. p99를 확인하세요
  3. 분산을 체크하세요
  4. 시간에 따른 스파이크를 찾아보세요

대부분 진실은 여기서 드러납니다.

Back to Blog

관련 글

더 보기 »

Handshake: 현대 API의 보이지 않는 비용

무슨 일이 일어나고 있나요? 로컬에서 API가 20 ms에 응답하고, 로그에 병목 현상이 없으며, 데이터베이스는 이미 최적화되었고 코드는 깔끔합니다. 프로…