사전 트래픽
개념

트래픽

gabury1고친 사람 github-actions[bot]

트래픽은 시스템에 일이 얼마나 밀려드는지를 말해 줍니다. 서비스에서는 들어오는 요청의 양을 가리킵니다. 네트워크에서는 선로를 지나는 데이터의 양을 가리킵니다. 서버를 몇 대 둘지와 언제 늘릴지가 이 양을 보고 정해집니다.

쉽고 빠른 이해

트래픽은 서비스로 들어오는 요청의 양입니다. 주문 페이지에 1초 동안 요청 500건이 들어온다면 그 페이지의 트래픽은 초당 500건입니다.

이 양을 모르면 서버가 버틸지 가늠할 수 없습니다. 응답이 늦어졌을 때 요청이 몰린 탓인지 코드 탓인지도 가르기 어렵습니다.

어떻게 보나:

  1. 1초 같은 짧은 구간마다 들어온 요청을 셉니다
  2. 시간대별로 그려서 하루 동안 오르내리는 모양을 익혀 둡니다
  3. 서버가 감당할 양을 넘으면 서버를 늘리거나 넘치는 요청을 막습니다

대가는 숫자 하나에 요청마다 드는 품이 안 담긴다는 것입니다. 목록 조회 천 건과 결제 천 건이 같은 숫자로 찍힙니다.

상세

출근 시간의 도로를 떠올려 보면 됩니다. 평소에 10분 걸리던 길이 아침 여덟 시에는 40분 걸립니다. 길이 좁아진 것이 아닙니다. 한꺼번에 들어온 차가 많아진 것입니다.

트래픽(traffic)은 본래 이런 도로의 통행량을 부르던 말입니다. 컴퓨터에서는 시스템에 밀려드는 요청이나 데이터의 양을 이 이름으로 부릅니다. 차가 몰리면 길이 막히듯 요청이 몰리면 서버가 밀립니다.

이 절은 서비스에서 쓰는 뜻을 중심으로 봅니다. 트래픽을 무엇으로 세는지, 비슷해 보이는 처리량과 무엇이 다른지, 하루 동안 어떤 모양을 그리는지를 차례로 따라갑니다. 네트워크에서 쓰는 뜻은 마지막 소절에서 짧게 짚습니다.

트래픽을 세는 단위

서비스의 트래픽은 흔히 초당 요청 수로 셉니다. 1초 동안 들어온 요청이 몇 건인지입니다. 영어로는 RPS(Requests Per Second)라고 줄여 부릅니다.

무엇을 한 건으로 칠지는 시스템마다 다릅니다. 웹 서비스는 HTTP(HyperText Transfer Protocol) 요청 하나를 한 건으로 셉니다. 아래 표는 자주 만나는 경우를 모은 것입니다.

시스템 한 건으로 세는 것 흔히 쓰는 단위
웹 서비스 HTTP 요청 하나 초당 요청 수
데이터베이스 쿼리 하나 초당 쿼리 수
메시지 큐 메시지 하나 초당 메시지 수
네트워크 선로 비트 초당 비트 수

표의 네 줄은 세는 대상만 다릅니다. 세는 방법은 같습니다. 먼저 한 건이 무엇인지 정합니다. 그다음 정해진 시간 동안 몇 건이 들어왔는지 셉니다. 한 건을 정하지 않은 채 「트래픽이 많다」고 하면 사람마다 다른 숫자를 떠올립니다.

동시 접속자 수와 다른 값

트래픽과 자주 헷갈리는 값이 동시 접속자 수입니다. 지금 서비스를 켜 두고 있는 사람이 몇 명인지를 셉니다. 사람을 세는 값이지 요청을 세는 값이 아닙니다.

두 값은 사람마다 요청을 얼마나 자주 보내는지로 이어집니다. 1만 명이 접속해 있다고 해 봅시다. 한 사람이 10초에 한 번씩 요청을 보내면 트래픽은 초당 1,000건입니다. 같은 1만 명이 1초에 한 번씩 보내면 초당 1만 건이 됩니다.

서버가 받는 짐은 사람 수가 아니라 요청 수가 정합니다. 서버 수를 정할 때 동시 접속자 수를 요청 수로 바꿔서 보는 까닭입니다.

들어오는 양과 끝내는 양

트래픽은 들어오는 양입니다. 서버가 정해진 시간 동안 끝낸 양은 그와 다른 값인 처리량입니다. 둘은 단위가 같아서 한 그래프에 겹쳐 그리기도 합니다.

들어오는 양이 서버가 끝낼 수 있는 양보다 적으면 두 선은 겹칩니다. 들어오는 대로 끝내기 때문입니다.

들어오는 양이 끝낼 수 있는 양을 넘는 순간부터 두 선이 갈라집니다. 트래픽 선은 계속 오르지만 처리량 선은 서버의 한계에서 멈춰 평평해집니다. 그 틈만큼이 못 끝낸 요청입니다.

flowchart TD
    A["트래픽이 늘어난다"] --> B{"서버가 끝낼 수 있는 양을 넘나"}
    B -->|넘지 않는다| C["들어오는 대로 끝낸다"]
    B -->|넘는다| D["못 끝낸 요청이 줄을 선다"]
    D --> E["줄에서 기다리는 시간이 길어진다"]
    E --> F["기다리다 끊긴다"]

그림에서 「넘는다」 쪽 갈래가 트래픽이 넘칠 때 벌어지는 일입니다. 못 끝낸 요청은 큐에서 기다립니다. 큐는 도착한 순서대로 요청을 붙잡아 두는 대기열입니다.

줄이 길어지면 요청 하나가 답을 받기까지 걸리는 시간, 곧 지연이 늘어납니다. 서버는 그대로인데 줄이 길어진 만큼 응답이 늦어집니다.

기다리는 시간이 정해 둔 한도를 넘으면 요청은 타임아웃으로 끊깁니다. 끊긴 요청은 실패로 셉니다. 그만큼 오류율, 곧 전체 요청 가운데 실패한 요청의 비율이 오릅니다. 트래픽이 늘었을 뿐인데 지연과 오류율이 뒤따라 나빠지는 까닭이 이 흐름입니다.

트래픽은 서비스 상태를 볼 때 맨 먼저 보는 신호 넷에 들어갑니다. 나머지 셋은 지연과 오류율, 그리고 서버의 자원이 한계까지 얼마나 찼는지를 재는 포화입니다. 지연 · 트래픽 · 오류율 · 포화 넷을 묶은 것이 골든 시그널입니다.

하루 주기와 급증

트래픽은 하루 동안 일정하지 않습니다. 사람이 깨어 있는 시간에 오르고 새벽에 내려갑니다. 하루 중 가장 많이 몰리는 때가 피크(peak)입니다. 배달 서비스는 점심과 저녁이 피크입니다. 업무용 서비스는 평일 낮이 피크입니다.

주기와 별개로 갑자기 치솟는 때도 있습니다. 한정 판매가 열리는 순간이나 앱 푸시 알림이 나간 직후가 그렇습니다. 몇 초 만에 평소의 몇 배로 뛰었다가 금방 가라앉습니다. 이렇게 짧게 치솟는 모양을 스파이크(spike)라고 부릅니다.

서버를 몇 대 둘지는 평균이 아니라 피크를 보고 정합니다. 평균에 맞춰 두면 피크 때마다 요청이 넘칩니다. 앞으로 들어올 트래픽을 어림해서 서버를 미리 준비하는 일이 용량 계획입니다.

트래픽이 넘칠 때 쓰는 수단

트래픽이 서버가 감당할 양을 넘으면 손쓸 방향은 셋입니다. 받는 쪽을 늘리거나, 들어오는 양을 줄이거나, 서버까지 오지 않게 앞에서 답합니다. 아래 표는 흔한 수단 다섯을 이 세 방향에 나눠 담았습니다.

방향 수단 하는 일
받는 쪽을 늘린다 수평 확장 같은 서버를 여러 대로 늘려 요청을 나눠 받습니다
받는 쪽을 늘린다 오토스케일링 트래픽을 보고 서버 수를 저절로 늘리고 줄입니다
받는 쪽을 늘린다 부하 분산 들어온 요청을 늘린 서버들에 고르게 나눠 보냅니다
들어오는 양을 줄인다 속도 제한 정해 둔 양을 넘는 요청을 받지 않고 돌려보냅니다
앞에서 답한다 캐싱 같은 요청에 대한 답을 앞에 두고 서버까지 안 보냅니다

세 방향은 치르는 값이 다릅니다. 받는 쪽을 늘리는 수단은 돈이 듭니다. 서버 한 대가 늘 때마다 비용이 붙습니다.

들어오는 양을 줄이는 수단은 돈이 덜 듭니다. 대신 정해 둔 양을 넘은 요청을 보낸 사용자는 거절을 받습니다.

앞에서 답하는 수단은 서버까지 가는 요청을 줄여 줍니다. 대신 앞에 둔 답이 낡을 수 있습니다. 원본이 바뀌어도 앞에 둔 답은 곧바로 따라 바뀌지 않기 때문입니다.

어느 쪽을 고를지는 서비스가 무엇을 더 견딜 수 있는지가 정합니다. 늘어나는 비용인지, 거절받은 사용자인지, 잠깐 낡은 답인지입니다.

트래픽을 옮긴다는 말

배포 이야기에서 「트래픽을 새 서버로 돌린다」는 말을 자주 듣습니다. 들어오는 요청을 어느 서버로 보낼지 바꾼다는 뜻입니다. 요청을 나눠 주는 장비인 로드 밸런서의 설정을 바꿔서 옮깁니다.

한 번에 전부 옮기기도 하고 조금씩 옮기기도 합니다. 옛 서버와 새 서버를 나란히 띄워 두고 한 번에 넘기는 방식이 블루-그린 배포입니다.

조금씩 옮기는 방식은 카나리 배포입니다. 요청 열에 하나 정도만 먼저 새 서버로 보내 봅니다. 문제가 없으면 그 비율을 늘려 갑니다.

트래픽 숫자에 안 보이는 것

트래픽은 요청의 개수만 셉니다. 요청 하나를 처리하는 데 서버가 드는 품은 담지 않습니다. 목록 조회 천 건과 결제 천 건은 같은 숫자로 찍히지만 서버가 쓰는 자원은 크게 다릅니다.

트래픽은 그대로인데 서버가 버거워하는 일도 생깁니다. 들어오는 요청이 품이 많이 드는 종류로 바뀐 경우입니다. 이럴 때는 요청 종류별로 트래픽을 갈라서 봅니다.

트래픽이 갑자기 줄어드는 것도 신호입니다. 사용자가 줄어서가 아니라 요청이 서버까지 못 오고 있을 수 있습니다. 로드 밸런서 같은 앞단 장비가 죽었거나, 도메인 이름을 서버 주소로 바꾸는 DNS(Domain Name System) 조회가 막힌 경우입니다. 트래픽 알림을 늘 때와 함께 줄 때에도 거는 까닭입니다.

네트워크에서 말하는 트래픽

네트워크에서 트래픽은 선로를 지나는 데이터의 양입니다. 요청 건수가 아니라 데이터의 크기를 셉니다. 단위는 초당 비트 수를 주로 씁니다.

선로 하나가 1초에 실어 나를 수 있는 최대량이 대역폭입니다. 트래픽이 대역폭에 가까워지면 데이터 조각인 패킷이 차례를 기다리기 시작합니다. 기다릴 공간마저 차면 패킷은 버려집니다.

방향도 갈라 부릅니다. 밖에서 안으로 들어오는 트래픽을 인바운드(inbound), 안에서 밖으로 나가는 트래픽을 아웃바운드(outbound)라고 부릅니다. 같은 서버라도 두 방향의 양은 크게 다를 수 있습니다. 작은 요청을 받고 큰 파일을 내려 주는 서버는 나가는 쪽이 훨씬 많습니다.

관련 항목

트래픽을 세는 단위와 값

초당 요청 수 · 초당 쿼리 수 · 동시 접속자 수 · 처리량 · 대역폭 · 메트릭

트래픽과 함께 서비스 상태를 알리는 신호

골든 시그널 · 지연 · 오류율 · 포화 · 응답 시간 · 백분위수

트래픽이 넘칠 때 번지는 장애

큐 적체 · 타임아웃 · 과부하 · 연쇄 장애 · 썬더링 허드

트래픽을 받아 내는 수단

수평 확장 · 수직 확장 · 오토스케일링 · 부하 분산 · 로드 밸런서 · 캐싱 · CDN

트래픽을 막거나 늦추는 수단

속도 제한 · 큐 · 백프레셔 · 서킷 브레이커 · 부하 차단 · 스로틀링

트래픽을 옮기는 배포 방식

트래픽 전환 · 블루-그린 배포 · 카나리 배포 · 롤링 업데이트 · 트래픽 분할

트래픽이 오르내리는 모양

스파이크 · 피크 트래픽 · 버스트 · 계절성

트래픽을 재고 대비하는 활동

용량 계획 · 부하 테스트 · 모니터링 · 알림 · 관측성

네트워크 트래픽을 이루고 다루는 요소

패킷 · 비트 · 네트워크 · 트래픽 셰이핑 · 서비스 품질 · 트래픽 분석 · 서비스 거부 공격

다른 이름: traffic · 네트워크 트래픽 · 트래픽량