ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 대역폭(Bandwidth)이란?
    Computer Science/Network 2026. 1. 19. 13:41

    오늘은 백엔드 서버를 설계하고 운영할 때 절대 간과해서는 안 될 요소, 바로 네트워크 대역폭(Bandwidth)에 대해 이야기해보려 합니다.

    서버 로직 최적화에는 공을 들이면서, 정작 데이터가 오가는 '길'에 대해서는 무관심하지 않으셨나요? 대역폭을 이해하면 성능 개선은 물론 인프라 비용까지 획기적으로 줄일 수 있습니다. 💸


    1. 대역폭(Bandwidth)이란 무엇인가?

    네트워크 대역폭은 단위 시간 내에 전송할 수 있는 데이터의 최대 용량을 의미합니다. 흔히 속도와 혼동하지만, 정확히는 '통로의 넓이'에 가깝습니다.

    핵심 개념 비교

    용어 개념 비유
    대역폭 (Bandwidth) 이론상 최대 전송 가능량 고속도로의 차선 수 (8차선 vs 2차선)
    처리량 (Throughput) 실제로 전송된 데이터 양 1시간 동안 실제 통과한 차량 수
    지연 시간 (Latency) 데이터가 도달하는 데 걸리는 시간 출발지에서 목적지까지 도달하는 시간

    2. 서버 개발자가 대역폭에 민감해야 하는 이유 (Why?)

    ① 클라우드 비용의 주범: Data Transfer Out

    대부분의 클라우드 서비스(AWS, Azure 등)는 서버로 들어오는 트래픽은 무료지만, 서버에서 외부로 나가는 트래픽(Egress)에 대해서는 과금을 합니다. 대역폭 최적화가 곧 기술적인 비용 절감(Cost Optimization)인 셈이죠.

    ② 시스템의 병목 현상 (Bottleneck)

    아무리 DB 인덱싱을 잘하고 서버가 0.1초 만에 응답을 생성해도, 결과 데이터가 너무 커서 대역폭 제한에 걸리면 사용자는 결국 '느린 서비스'라고 느끼게 됩니다.


    3. 대역폭 최적화를 위한 실전 전략 (How?)

    ✅ 1. 응답 데이터 압축 (Gzip / Brotli)

    가장 기본적이면서 효과적인 방법입니다. JSON이나 HTML 같은 텍스트 데이터는 압축 효율이 매우 좋습니다.

    // Node.js Express 기준 압축 적용 예시
    const compression = require('compression');
    const express = require('express');
    const app = express();
    
    // 모든 응답에 Gzip 압축 적용
    app.use(compression());
    
    app.get('/api/users', (req, res) => {
    // 거대한 JSON 데이터도 압축되어 전송됨
    res.json({ users: Array(1000).fill({ id: 1, name: 'Gemini' }) });
    });

     

    ✅ 2. 효율적인 데이터 포맷 선택

    JSON은 사람이 읽기 좋고 디버깅이 편하지만, 데이터 크기 면에서는 불리할 수 있습니다. 특히 내부 서버 간 통신(MSA)이나 트래픽이 막대한 구간에서는 Protocol Buffers(protobuf)MessagePack 같은 바이너리 포맷을 고려해 보세요.

    • JSON: {"id": 123, "name": "John"} -> 텍스트 기반이라 필드명 중복이 발생하고 용량이 큼.
    • Protobuf: 이진(Binary) 데이터로 직렬화되어 데이터 크기가 JSON 대비 최대 1/10까지 줄어듭니다.

    ✅ 3. CDN 및 캐싱 활용

    정적 파일(이미지, JS, CSS)은 API 서버의 대역폭을 소모하지 않도록 CDN(Content Delivery Network)으로 분산시켜야 합니다.

    • Origin 서버 보호: 사용자의 요청이 서버로 직접 오지 않고 전 세계 곳곳의 Edge Server에서 처리됩니다.
    • 캐시 헤더 활용: Cache-Control을 적절히 설정하여 동일한 리소스를 중복해서 전송하지 않도록 합니다.

    ✅ 4. 지연 로딩(Lazy Loading) 및 페이지네이션

    한 번에 모든 데이터를 응답하는 대신, 사용자가 필요한 시점에 맞춰 데이터를 쪼개서 전송하는 전략입니다.

    • Pagination: 10,000개의 목록을 한 번에 주지 않고 20개씩 끊어서 응답합니다.
    • Partial Response: 클라이언트가 필요한 필드만 선택해서 가져갈 수 있도록 설계합니다. (예: GraphQL)

    4. 요약 및 인사이트 📝

    네트워크 대역폭은 무한하지 않은 비싼 자원입니다. 서버 개발자는 단순히 기능 구현을 넘어, 내가 설계한 데이터 구조가 네트워크 환경에 어떤 부하를 주는지 항상 고민해야 합니다.

    한 줄 요약

    "데이터를 보내기 전에 압축하고, 적절한 포맷을 선택하며, 정적 자원은 CDN에 맡겨 대역폭을 효율적으로 사수하자!" 🚀

    함께 보면 좋은 글 🔗

    • [Backend] API 응답 속도를 높이는 5가지 최적화 기법
    • [Infra] 클라우드 Egress 비용을 30% 절감하는 아키텍처
    • [Protocol] HTTP/3와 QUIC: 웹 전송의 미래

    📚 출처 및 참고 자료

Designed by Tistory.