ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ—œ๏ธ NestJS Compression – ์‘๋‹ต ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์••์ถ• ์ „๋žต ์™„๋ฒฝ ๊ฐ€์ด๋“œ


์›น ์„œ๋น„์Šค์˜ ์‘๋‹ต ์†๋„๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ SEO์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
NestJS๋Š” compression ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“  HTTP ์‘๋‹ต์„ gzip, deflate ๋“ฑ์œผ๋กœ ์••์ถ•ํ•˜์—ฌ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์€ NestJS ๊ณต์‹ ๋ฌธ์„œ Compression์„ ๊ธฐ๋ฐ˜์œผ๋กœ
gzip ์••์ถ• ์„ค์ •, ์กฐ๊ฑด๋ถ€ ์••์ถ• ์ฒ˜๋ฆฌ, ์‹ค๋ฌด ์ ์šฉ ์ „๋žต๊นŒ์ง€ ์™„์ „ ์ •๋ณตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


โœ… 1. compression ๋ฏธ๋“ค์›จ์–ด ์„ค์น˜

npm install compression

โœ… 2. ์ „์—ญ ์••์ถ• ์„ค์ • (main.ts)

// main.ts
import * as compression from 'compression';

const app = await NestFactory.create(AppModule);
app.use(compression());
await app.listen(3000);

โ˜‘๏ธ ์„ค์ • ํ›„ ๋ชจ๋“  HTTP ์‘๋‹ต์ด ์••์ถ•๋˜์–ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
โ˜‘๏ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ Accept-Encoding: gzip ํ—ค๋”๋ฅผ ๋ณด๋‚ด์•ผ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.


 

๋ฐ˜์‘ํ˜•

โœ… 3. ์••์ถ• ์˜ต์…˜ ์กฐ์ •

app.use(
  compression({
    level: 6,              // ์••์ถ• ์ˆ˜์ค€ (0~9)
    threshold: 1024,       // ์ตœ์†Œ ํฌ๊ธฐ ์ด์ƒ์ผ ๋•Œ๋งŒ ์••์ถ• (1KB)
    filter: (req, res) => {
      if (req.headers['x-no-compress']) {
        return false; // ์กฐ๊ฑด์— ๋”ฐ๋ผ ์••์ถ• ๋น„ํ™œ์„ฑํ™”
      }
      return compression.filter(req, res);
    },
  }),
);

์ฃผ์š” ์˜ต์…˜ ์ •๋ฆฌ

์˜ต์…˜ ์„ค๋ช…

level ์••์ถ• ๋ ˆ๋ฒจ (0=๋ฌด์••์ถ• ~ 9=์ตœ๋Œ€์••์ถ•)
threshold ์ง€์ •๋œ ํฌ๊ธฐ ์ด์ƒ์—์„œ๋งŒ ์••์ถ• ์ˆ˜ํ–‰
filter ์š”์ฒญ๋ณ„ ์••์ถ• ์—ฌ๋ถ€๋ฅผ ์กฐ๊ฑด๋ถ€๋กœ ์„ค์ • ๊ฐ€๋Šฅ

โœ… 4. ์ ์šฉ ํ™•์ธ ๋ฐฉ๋ฒ•

  • ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ ์‹œ Accept-Encoding: gzip ํ—ค๋” ํฌํ•จ
  • ์‘๋‹ต ํ—ค๋”์— Content-Encoding: gzip ํ™•์ธ
  • ๋ธŒ๋ผ์šฐ์ € DevTools > Network > Size ํƒญ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ

โœ… 5. ์‹ค๋ฌด ์ ์šฉ ํŒ

  • ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์›น ์„œ๋ฒ„(Nginx ๋“ฑ) ๋˜๋Š” CDN ์••์ถ•์ด ๋” ํšจ์œจ์ 
  • JSON ์‘๋‹ต, HTML, ํ…์ŠคํŠธ ๋ฆฌ์†Œ์Šค์— ๊ฐ€์žฅ ํฐ ์••์ถ• ํšจ๊ณผ
  • SSR ํ™˜๊ฒฝ์—์„œ ์••์ถ•์€ TTFB ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ ˆ๋ฒจ์„ ์กฐ์ •ํ•ด์•ผ ํ•จ

๐Ÿง  ์„ฑ๋Šฅ ๋น„๊ต ์˜ˆ์‹œ

์‘๋‹ต ๋ฐ์ดํ„ฐ ์••์ถ• ์ „ (ํฌ๊ธฐ) ์••์ถ• ํ›„ (gzip) ์ ˆ๊ฐ์œจ

100KB JSON 100KB 18KB -82%
HTML ํ…์ŠคํŠธ 50KB 9KB -82%
์ด๋ฏธ์ง€(PNG) 200KB 200KB (๋ณ€ํ™” ์—†์Œ) 0%

โ˜‘๏ธ ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ๋“ฑ์€ ์ด๋ฏธ ์••์ถ•๋œ ํฌ๋งท์ด๋ผ ๋‹ค์‹œ ์••์ถ•ํ•ด๋„ ํšจ๊ณผ ์—†์Œ


 

NestJS Compression,NestJS ์‘๋‹ต ์••์ถ•,NestJS gzip ์„ค์ •,NestJS ์„ฑ๋Šฅ ์ตœ์ ํ™”,NestJS compression ๋ฏธ๋“ค์›จ์–ด,NestJS ์‘๋‹ต์†๋„ ๊ฐœ์„ ,NestJS HTTP ์••์ถ•,NestJS ๋ธŒ๋ผ์šฐ์ € ์••์ถ• ์ ์šฉ,NestJS threshold ์„ค์ •,NestJS ์‹ค๋ฌด ์••์ถ• ์ „๋žต


 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•