@fastify/compress๋ฅผ ์ฌ์ฉํ์ฌ HTTP ์๋ต์ ์๋์ผ๋ก ์์ถํ ์ ์์ต๋๋ค. gzip, deflate, brotli ๋ฑ ๋ค์ํ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํ๋ฉฐ, API๋ณ๋ก ์์ถ ์ฌ๋ถ๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ตฌ์กฐ
compress ์ค์
ํ์ฑํ/๋นํ์ฑํ
ํ์ :boolean | FastifyCompressOptions
์ฃผ์ ์ต์
global
๋ชจ๋ ์๋ต์ ์๋์ผ๋ก ์์ถ์ ์ ์ฉํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ํ์ :boolean
๊ธฐ๋ณธ๊ฐ: true
true: ๋ชจ๋ ์๋ต์ ์๋ ์์ถ (๊ธฐ๋ณธ๊ฐ)false:@api({ compress })์ต์ ์ผ๋ก API๋ณ ์ ์ด
threshold
์์ถ์ ์์ํ ์ต์ ์๋ต ํฌ๊ธฐ์ ๋๋ค. ํ์ :number (bytes)
๊ธฐ๋ณธ๊ฐ: 1024 (1KB)
1024(1KB) - ์ผ๋ฐ์ ์ธ ์น ์ฑ512(512B) - ์์ JSON ์๋ต๋ ์์ถ5120(5KB) - ํฐ ์๋ต๋ง ์์ถ
๋๋ฌด ์์ ์๋ต์ ์์ถํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ ํด ์ ์์ต๋๋ค.
encodings
์ง์ํ ์์ถ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก์ ๋๋ค. ํ์ :string[]
๊ธฐ๋ณธ๊ฐ: ["gzip", "deflate"]
"gzip"- ๊ฐ์ฅ ๋๋ฆฌ ์ง์๋จ, ๋น ๋ฅธ ์์ถ"deflate"- gzip๊ณผ ์ ์ฌ"br"(brotli) - ๋์ ์์ถ๋ฅ , ๋๋ฆฐ ์์ถ
๊ธฐ๋ณธ ์์
๊ถ์ฅ ์ค์
Brotli ํฌํจ
์๋ ์์ถ (๋ชจ๋ ์๋ต)
API๋ณ ์์ถ ์ ์ด
global: false๋ก ์ค์ ํ๋ค๋ฉด @api() ๋ฐ์ฝ๋ ์ดํฐ์ compress ์ต์
์ผ๋ก API๋ณ๋ก ์์ถ์ ์ ์ดํ ์ ์์ต๋๋ค.
์ค์ ์์
ํ์ค ์น API
CDN ์ต์ ํ
๊ฐ๋ฐ vs ํ๋ก๋์
๊ณ ์์ถ๋ฅ ์ค์
์ถ๊ฐ ์ต์
gzip ๋ ๋ฒจ
Z_BEST_SPEED(1) - ๋น ๋ฅธ ์์ถZ_DEFAULT_COMPRESSION(6) - ๊ธฐ๋ณธ๊ฐ (๊ถ์ฅ)Z_BEST_COMPRESSION(9) - ์ต๋ ์์ถ
ํน์ Content-Type๋ง ์์ถ
์์ถ ์ ์ธ
์์ถ ํ์ธ
์๋ต์ด ์์ถ๋์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ:๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ
- Network ํญ ์ด๊ธฐ
- ์๋ต ํค๋์์ ํ์ธ:
- 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 ์ค์
๋ค์ ๋จ๊ณ
์๋ต ์์ถ ์ค์ ์ ์๋ฃํ๋ค๋ฉด:- compress decorator - API๋ณ ์์ถ ์ ์ด
- cache-control - ์บ์์ ์์ถ ํจ๊ป ์ฌ์ฉ
- performance - ์ฑ๋ฅ ์ต์ ํ