본문으로 바로가기

03

지연 시간과 처리량

빠른 것과 많이 처리하는 것은 다른 문제다

먼저 보면 좋은 강의: 웹 요청의 해부

단계별로 보기

스페이스바로 재생/정지, 좌우 화살표로 단계 이동, R로 처음으로 돌아갑니다.

대기 중1 / 4 단계 — 여유가 있을 때

초당 30건이 들어옵니다. 서버는 초당 40건을 처리할 수 있으니 여유가 있습니다. 요청은 도착하자마자 처리되고, 줄은 생기지 않습니다. 사용자가 기다리는 시간은 처리 시간과 같은 25밀리초입니다.

유입 요청초당 30건
처리 완료초당 30건

이 강의를 마치면

  • 지연 시간(하나가 얼마나 빠른가)과 처리량(초당 몇 개인가)을 구분한다.
  • 처리 능력을 넘는 요청이 들어올 때 무슨 일이 벌어지는지 관찰한다.
  • 서버를 늘려 처리량을 확보하는 것과 서버를 빠르게 만드는 것의 차이를 설명한다.

두 개의 "빠르다"

"서버가 빠르다"는 말은 두 가지 뜻으로 쓰입니다.

은행 창구 비유
지연 시간요청 하나를 처리하는 데 걸리는 시간창구에서 내 업무를 보는 데 걸리는 시간
처리량단위 시간에 처리할 수 있는 요청 수은행 전체가 한 시간에 처리하는 손님 수

이 둘은 따로 움직입니다. 이게 이 강의의 전부입니다.

창구가 하나인 은행

직원 한 명이 손님 한 명을 25초에 처리한다고 합시다. 이때

  • 지연 시간 = 25초
  • 처리량 = 시간당 144명

손님이 시간당 100명씩 오면 문제가 없습니다. 창구는 여유가 있고, 손님은 오자마자 바로 처리됩니다. 체감 대기 시간은 25초입니다.

손님이 두 배로 늘면

시간당 288명이 오면 어떻게 될까요? 직원은 여전히 25초에 한 명씩 처리합니다. 지연 시간은 그대로 25초입니다. 직원이 갑자기 느려지지 않습니다.

그런데 손님 입장에서는 어떨까요? 줄을 서야 합니다. 그리고 그 줄은 시간이 갈수록 길어집니다. 들어오는 속도가 나가는 속도보다 빠르니까요.

들어오는 속도 288명/시간
나가는 속도   144명/시간
─────────────────────────
줄이 늘어나는 속도 144명/시간

한 시간 뒤에는 144명이 줄을 서 있습니다. 두 시간 뒤에는 288명입니다. 이 줄은 손님이 줄어들기 전까지 절대 짧아지지 않습니다.

여기서 가장 중요한 사실

줄이 길어지면 손님의 체감 대기 시간이 폭발합니다. 창구 업무는 여전히 25초지만, 대기 시간이 30분이면 손님에게는 30분짜리 서비스입니다.

이것이 시스템이 무너지는 방식입니다. 서버는 멀쩡히 25ms에 요청을 처리하고 있는데 사용자는 30초를 기다립니다. 서버 로그만 보면 아무 문제가 없어 보입니다.

그리고 결국 버린다

줄을 세울 공간에도 한계가 있습니다. 대기실이 꽉 차면 새로 온 손님은 들어오지도 못하고 돌아가야 합니다. 시스템에서는 이걸 요청 유실이라고 합니다. 사용자에게는 오류 화면으로 보입니다.

그래서 어떻게 하는가

처리량이 부족한 문제는 지연 시간을 줄여서 풀 수도 있고, 창구를 늘려서 풀 수도 있습니다.

  • 직원 한 명을 25초 → 12.5초로 만들면 처리량이 2배가 됩니다. 하지만 사람이

두 배 빨라지는 데는 한계가 있습니다.

  • 창구를 2개로 늘리면 처리량이 2배가 됩니다. 그리고 이건 계속 늘릴 수 있습니다.

현실의 시스템에서 후자가 압도적으로 자주 쓰입니다. 서버 한 대를 두 배 빠르게 만드는 비용은 대개 두 대를 사는 비용보다 큽니다. 이걸 수평 확장이라고 하고, 뒤에서 자세히 다룹니다.

직접 해보세요

아래 과제에서 초당 120건이 들어오는데 서버 하나는 초당 40건밖에 처리하지 못합니다. 실행해서 줄이 쌓이고 요청이 버려지는 것을 먼저 확인한 다음, 서버를 늘려 보세요. 몇 대가 필요한지는 계산이 아니라 실행해서 확인하면 됩니다.

이 강의가 단순화한 것

교육용 모형은 언제나 무언가를 생략합니다. 무엇을 생략했는지 아는 것도 학습의 일부입니다.

전제한 것

  • 요청 하나의 처리 시간은 항상 25ms로 일정하다. 실제 시스템에서는 요청마다 다르다.
  • 네트워크 전송 시간은 무시할 만큼 작다고 본다.
  • 서버는 대기열이 가득 차면 새 요청을 즉시 버린다.

다루지 않은 것

  • 처리 시간 분포의 꼬리(일부 요청만 유독 느린 현상)
  • 대기열 이론의 정식 모형(M/M/c 등)
  • CPU·메모리·디스크 각각의 병목 구분

더 읽을거리: Latency Numbers Every Programmer Should Know

이제 직접 만들어 보세요

읽어서 아는 것과 만들어서 아는 것은 다릅니다. 컴포넌트를 배치하고 트래픽을 흘려서 실제로 동작하는지 확인해 보세요.

실습 과제 열기

이 강의에 물어보기

하루 5번

이 강의 본문만 근거로 답합니다. 강의에 없는 내용은 지어내지 않습니다.