CS 지식/네트워크

[네트워크] Latency & Bandwidth

ghan2 2024. 5. 23. 15:27

네트워크란 서로 통신하고 리소스를 공유할 수 있는 연결된 장치 시스템이다. 케이블이나 무선 신호를 통해 서로 연결된 두 대 이상의 컴퓨터로 구성된다. 이러한 연결을 통해 네트워크의 모든 컴퓨터 간에 데이터를 전송할 수 있으므로 효율적인 통신과 리소스 공유가 가능해진다.

좋은 네트워크를 구축하기 위해 꼭 알아야 하는 Latency와 Bandwidth 개념에 대해 알아보자.

 

Latency (지연 시간)

Latency는 데이터를 보내고 받는 데 걸리는 시간이다. 쉽게 말해, 데이터를 보내는 순간부터 상대방이 그 데이터를 받는 순간까지 걸리는 시간을 의미한다. (즉, 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간)

Bandwidth (대역폭)

Bandwidth는 네트워크가 한 번에 얼마나 많은 데이터를 전달할 수 있는지를 의미한다. 쉽게 말해, 데이터의 "도로 넓이"라고 생각할 수 있다. 대역폭은 지정된 시간에 네트워크를 통과할 수 있는 데이터 볼륨을 측정한다. 초당 데이터 단위로 측정됩니다. 예를 들어, 대역폭이 1Gbps(초당 기가비트)인 네트워크가 대역폭이 10Mbps(초당 메가비트)인 네트워크보다 성능이 더 좋은 경우가 많다.

Throughput (처리량)

throughput은 링크 내에서 성공적으로 전달된 데이터의 양을 말하며 보통 얼만큼의 트래픽을 처리했는지를 나타낸다. "많은 트래픽을 처리한다 == 많은 처리량을 가진다" 라는 의미이다.

 

영화를 스트리밍한다고 생각해보자!

  • Latency: 영화 재생 버튼을 누른 순간부터 실제로 영화가 재생되기까지 걸리는 시간이다. Latency가 낮으면, 즉 지연 시간이 짧으면, 버튼을 누르자마자 바로 영화가 재생된다.
  • Bandwidth: 영화를 스트리밍할 때 네트워크가 한 번에 얼마나 많은 영화 데이터를 전송할 수 있는지를 의미한다. Bandwidth가 넓으면, 높은 해상도의 영화를 끊김 없이 볼 수 있다.

정리하자면, Latency는 반응 속도와 관련이 있고, Bandwidth는 한 번에 전송할 수 있는 데이터의 양과 관련이 있다. Latency가 낮으면 실시간으로 반응하는데 유리하고, Bandwidth가 넓으면 많은 데이터를 빠르게 처리하는데 유리하다.

 

https://medium.com/@sandeep15mca/latency-bandwidth-throughput-and-response-time-0ee4d9028277

 

웹 성능을 높이려면?

웹 성능과 무슨 관계가 있을까? 웹성능은 콘텐츠가 신속하게 전달되어 사용자가 원하는 서비스를 빠르게 전달받을 수 있도록 하는 시스템들의 성능을 말하기에 로딩 시간과 관련이 있다. Latency가 짧고 Bandwidth가 넓을 수록 사용자에게 빠르고 품질 좋은 서비스를 제공할 수 있을 것이다. 두 요소의 적절한 최적화를 해주는 것이 필요할 것이다.

 

지연시간의 최적화

1. 콘텐츠 전송 네트워크(CDN) 사용: CDN은 사용자에게 가까운 서버에서 콘텐츠를 제공하여 지연시간을 줄여준다. Akamai, Cloudflare, Amazon CloudFront 등 CDN 서비스를 이용한다.

2. DNS 조회 시간 줄이기: DNS 프리페치를 사용하거나, 빠르고 신뢰할 수 있는 DNS 제공자(예: Google DNS, Cloudflare DNS)를 사용함으로써, DNS 조회 시간을 줄이면 웹페이지 로딩이 빨라진다.

3. 서버 응답 시간 단축: 서버의 성능을 개선하고, 데이터베이스 쿼리를 최적화하며, 서버 측 캐싱을 구현하여 빠르게 응답할 수 있도록 한다.

4. HTTP/2 및 HTTP/3 사용: HTTP/2 및 HTTP/3는 멀티플렉싱, 헤더 압축 등을 통해 지연시간을 줄인다. 서버와 클라이언트가 HTTP/2 또는 HTTP/3를 지원하도록 설정한다.

5. 프리페칭 및 프리로딩: 사용자가 자주 방문하는 페이지나 리소스를 미리 로드하여 체감 지연시간을 줄인다. <link rel="dns-prefetch" href="//example.com"> 태그를 사용해 도메인의 DNS를 미리 조회한다.

 

대역폭 최적화

1. 이미지 최적화: 이미지 파일 크기를 줄이면 대역폭 사용량이 감소한다. 이미지 압축 도구(예: TinyPNG, ImageOptim)를 사용하고, 적절한 포맷(WebP, JPEG)을 선택한다.

2. 리소스 압축: 텍스트 파일을 압축하면 전송되는 데이터 양이 줄어든다. Gzip이나 Brotli 압축을 서버에서 활성화한다.

3. 리소스 병합 및 최소화: 여러 개의 CSS, JavaScript 파일을 하나로 병합하고, 불필요한 공백과 주석을 제거하여 파일 크기를 줄인다. Webpack, Gulp 등의 도구를 사용하여 파일을 최소화(minify)하고 병합한다.

4. 비동기 및 지연 로딩: 초기 페이지 로드 시 필요하지 않은 리소스는 나중에 로드하여 대역폭을 효율적으로 사용한다. <script async> 및 <script defer> 속성을 사용하고, 이미지의 레이지 로딩을 구현한다.

5. 동적 콘텐츠 압축: 동적으로 생성되는 콘텐츠도 압축하여 대역폭 사용량을 줄인다. 서버 측에서 동적 콘텐츠를 gzip 또는 Brotli로 압축하도록 설정한다.