Frontend
[Frontend 성능 개선] 압축 적용하여 번들 사이즈 줄이기
BenKangKang
2025. 2. 10. 16:49
증상
프로젝트 개발이 진행됨에 따라 번들 사이즈가 커지고 있는 상황.

해결 방법
https://mystudylab.tistory.com/206 에 나와있는 최적화 방법 중 압축 방법을 적용한다.
압축 방식 비교
1. 애플리케이션 레벨 (예: Node.js/Next.js)
- 장점:
- 애플리케이션 로직 내에서 세밀한 제어 가능
- 동적 콘텐츠에 대한 즉각적인 압축 가능
- 단점:
- 애플리케이션 서버의 CPU 리소스 사용
- 각 요청마다 실시간 압축 필요
- 여러 애플리케이션이 있을 경우 각각 설정 필요
2. 웹서버 레벨 (예: Nginx)
- 장점:
- 중앙 집중식 설정으로 관리 용이
- C로 작성되어 효율적인 압축 처리
- 정적 파일 압축 결과 캐싱 가능
- 여러 애플리케이션에 대해 일관된 압축 정책
- 단점:
- 동적 콘텐츠 압축은 실시간으로 해야 함
- 세밀한 케이스별 제어가 어려울 수 있음
3. CDN 레벨 (예: Cloudflare)
- 장점:
- 서버 리소스 사용 없음
- 전세계 엣지 로케이션에서 처리
- 관리 오버헤드 최소화
- 단점:
- CDN 서비스 비용 발생
- 설정의 유연성이 제한적
- 동적 콘텐츠 처리에 제한
4. 빌드 타임 (예: Webpack)
- 장점:
- 미리 압축된 파일로 즉시 서빙 가능
- 서버 CPU 부하 없음
- 가장 빠른 응답 가능
- 단점:
- 빌드 시간 증가
- 동적 콘텐츠 처리 불가
- 디스크 공간 더 필요 (원본 + 압축 파일)
일반적인 권장사항:
- 정적 파일: Nginx나 CDN 레벨
- 동적 콘텐츠: Nginx나 애플리케이션 레벨
- 대규모 서비스: CDN 활용
- 개발/소규모: Nginx만으로도 충분
nginx 압축 설정 적용
# gzip 압축 활성화
gzip on;
# IE6에서 gzip 비활성화 (오래된 브라우저 호환성)
gzip_disable "msie6";
# 압축 레벨 설정 (1-9, 높을수록 압축률이 높지만 CPU를 더 사용)
gzip_comp_level 5;
# 압축할 파일 타입 확장
gzip_types
application/javascript
application/json
application/xml
application/x-font-ttf
font/opentype
image/svg+xml
image/x-icon
text/css
text/html
text/javascript
text/plain
text/xml;
# 프록시 서버를 위한 설정
gzip_proxied any;
# 최소 압축 크기 (1kb 이상만 압축)
gzip_min_length 1000;
# 압축 버퍼 설정
gzip_buffers 16 8k;
# HTTP 버전 설정
gzip_http_version 1.1;
# Vary 헤더 추가
gzip_vary on;
결과

17M -> 3.4M 약 80% 압축