NodeJS/생활코딩
[express] 미들웨어 - compression
kyeongjun-dev
2020. 9. 23. 17:23
글 작성
아무거나 양이 많은 글을 복사해서 게시물을 하나 작성한다.
우측 하단에서 전송된 데이터 량이 22.7kB인 것을 확인할 수 있다.
미들웨어를 이용한 압축하기
nodejs 웹서버에서 특정 방식으로 압축을 진행한 뒤, 데이터를 웹 브라우저에 전송할 때 압축된 데이터와 함께 어떤 방식으로 압축했는지를 같이 보낸다. 그러면 웹 브라우저는 해당 방식으로 압축을 해제한 뒤 사용한다.
압축을 하고, 압축을 푸는 비용이 네트워크 전송 비용보다 저렴하다고 한다.
압축을 하는 과정과 압축을 푸는 과정을 미들웨어가 '대신'해준다.
compression 설치 (compression이 한국말로 압축이라고 한다.)
(expressjs.com/en/resources/middleware/compression.html)이 사이트의 설명대로, npm을 통해 설치한다.
$ npm install compression --save
사용을 위해 모듈로 선언 및 가져온다.
var compression = require('compression')
- 사용법
var compression = require('compression')
var express = require('express')
var app = express()
app.use(compression({ filter: shouldCompress }))
function shouldCompress (req, res) {
if (req.headers['x-no-compression']) {
// don't compress responses with this request header
return false
}
// fallback to standard filter function
return compression.filter(req, res)
}
var compression으로 선언한 뒤, compression() 함수가 미들웨어를 리턴하고, app.use를 통해 compression을 '장착'한다.
- 실제 코드 일부
const express = require('express')
const app = express()
const port = 80
const topic = require('./lib/topic');
const qs = require('querystring');
var db = require('./lib/db');
var template = require('./lib/template');
var compression = require('compression')
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(compression())으로 간단하게 사용 시작한다.
결과
전송된 데이터 량이 157 B인 것을 확인할 수 있다.
Response Headers를 확인하면 'Content-Encoding'이 gzip인 것을 확인할 수 있다.(gzip 방식으로 압축되어서 전송되었다는걸 뜻하는 것 같다.)