Skip to main content
Sonamu๋Š” @fastify/compress๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์‘๋‹ต์„ ์ž๋™์œผ๋กœ ์••์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. gzip, deflate, brotli ๋“ฑ ๋‹ค์–‘ํ•œ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•˜๋ฉฐ, API๋ณ„๋กœ ์••์ถ• ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ

compress ์„ค์ •

ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”

ํƒ€์ž…: boolean | FastifyCompressOptions
๋น„ํ™œ์„ฑํ™”:

์ฃผ์š” ์˜ต์…˜

global

๋ชจ๋“  ์‘๋‹ต์— ์ž๋™์œผ๋กœ ์••์ถ•์„ ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: boolean ๊ธฐ๋ณธ๊ฐ’: true
  • true: ๋ชจ๋“  ์‘๋‹ต์„ ์ž๋™ ์••์ถ• (๊ธฐ๋ณธ๊ฐ’)
  • false: @api({ compress }) ์˜ต์…˜์œผ๋กœ API๋ณ„ ์ œ์–ด
global: false๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์‘๋‹ต์ด๋‚˜ ์ด๋ฏธ ์••์ถ•๋œ ํŒŒ์ผ(์ด๋ฏธ์ง€, ๋™์˜์ƒ)์€ ์••์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

threshold

์••์ถ•์„ ์‹œ์ž‘ํ•  ์ตœ์†Œ ์‘๋‹ต ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ํƒ€์ž…: number (bytes) ๊ธฐ๋ณธ๊ฐ’: 1024 (1KB)
๊ถŒ์žฅ๊ฐ’:
  • 1024 (1KB) - ์ผ๋ฐ˜์ ์ธ ์›น ์•ฑ
  • 512 (512B) - ์ž‘์€ JSON ์‘๋‹ต๋„ ์••์ถ•
  • 5120 (5KB) - ํฐ ์‘๋‹ต๋งŒ ์••์ถ•
๋„ˆ๋ฌด ์ž‘์€ ์‘๋‹ต์„ ์••์ถ•ํ•˜๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ํด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

encodings

์ง€์›ํ•  ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ํƒ€์ž…: string[] ๊ธฐ๋ณธ๊ฐ’: ["gzip", "deflate"]
์ง€์› ์•Œ๊ณ ๋ฆฌ์ฆ˜:
  • "gzip" - ๊ฐ€์žฅ ๋„๋ฆฌ ์ง€์›๋จ, ๋น ๋ฅธ ์••์ถ•
  • "deflate" - gzip๊ณผ ์œ ์‚ฌ
  • "br" (brotli) - ๋†’์€ ์••์ถ•๋ฅ , ๋А๋ฆฐ ์••์ถ•
์šฐ์„ ์ˆœ์œ„: ๋ฐฐ์—ด ์ˆœ์„œ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์›ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
Brotli๋Š” ์••์ถ•๋ฅ ์ด ๋†’์ง€๋งŒ CPU๋ฅผ ๋” ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •์  ํŒŒ์ผ์€ ๋ฏธ๋ฆฌ ์••์ถ•ํ•˜๊ณ , ๋™์  ์‘๋‹ต์€ gzip ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์˜ˆ์‹œ

๊ถŒ์žฅ ์„ค์ •

Brotli ํฌํ•จ

์ž๋™ ์••์ถ• (๋ชจ๋“  ์‘๋‹ต)

API๋ณ„ ์••์ถ• ์ œ์–ด

global: false๋กœ ์„ค์ •ํ–ˆ๋‹ค๋ฉด @api() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์˜ compress ์˜ต์…˜์œผ๋กœ API๋ณ„๋กœ ์••์ถ•์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ†’ API๋ณ„ ์••์ถ• ์ œ์–ด ์‚ฌ์šฉ๋ฒ•

์‹ค์ „ ์˜ˆ์‹œ

ํ‘œ์ค€ ์›น API

์‚ฌ์šฉ:

CDN ์ตœ์ ํ™”

๊ฐœ๋ฐœ vs ํ”„๋กœ๋•์…˜

๊ณ ์••์ถ•๋ฅ  ์„ค์ •

Brotli ํ’ˆ์งˆ์„ ๋†’์ด๋ฉด ์••์ถ•๋ฅ ์€ ์ข‹์•„์ง€์ง€๋งŒ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋Š” ํ…Œ์ŠคํŠธ ํ›„ ์‚ฌ์šฉํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์˜ต์…˜

gzip ๋ ˆ๋ฒจ

gzip ๋ ˆ๋ฒจ:
  • Z_BEST_SPEED (1) - ๋น ๋ฅธ ์••์ถ•
  • Z_DEFAULT_COMPRESSION (6) - ๊ธฐ๋ณธ๊ฐ’ (๊ถŒ์žฅ)
  • Z_BEST_COMPRESSION (9) - ์ตœ๋Œ€ ์••์ถ•

ํŠน์ • Content-Type๋งŒ ์••์ถ•

์••์ถ• ์ œ์™ธ

์••์ถ• ํ™•์ธ

์‘๋‹ต์ด ์••์ถ•๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•:

๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ

  1. Network ํƒญ ์—ด๊ธฐ
  2. ์‘๋‹ต ํ—ค๋”์—์„œ ํ™•์ธ:
  3. Size ํ™•์ธ:

curl ํ…Œ์ŠคํŠธ

์„ฑ๋Šฅ ์˜ํ–ฅ

์••์ถ•์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

์žฅ์ :
  • ๋Œ€์—ญํญ ์ ˆ๊ฐ (50-80% ๊ฐ์†Œ)
  • ๋น ๋ฅธ ์ „์†ก ์‹œ๊ฐ„ (ํŠนํžˆ ๋А๋ฆฐ ๋„คํŠธ์›Œํฌ)
  • CDN ๋น„์šฉ ์ ˆ๊ฐ
๋‹จ์ :
  • CPU ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€
  • ์ฒซ ๋ฐ”์ดํŠธ๊นŒ์ง€ ์‹œ๊ฐ„ ์ฆ๊ฐ€ (TTFB)
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€

๊ถŒ์žฅ ์‚ฌํ•ญ

์••์ถ•ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ:
  • JSON ์‘๋‹ต (API)
  • HTML, CSS, JavaScript
  • SVG, XML
  • ํ…์ŠคํŠธ ํŒŒ์ผ
์••์ถ•ํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ๊ฒƒ:
  • ์ด๋ฏธ์ง€ (JPEG, PNG, WebP) - ์ด๋ฏธ ์••์ถ•๋จ
  • ๋™์˜์ƒ (MP4, WebM) - ์ด๋ฏธ ์••์ถ•๋จ
  • ์••์ถ• ํŒŒ์ผ (ZIP, GZ) - ์ด๋ฏธ ์••์ถ•๋จ
  • ๋งค์šฐ ์ž‘์€ ์‘๋‹ต (< 1KB)

์ฃผ์˜์‚ฌํ•ญ

1. ์ด๋ฏธ ์••์ถ•๋œ ํŒŒ์ผ

2. CPU ์‚ฌ์šฉ๋Ÿ‰

3. threshold ์„ค์ •

๋‹ค์Œ ๋‹จ๊ณ„

์‘๋‹ต ์••์ถ• ์„ค์ •์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด: