Compression은 응답 본문의 크기를 크게 줄여 웹 앱의 속도를 향상시킬 수 있습니다.
운영 중인 고트래픽 웹 사이트의 경우, 응용 프로그램 서버에서 압축을 처리하는 것보다 일반적으로 역방향 프록시(Nginx 등)에서 압축을 처리하는 것을 강력히 권장합니다. 이 경우 압축 미들웨어를 사용해서는 안됩니다.
gzip Compression을 활성화하려면 Compression 미들웨어 패키지를 설치합니다.
먼저 필요한 패키지를 설치하세요:
$ npm i --save compression
설치가 완료되면, 압축 미들웨어를 전역 미들웨어로 적용합니다.
import * as compression from 'compression';
// 초기화 파일 어딘가에서
app.use(compression());
FastifyAdapter
를사용하는 경우 fastify-compress
를 사용해야 합니다.
먼저 필요한 패키지를 설치하세요:
$ npm i --save @fastify/compress
설치가 완료되면, @fastify/compress
미들웨어를 전역 미들웨어로 적용합니다.
import compression from '@fastify/compress';
// 초기화 파일 어딘가에서
await app.register(compression);
기본적으로 @fastify/compress
는 브라우저가 해당 인코딩을 지원하는 경우(노드 버전 >= 11.7.0) Brotli 압축을 사용합니다. Brotli는 압축 비율 측면에서 효율적이지만 상당히 느립니다. 따라서 fastify-compress
에게 응답을 압축하는 데 gzip와 deflate만 사용하도록 지정하는 것이 좋습니다. 이렇게 하면 응답 크기가 크지만 전달 속도가 훨씬 빨라집니다.
인코딩을 지정하려면 app.register에 두 번째 인수를 제공하세요
await app.register(compression, { encodings: ['gzip', 'deflate'] });
위의 예제는 fastify-compress
가 gzip와 deflate 인코딩만 사용하도록 지정하며, 클라이언트가 둘 다 지원하는 경우 gzip를 선호하도록 합니다.
그냥 compression 사용 방법이라 딱히..?
nest는 사용한다고 안해주면 compression하지 않는구나 생각했습니다.
그래도 내용을 한 번 수정해보겠습니다.
gzip이란 뭐지?
gzip은 파일 압축에 쓰이는 응용 소프트웨어입니다. 서버에서 파일을 압축해줘서 리소스를 받는 로딩시간을 줄여주어서 성능을 개선시켜줍니다. 프론트 성능 개선을 위해 많이 쓰이고, 요즘 대부분의 브라우저들은 gzip압축을 지원합니다.
왜 compression을 자동으로 사용하지 않는걸까?
compression을 사용하면 파일을 압축하고 성능을 개선시켜 주는데 사용하지 않는 이유가 있을까?
그 이유로 생각되는 것 들을 정리해봤습니다!
- 성능 및 리소스 문제 : 데이터를 compression하고 해제하는 과정이 필요하므로 처리량과 CPU 사용량에 영향을 미쳐 일부 경우에 애플리케이션 성능이 저하되는 경우가 있을 수 있습니다.
- 압축할 데이터의 유형 : 데이터가 이미 compression되어 있거나 compression이 적용되지 않아야 더 좋은 성능을 보여주는 데이터가 있을 수 있습니다. ( ex 압축된 데이터, 암호화된 데이터, 작은 데이터 )
- 개발자에게 제어권을 줌 : 데이터의 압축 여부와 방법을 직접 제어할 수 있는 유연성을 제공하기 위해서 프레임워크는 자동으로 compression하지 않는다???
다른 프레임워크의 경우
Spring : Maven에 의존성 추가 및 compression 활성화
express : compression 패키지를 사용해 app에 적용한다.
요 2개만 하겠습니다.
저의 정리는 여기까지 입니다!
좋은 글 감사합니다. 자주 올게요 :)