1. 레이터시와 대역폭 이해의 첫 걸음 - accidentlywoo/legacyVue GitHub Wiki
1. 레이터시와 대역폭 이해의 첫 걸음
속도는 하나의 특징이다.
웹 성능 최적화(Web Performance Optimization)산업이 급속도로 떠오르면서 웹 속도와 사용자 경험(UX)이 날로 중요해지고 이에대한 사용자들의 수요가 점차 커져가고 있다.
- 웹사이트가 빠를수록 사용자를 더 오래 붙잡아 둘 수 있다.
- 웹사이트가 빠를수록 사용자의 재방문률을 향상시킨다.
- 웹사이트가 빠를수록 사용자의 구매 전환율을 향상시킨다. 간단히 말해서, 속도는 특징이다. 빠른 속도를 내기 위해서 여러 가지 요소와 근본적인 제약사항에 대해 이해해야 한다.
** 여니는 UX를 화면 디자인적 측면에서만 알고있었는데, 속도에대한 UX에대한 내용을 처음접하며, 공감하고 흥미가 더욱더 유발된다. **
레이턴시
패킷을 전송하는 곳에서부터 전달받는 곳까지 이동하는 데 걸리는 시간
대역폭
논리적인 혹은 물리적인 통신 경로의 최대 처리량.
레이턴시의 구성요소
레이턴시는 메시지나 패킷이 출발점에서 도착점까지 이동하는데 걸리는 시간을 말한다. 이러한 정의는 간단하고 유용한 정의이긴 하지만 그 속에 유용한 많은 정보들을 감추고 있다. 모든 시스템은 메시지르 전송하는 데 걸리는 총 시간 안에 많은 소스와 구성요서를 포함하고 있는데 이러한 구성요소가 무엇인지, 그리고 시스템의 성능을 좌우하는 각각의 요소는 무엇인지 이해하는 것이 중요하다. 우선 인터넷 환견의 라우터에서 클라이언트와 서버 간 메세지를 주고받을 때 레이턴시를 일으키는 요소가 무엇인지 자세히 살펴보자.
전파 지연(propagation delay)
메시지가 송신축(Sender)에서 수신측(Receiver)으로 이동하는데 필요한 시간. 총 이동거리 대비 신호가 이동하는 속도로 측정된다.
전송 지연(transmission delay)
링크로 패킷의 모든 비트를 내보내는 데 필요한 시간. 패킨의 길이 대비 링크의 데이터 전송 속도로 측정된다.
프로세싱 지연(processing delay)
패킷 헤더를 처리하고 비트 수준(bit-level)의 에러를 체크하고 패킷의 목적지를 알아내는 데 필요한 시간.
큐잉 지연(queuing delay)
패킷이 처리될 때까지 큐(queue)에서 대기하는 시간.
위에 기술된 4가지 지연을 합친 것이 클라이언트와 서버 간의 총 레이턴시다. 전파 지연은 신호가 이동하는 거리와 신호가 이동하는 데에 쓰이는 매체에 따라 달라진다. 곧 살펴보겠지만, 전파 속도는 보통 빛의 속도에 크게 벗어나지 않는다. 반면 전송 지연은 전송 링크의 데이터 전송률에 좌우되며 클라이언트와 서버간의 거리와는 아무런 상관이 없다.
그 후, 패킷이 라우터에 도착하면, 라우터는 다음 발송지 루트(outgoing route)를 알아내고 데이터를 체크하기 위해 패킷 헤더를 살펴봐야 한다. 이 과정 역시 시간이 소요된다. 이러한 작업들은 대부분 하드웨어에서 이루어지기 때문에 지연시간은 매우 적지만, 그래도 존재는 한다.
마지막으로, 패킷이 라우터가 한 번에 처리할 수 있는 속도보다 더 빠른 속도로 도착한다면 그 패킷들은 인커밍 버퍼(incoming buffer) 안에서 잠시 대기하게 된다. 데이터가 이 버퍼 안에서 보내는 시간이 바로 큐잉 지연이다.
네트워크를 이동하는 각각의 패킷은 모두 이러한 지연을 겪게 된다. 데이터의 이동 거리가 멀수록 전파 지연은 늘어나고 중간 단계에서 라우터를 만날 때마다 각 패킷은 프로세싱 지연과 전송 지연을 겪게 된다. 마지막으로 이동 중에 트래픽이 높을 수록 패킷이 인커밍 버퍼에서 지연될 확률도 높아진다.
빛의 속도와 전파 지연
빛의 속도는 초당 299,792,458미터. 빛의 속도 대비 특정 물질 안에서 패킷이 이동하는 속도를 측정한 것을 물질의 굴절률(refractive index)이라 한다.이 값이 클수록 해당 물질 안에서 빛이 이동하는 속도는 감소한다. 우리가 패킷을 장거리에 걸쳐 보낼 때 사용하는 광섬유의 보편적인 굴절률은 1.4에서 1.6사이다. 광섬유 안에서의 빛의 속도는 초당 약 2억 미터라고 보면 된다.
우리는 보통 일상적인 일들을 밀리초 단위로 측정하지 않지만, 연구결과에 따르면 대부분의 사람들은 시스템에 100-200 밀리초 정도의 지연이 생기는 것을 꽤 정확히 감자한다고 한다. 지연이 300밀리초 이상으로 넘어서면 시스템을 '느리다'라고 인식하고, 1초의 경계를 넘어가게 되면 많은 사용자들은 기다리는 중에 머릿속에서 딴 생각을 하거나 그 다음에 해야 할 일들에 대해서 생각하기 시작한다고 한다. 결론은 간단하다. 사용자들을 잘 붙잡아 두는 동시에 최고의 사용자 경험을 제공하기 위해서 우리의 애플리케이션은 수백 밀리초 이내에 응답할 수 있어야 한다. 특히 네트워크상에서는 오류를 허용헐 여유가 전혀 없다. 성공적인 통신을 위해서는 네트워크 레이턴시를 주의 깊게 관리하고 모든 개발 단계에 있어서 이를 중요한 디자인 기준으로서 다뤄야 한다.
###CND(Content Delivery Network) CDN서비스는 많은 이점이 있지만 그 중에 가장 대표적인 것은 모든 데이터 패킷의 전파 시간을 대폭 줄일 수 있다는 점이다. 다시 말해, CDN 이 지구 곳속으로 콘텐츠를 배분하여 클라이언트와 가장 가까운 지점에서 전달받도록 하는 것이다. 우리는 패킷을 한 번에 더 빠르게 이동하게 할 수는 없을지라도 사용자와 가까운 곳에 서버를 위치시킴으로써 이동 거리를 줄일 수 있다. CDN을 잘 활용하면 데이터 전달 성능을 크게 향상시킬 수 있다.
최종 마일 레이턴시(Last-Mile Latency)
얄 궂게도 대부분의 레이턴시가 발생하는 곳은 바다나 대륙을 건너는 도중이 아니라 마지막 몇 킬로미터 지점에서 발생한다. 집이나 사무실을 인터넷에 연결학 위해서는 ISP가 각 지역에 케이블을 설치하고 신호를 취합하여 로컬 라우팅 노드로 넘겨주어야 한다. 네트워크의 연결방식, 라우팅 방법, 사용되는 기술 등에 의해 ISP의 메인 라우터에 도달하는 데에만 수십 밀리초가 걸릴 수도 있다. 최종 마일 레이턴시는 당신이 사용하는 인터넷 제공업체, 사용되는 기술, 네트워크의 토폴로지, 심지어는 하루의 시간대에 따라서도 바뀔 수 있다.인터엣 사용자로서 웹 브라우징의 속도를 높이고 싶다면 ISP를 선택할 때 레이턴시를 낮추는데 중점을 두는 것이 좋다.
웹사이트의 성능 병목점
대부분의 웹사이트들에서 성능의 뱡목점은 대역폭이 아니라 레이턴시다. 그 이유를 이해하기 위해서는 다음 장에서 다루게 될 TCP와 HTTP 프로토콜이 어떻게 동작하는지 이해해야 한다.
코어 네트워크(Core Networks)의 대역폭
광섬유는 사람의 머리카락보다 약간 더 두꺼운 '빛을 뿜는 파이프'로서, 케이블 한쪽 끝에서 다른 한쪽 끝까지 빛을 전달하도록 설계되었다. 광섬유는 파장 분할 다중화(Wavelength-division multiplexing, WDM)를 통해 각 섬유마다 다른 파장의 빛을 이동시킬 수 있으므로 대역폭에 있어서는 확실한 이점을 가지고 있다 .그러므로 광섬유 링크의 통 대역폭은 다중 송신되는 채널의 수에 채널별 데이터 전송률을 곱한 만큼의 값이다. 각 케이블은 몇 가닥의 섬유(보통 4가닥으로 이루어져 있음)로 구성되어 있는데, 이는 각 케이블마다 초당 수백 테라 비트의 대역폭으로 해석할 수 있다.
네트워크의 가장자리(Network Edge)에서의 대역폭
인터넷의 핵심 데이터 패스를 구성하는 백보망 혹은 광섬유 링크는 초당 수백 테라 비트의 데이터를 옮길 수 있다. 하지만 네트워크의 끝자락에서는 사용하는 기술에 따라서 그 허용치는 훨씬 적다. 전화선, DSL, 케이블 그리고 여러 무선 기술들, 파이버 투 더 홈(fiber-to-the-home), 심지어 가정용 라우터의 성능도 대역폭에 영향을 미친다. 사용자에게 주어지는 대역폭은 클라이언트와 목적지점의 서버간에 존재하는 링크 중 가장 낮은 허용치와 같다. 로컬 ISP의 연결 대여폭이 높으면 물론 금상첨화겠지만 항상 안정된 성능을 보장할 수 있는 것은 아니다. 접속자 수가 많거나 하드웨어 오류 혹은 네트워크를 향한 디도스(ddos) 공격 같은 여러 가지 원인으로 인해 네트워크가 정체될 수도 있기 때문이다. 우리가 사용하는 데이터 네트워크는 본래 처리량과 레이턴시 성능이 일정치 못하다. 이렇게 변화무쌍한 '네트워크 날씨'를 예측하고 관리하고 변화에 따라 대응하는 것은 복잡한 작업이 아닐 수 없다.
높은 대역폭과 낮은 레이턴시 제공
우리는 주어진 대역폭과 빛의 속도라는 한계점을 분명하게 인식하여 프로토콜과 네트워킹 코드를 설계하고 최적화해야만 우리의 애플리케이션 성능을 향상시킬 수 있다. 왕복 거리를 줄이고, 클라이언트와 가까운 곳에 데이터를 위치시키고, 레이턴시를 감추기 위해 캐싱, 프리페칭(pre-fetching), 그 밖에 뒷장에서 다룰 다양한 기술들을 이용하여 애플리켕션을 구축해야 한다.