네트워크/HTTP

HTTP 성능 최적화: 데이터 압축(Compression)

shimdh 2025. 3. 6. 09:19
728x90

웹 애플리케이션의 성능을 최적화하는 것은 사용자 경험과 시스템 효율성 개선을 위해 필수적인 요소입니다. 특히 압축(Compression)데이터 전송량을 줄여 네트워크 대역폭을 절약하고, 페이지 로딩 속도를 향상시키며, 서버의 부담을 경감시키는 중요한 기법입니다.

이 글에서는 압축의 필요성, 주요 압축 알고리즘, 웹 서버에서의 압축 설정 방법, 그리고 실제 구현 사례를 심층적으로 살펴보겠습니다.


1. 압축의 필요성

현대 웹 애플리케이션은 HTML, CSS, JavaScript, 이미지, API 응답 데이터 등 여러 가지 리소스로 구성됩니다.
이러한 파일들이 커질수록 브라우저가 다운로드하는 데이터 양이 많아지고, 웹 페이지 로딩 속도가 느려지며 서버 부담이 증가하게 됩니다.

압축을 활용해야 하는 이유

데이터 전송량 감소 → 클라이언트가 서버에서 데이터를 다운로드할 때 파일 크기를 줄여 속도 향상
네트워크 대역폭 절약 → 트래픽 비용 절감 및 성능 개선
서버 부하 감소 → 동일한 요청을 처리할 때 더 적은 자원을 사용
사용자 경험 개선 → 페이지가 빠르게 로딩되어 이탈률 감소 및 SEO(검색 엔진 최적화) 개선

📌 압축 적용 전후 비교 예시

파일 유형 압축 미적용 크기 Gzip 적용 크기 Brotli 적용 크기
HTML 파일 100KB 30KB 25KB
CSS 파일 200KB 50KB 45KB
JavaScript 파일 500KB 120KB 100KB
API JSON 응답 150KB 40KB 35KB

🔵 압축을 적용하면 데이터 크기가 평균 70~80% 감소하여, 페이지 로딩 속도가 3~5배 향상됨.


2. HTTP 압축 알고리즘

웹에서 사용되는 대표적인 압축 알고리즘은 GzipBrotli이며, 각각의 특성과 차이점을 비교해보겠습니다.

1) Gzip 압축

가장 널리 사용되는 압축 방식으로, 대부분의 웹 서버(Apache, Nginx, IIS 등)와 브라우저에서 지원됨.
텍스트 기반 파일(HTML, CSS, JavaScript 등)에 최적화되어 있으며, 최대 70~90%까지 압축 가능.
✔ 압축 속도가 빠르며, 브라우저 및 서버와의 호환성이 뛰어남.

📌 Gzip 요청 및 응답 예시

1️⃣ 클라이언트(브라우저)가 Gzip 압축 요청

GET /index.html HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate

2️⃣ 서버가 Gzip 압축된 데이터 응답

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 3000  # 압축된 데이터 크기

🔵 결과:

  • 브라우저가 Accept-Encoding: gzip을 포함하여 요청하면, 서버는 Gzip 압축을 적용한 데이터를 반환.
  • 브라우저는 압축을 해제하여 원래의 HTML을 렌더링.

2) Brotli 압축 (Google 개발)

Brotli는 Gzip보다 평균 15~25% 더 높은 압축률을 제공하며, 특히 HTML, CSS, JavaScript 파일에 최적화됨.
최신 웹 브라우저(Chrome, Firefox, Edge 등)와 Nginx, Apache 등의 웹 서버에서 지원됨.
텍스트 기반 파일에서 더욱 효율적이며, Gzip보다 높은 성능을 제공.

📌 Brotli 요청 및 응답 예시

1️⃣ 클라이언트(브라우저)가 Brotli 압축 요청

GET /index.html HTTP/1.1
Host: example.com
Accept-Encoding: br, gzip

2️⃣ 서버가 Brotli 압축된 데이터 응답

HTTP/1.1 200 OK
Content-Encoding: br
Content-Type: text/html
Content-Length: 2800  # Brotli로 더 작은 크기로 압축됨

🔵 결과:

  • Gzip보다 높은 압축률을 제공하여 더 빠른 페이지 로딩 속도 기대 가능.

3. 웹 서버에서 압축 활성화 방법

웹 서버에서 Gzip 또는 Brotli 압축을 활성화하면, 클라이언트가 요청할 때 자동으로 압축된 데이터를 제공할 수 있습니다.

1) Nginx에서 Gzip 압축 활성화

📌 Nginx 설정 파일 (nginx.conf) 수정

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    gzip_min_length 256;  # 최소 파일 크기 (256바이트 이상만 압축)
    gzip_comp_level 6;  # 압축 수준 (1~9, 높을수록 높은 압축)
    gzip_vary on;
}

2) Apache에서 Brotli 압축 활성화

📌 Apache 설정 파일 (.htaccess) 수정


    AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css application/json application/javascript

4. 실전 적용 사례

1) 웹사이트 성능 최적화 (HTML, CSS, JS 압축)

✔ 정적 리소스(HTML, CSS, JavaScript)는 Gzip 또는 Brotli 압축을 적용하여 파일 크기를 줄이고 로딩 속도를 개선.
✔ 페이지 최초 로딩 시 브라우저 캐시와 결합하면 최대 70% 이상의 데이터 전송량 절감 효과.

2) REST API 응답 속도 향상 (JSON 압축)

✔ API 응답이 JSON 형식일 경우, 압축을 적용하면 데이터 전송량을 줄여 응답 속도를 크게 향상.
✔ 특히 대량의 데이터를 반환하는 API는 Gzip 또는 Brotli를 적용하는 것이 필수적.

📌 API 응답 압축 적용 예시 (Express.js - Node.js)

const express = require('express');
const compression = require('compression');

const app = express();

// Gzip 압축 활성화
app.use(compression());

app.get('/data', (req, res) => {
    res.json({ message: "압축된 데이터 전송" });
});

app.listen(3000, () => console.log('서버 실행 중'));

5. 압축 설정 시 고려해야 할 점

🚨 1) 이미지 파일에는 추가 압축 불필요
✔ JPG, PNG, GIF 등 이미 자체적으로 압축된 파일에는 Gzip/Brotli 압축을 적용할 필요 없음.
✔ 대신 WebP와 같은 차세대 이미지 포맷을 사용하여 최적화하는 것이 효과적.

🚨 2) CPU 사용량 고려
✔ 압축 수준이 너무 높으면 서버의 CPU 사용량이 증가할 수 있음.
✔ 일반적으로 Gzip은 level 6~7, Brotli는 level 5~6이 적절한 균형.

🚨 3) 브라우저 호환성 확인
✔ 최신 브라우저는 Brotli를 지원하지만, 일부 구형 브라우저는 Gzip만 지원하므로 호환성을 고려해야 함.


6. 결론

압축은 HTTP 성능 최적화의 핵심 기술로, 데이터 전송량을 줄이고 웹 페이지 로딩 속도를 개선하는 데 필수적입니다.
Gzip과 Brotli를 적절히 활용하면 웹사이트 성능을 최적화하고 사용자 경험을 향상할 수 있습니다.

💡 압축을 적극적으로 활용하여 빠르고 효율적인 웹 서비스를 구축하세요! 🚀

728x90