[TECH-QA] Text Compression

μ›Ή νŽ˜μ΄μ§€λ₯Ό λ‘œλ“œ ν• λ•ŒλŠ” 그에 ν•„μš”ν•œ λ¦¬μ†ŒμŠ€ 듀도 같이 λ‹€μš΄λ‘œλ“œ λ°›μŠ΅λ‹ˆλ‹€. λŒ€ν‘œμ μœΌλ‘œ HTML, JS, CSS 와 같은 ν…μŠ€νŠΈλ“€λ‘œ 이루어진 λ¦¬μ†ŒμŠ€λ“€μ΄ μžˆλŠ”λ°μš”. 이 λ¦¬μ†ŒμŠ€λ“€μ˜ μ‚¬μ΄μ¦ˆκ°€ 클수둝 νŽ˜μ΄μ§€μ˜ λ‘œλ”©μ†λ„λŠ” 느렀질 수 밖에 μ—†μŠ΅λ‹ˆλ‹€. 이런 λ¬Έμ„œλ“€μ˜ μ‚¬μ΄μ¦ˆλ₯Ό 쀄이기 μœ„ν•œ μ—¬λŸ¬κ°€μ§€ 방법 쀑 Text Compression을 μ†Œκ°œν•΄ 보렀고 ν•©λ‹ˆλ‹€.

Text Compression

μ„œλ²„μ—μ„œ λ³΄λ‚΄λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ••μΆ•ν•΄μ„œ λ‹€μš΄λ‘œλ“œν•  νŒŒμΌλ“€μ˜ μš©λŸ‰μ„ 쀄여 더 λΉ λ₯Έ μ„œλΉ„μŠ€λ₯Ό 이용 ν• μˆ˜ μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
textCompression μ‚¬μš©
μ›Ήμ„œλΉ„μŠ€λ₯Ό μ‹€ν–‰ν•˜κ³  λ„€νŠΈμ›Œν¬ νƒ­μ—μ„œ apiκ°€ ν˜ΈμΆœλ˜λŠ” 뢀뢄을 ν΄λ¦­ν•˜μ—¬ 헀더λ₯Ό μ‚΄νŽ΄ 보면 Response Headers의 λ‚΄μš© 쀑 Content-Encodingλ₯Ό 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이미지λ₯Ό 확인해 보면 gzip μ΄λΌλŠ” 인코딩 방식을 ν†΅ν•΄μ„œ μ••μΆ•λ˜μ–΄ μžˆλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. μš”μ²­μ„ 보낼 λ•Œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ–€ μ••μΆ• μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜μš©ν•  수 μžˆλŠ”μ§€ λ‚˜νƒ€λ‚΄λ©΄μ„œ μ„œλ²„μ—μ„œ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ 압좕해달라고 μš”μ²­ν•˜λŠ” μ˜λ―Έκ°€ λ©λ‹ˆλ‹€. μš”μ²­μ„ λ°›μœΌλ©΄ μ„œλ²„μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ” μ••μΆ• λ°©μ‹μ€‘μ—μ„œ κ°€λŠ₯ν•œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ••μΆ•ν•œ 뒀에 응닡을 보내주고 μ‚¬μš©λœ μ••μΆ• μ•Œκ³ λ¦¬μ¦˜μ΄ content-encoding 헀더에 λͺ…μ‹œ ν•˜κ²Œ λ©λ‹ˆλ‹€. 이 ν—€λ”λ“€μ˜ κ°’μœΌλ‘œ gzip, compress, br, deflate λ“± μ••μΆ•μ•Œκ³ λ¦¬μ¦˜μ—λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆμ§€λ§Œ μ›Ήμƒμ—μ„œλŠ” 일반적으둜 GZIPκ³Ό Deplate 두가지λ₯Ό μ‚¬μš© ν•©λ‹ˆλ‹€.

gzip

gzip 은 μœ λ‹‰μŠ€μ—μ„œ νƒœμ–΄λ‚œ μ˜€ν”ˆμ†ŒμŠ€ μ••μΆ• ν”„λ‘œκ·Έλž¨ μž…λ‹ˆλ‹€. μ•Œμ§‘μ΄λ‚˜ 7zip μ—μ„œ μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ Deflate μ••μΆ• μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ§€λ§Œ ν•˜λ‚˜μ˜ 파일만 μ••μΆ•ν•  수 있기 λ•Œλ¬Έμ— 주둜 tar ν”„λ‘œκ·Έλž¨κ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜κ³€ ν•©λ‹ˆλ‹€. λΆˆνŽΈν•˜κΈ° 짝이없어 λ³΄μ΄λŠ” gzip μ••μΆ• ν”„λ‘œκ·Έλž¨μ— μ£Όλͺ©ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” gzip 압좕이 μ›Ήμ‚¬μ΄νŠΈ μ„±λŠ₯ κ°œμ„ κ³Ό λ°€μ ‘ν•œ 연관이 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. GZIP은 Deplate을 λ‹¨λ…μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것보닀 더 쒋은 μ••μΆ•λ₯ μ„ 제곡 ν•©λ‹ˆλ‹€. gzip의 μ••μΆ• μ•Œκ³ λ¦¬μ¦˜μ€ deflate μ•Œκ³ λ¦¬μ¦˜κ³Ό κ°™μœΌλ©° deflate와 λΉ„κ΅ν•΄μ„œ 차이점은 gzip 포맷은 좔가적인 헀더와 체크섬을 μ‚¬μš©ν•˜μ—¬ 였λ₯˜κ²€μΆœμ— 더 강점이 μžˆμŠ΅λ‹ˆλ‹€.

gzip을 μ‚¬μš©ν•œ ν…μŠ€νŠΈ μ••μΆ•

gzip은 ν…μŠ€νŠΈ νŒŒμΌμ„ μ••μΆ•ν•˜λŠ”λ° μžˆμ–΄μ„œ μ΅œμƒμ˜ μ„±λŠ₯을 λ‚΄λŠ” κ²ƒμœΌλ‘œ μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€. 우리의 μ›Ήμ‚¬μ΄νŠΈλŠ” 이미지λ₯Ό μ œμ™Έν•œ λŒ€λΆ€λΆ„μ΄ ν…μŠ€νŠΈ μ½˜ν…μΈ λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ, HTML, CSS, JSON λ“± μ‚¬μ΄νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 거의 λͺ¨λ“  μš”μ†Œκ°€ ν…μŠ€νŠΈ μ½˜ν…μΈ  μž…λ‹ˆλ‹€. μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ λΈŒλΌμš°μ €λŠ” 이미 gzip μ••μΆ•ν”„λ‘œκ·Έλž¨μ„ λ‚΄μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ²Œλ‹€κ°€ μžλ™μœΌλ‘œ gzip 으둜 μ••μΆ•λœ νŒŒμΌμ„ ν•΄μ œν•˜λŠ” κΈ°λŠ₯도 νƒ‘μž¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 즉, μ„œλ²„μ—μ„œ gzip 으둜 μ••μΆ•λœ ν˜•νƒœμ˜ ν…μŠ€νŠΈ λ¦¬μ†ŒμŠ€κ°€ λ‚΄λ €μ˜€λ©΄ λΈŒλΌμš°μ €λŠ” μžλ™μœΌλ‘œ gzip 압좕을 ν•΄μ œν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.
사싀 gzip 인코딩 κΈ°λŠ₯은 HTTP/1.1 λͺ…세에 ν¬ν•¨λ˜μ–΄ 있으며 HTTP/1.1 을 μ§€μ›ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ ν˜„μž¬μ˜ λΈŒλΌμš°μ €λŠ” gzip 으둜 μ••μΆ•λœ μ½˜ν…μΈ λ₯Ό μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€. μ›Ή μ‚¬μ΄νŠΈ 응닡속도 κ°œμ„ μ— μžˆμ–΄ κ°€μž₯ λ¨Όμ € μ μš©μ„ κ³ λ €ν•΄μ•Ό ν•˜κ³  또 적용 이후에도 즉각적인 효과λ₯Ό λ³Ό 수 μžˆλŠ” κ°€μž₯ νƒμ›”ν•œ μˆ˜λ‹¨μ΄ λ°”λ‘œ gzip μ••μΆ• μ „μ†‘μ˜ μ μš©μž…λ‹ˆλ‹€. μ›Ήμ„œλ²„μ— κ°„λ‹¨ν•œ μ„€μ •λ§ŒμœΌλ‘œ 적용이 κ°€λŠ₯ν•˜κ³  별닀λ₯Έ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλ₯Ό 찾기도 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. gzip 압좕이 영ν–₯을 μ£ΌλŠ” ꡬ간이 μ›Ήμ„œλ²„μ™€ μ‚¬μš©μž λΈŒλΌμš°μ € μ‚¬μ΄μ˜ λ„€νŠΈμ› ꡬ간이기 λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ λ‘œμ§λ“±μ—λŠ” 영ν–₯을 μ£Όμ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
gzip μ••μΆ• 전솑을 μ΄μš©ν•˜λ©΄ μ‚¬μ΄νŠΈ νŠΈλž˜ν”½μ˜ λŒ€λΆ€λΆ„μ„ μ μœ ν•˜λŠ” Big 3 (μžλ°”μŠ€ν¬λ¦½νŠΈ, CSS, HTML) μš”μ†Œλ₯Ό ν¬κ²ŒλŠ” 90% κ°€κΉŒμ΄ μ••μΆ•ν•˜μ—¬ 전솑할 수 있기 λ•Œλ¬Έμ— λ„€νŠΈμ› λŒ€μ—­ν­ μ‚¬μš©λŸ‰μ„ 크게 κ°μ†Œμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

gzip 압좕을 μ μš©ν•˜λŠ” 4κ°€μ§€ 방법

μ‚¬μ΄νŠΈμ— gzip 압좕을 μ μš©ν•˜λŠ” 방법은 응닡할 데이터λ₯Ό μ••μΆ•ν•˜λŠ” μž‘μ—…μ„ λˆ„κ°€ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠλƒμ— λ”°λΌμ„œ 크게 4κ°€μ§€λ‘œ ꡬ뢄 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Apache λ‚˜ Nginx λ“± Webμ„œλ²„μ—μ„œ μ²˜λ¦¬ν•˜κΈ°
  • Tomcat μ΄λ‚˜ Weblogic λ“± μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(Was)μ—μ„œ μ²˜λ¦¬ν•˜κΈ°
  • Servlet Filter λ₯Ό λ“±λ‘ν•˜μ—¬ μ²˜λ¦¬ν•˜κΈ°
  • 정적인 νŒŒμΌμ„ 미리 gzip 으둜 μ••μΆ•ν•˜μ—¬ 올리기
μΌλ°˜μ μœΌλ‘œλŠ” Web μ„œλ²„μ—μ„œ μ²˜λ¦¬ν•˜λ„λ‘ ν•˜κ³  μžˆμœΌλ‚˜, ν”„λ‘œμ νŠΈλ‚˜ μ‚¬μ΄νŠΈμ˜ 사정에 λ”°λΌμ„œλŠ” λ‹€λ₯Έ 방법을 κ³ λ €ν•  수 도 μžˆμŠ΅λ‹ˆλ‹€. κ°€λ Ή Webμ„œλ²„μ™€ Was κ΅¬κ°„μ˜ λŒ€μ—­ν­μ„ 확보해야 ν•œλ‹€κ±°λ‚˜ ν•˜λŠ” 이유둜 말이죠.

nginx 에 gzip 으둜 컨텐츠 μ••μΆ• μ„€μ •ν•˜κΈ°

μ••μΆ• 섀정은 가상 ν˜ΈμŠ€νŠΈλ§ˆλ‹€ ν•˜μ§€ 말고 메인 μ„€μ • 파일(/etc/nginx/nginx.conf) 의 http 블둝에 μ„€μ •ν•˜λ©΄ μ „μ—­μ μœΌλ‘œ μ μš©λ˜λ―€λ‘œ νŽΈλ¦¬ν•©λ‹ˆλ‹€.
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
    
  # μ••μΆ• μ„€μ •
}
이 μ½”λ“œλŠ” Nginx μ›Ή μ„œλ²„μ˜ μ„€μ • 파일(nginx.conf λ˜λŠ” κ΄€λ ¨ μ„€μ • 파일)μ—μ„œ HTTP λΈ”λ‘μ˜ 일뢀λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

include /etc/nginx/mime.types;

/etc/nginx/mime.types νŒŒμΌμ„ ν¬ν•¨μ‹œμΌœ Nginxκ°€ 파일 ν™•μž₯μžμ— 따라 μ μ ˆν•œ MIME νƒ€μž…μ„ μ„€μ •ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같이 μ²˜λ¦¬λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)κ°€ νŒŒμΌμ„ μ˜¬λ°”λ₯΄κ²Œ 해석할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • .html νŒŒμΌμ€ text/html
  • .jpg νŒŒμΌμ€ image/jpeg

default_type application/octet-stream;

/etc/nginx/mime.types νŒŒμΌμ„ ν¬ν•¨μ‹œμΌœ Nginxκ°€ 파일 ν™•μž₯μžμ— 따라 μ μ ˆν•œ MIME νƒ€μž…μ„ μ„€μ •ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같이 μ²˜λ¦¬λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)κ°€ νŒŒμΌμ„ μ˜¬λ°”λ₯΄κ²Œ 해석할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • MIME νƒ€μž…μ„ μ„€μ •ν•˜μ§€ μ•Šμ€ νŒŒμΌμ΄λ‚˜ μ•Œ 수 μ—†λŠ” ν™•μž₯자의 νŒŒμΌμ— λŒ€ν•΄ 기본적으둜 application/octet-stream νƒ€μž…μ„ μ§€μ •ν•©λ‹ˆλ‹€.
  • application/octet-stream은 일반적인 λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμ„ μ˜λ―Έν•˜λ©°, λΈŒλΌμš°μ €λŠ” 이λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ 기본적으둜 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
제일 λ¨Όμ € μ„€μ •ν•  ν•­λͺ©μ€ gzip on; 으둜 컨텐츠 μ••μΆ• μ‚¬μš©μ„ μ§€μ‹œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€
http {
  gzip on;
  gzip_disable "msie6";
}
gzip on;
  • Gzip 압좕을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ„œλ²„κ°€ 응닡 데이터λ₯Ό μ••μΆ•ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €)둜 μ „μ†‘ν•˜λ―€λ‘œ, 데이터 μ „μ†‘λŸ‰μ„ 쀄이고 νŽ˜μ΄μ§€ λ‘œλ“œ 속도λ₯Ό κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ••μΆ• λŒ€μƒμ€ 일반적으둜 HTML, CSS, JavaScript, JSON, XML λ“± ν…μŠ€νŠΈ 기반 νŒŒμΌμž…λ‹ˆλ‹€.
gzip_disable "msie6";
  • νŠΉμ • μ‚¬μš©μž μ—μ΄μ „νŠΈ(λΈŒλΌμš°μ €)에 λŒ€ν•΄ Gzip 압좕을 λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
  • μ—¬κΈ°μ„œλŠ” "msie6" (Microsoft Internet Explorer 6)을 λŒ€μƒμœΌλ‘œ μ§€μ •ν•˜μ—¬, 이 λΈŒλΌμš°μ €μ—μ„œλŠ” μ••μΆ•λœ μ½˜ν…μΈ λ₯Ό μ „μ†‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • Internet Explorer 6은 Gzip μ••μΆ• μ²˜λ¦¬μ— 버그가 μžˆκ±°λ‚˜ ν˜Έν™˜μ„± λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμ–΄, 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 압좕을 λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

nginx 에 gzip 으둜 컨텐츠 μ••μΆ• μ„€μ •

gzip_comp_level 6;
gzip_min_length 500;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_comp_level
  • Gzip μ••μΆ• μˆ˜μ€€μ„ μ„€μ •ν•©λ‹ˆλ‹€. 값은 1(μ΅œμ†Œ μ••μΆ•, λΉ λ₯Έ 처리)μ—μ„œ 9(μ΅œλŒ€ μ••μΆ•, 느린 처리)κΉŒμ§€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • 6은 μ••μΆ•λ₯ κ³Ό μ„±λŠ₯ κ°„μ˜ κ· ν˜•μ΄ 쒋은 쀑간 μˆ˜μ€€μœΌλ‘œ, 기본값이기도 ν•©λ‹ˆλ‹€.
  • 높은 μ••μΆ• μˆ˜μ€€μ€ 파일 크기λ₯Ό 더 μ€„μ΄μ§€λ§Œ CPU μ‚¬μš©λŸ‰μ΄ μ¦κ°€ν•©λ‹ˆλ‹€.
gzip_min_length 500
  • 압좕을 μ μš©ν•  응닡 λ°μ΄ν„°μ˜ μ΅œμ†Œ 길이λ₯Ό λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ μ§€μ •ν•©λ‹ˆλ‹€.
  • μ—¬κΈ°μ„œλŠ” 응닡 데이터가 500λ°”μ΄νŠΈ 이상일 λ•Œλ§Œ Gzip 압좕을 μ μš©ν•©λ‹ˆλ‹€.
  • μž‘μ€ λ°μ΄ν„°λŠ” 압좕해도 크기 κ°μ†Œ νš¨κ³Όκ°€ λ―Έλ―Έν•˜λ―€λ‘œ, λΆˆν•„μš”ν•œ CPU μ‚¬μš©μ„ 쀄이기 μœ„ν•΄ μ„€μ •ν•©λ‹ˆλ‹€.
gzip_buffers 16 8k;
  • Gzip 압좕을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν• λ‹Ήν•  λ©”λͺ¨λ¦¬ λ²„νΌμ˜ κ°œμˆ˜μ™€ 크기λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • 16 8kλŠ” 16개의 8KB 버퍼λ₯Ό μ‚¬μš©ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€(총 128KB).
  • 이 섀정은 μ••μΆ• 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 ν•„μš”ν•œ λ©”λͺ¨λ¦¬ 곡간을 μ •μ˜ν•˜λ©°, μ„œλ²„μ˜ λ©”λͺ¨λ¦¬μ™€ λΆ€ν•˜μ— 따라 μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
gzip_proxied any;
  • ν”„λ‘μ‹œλœ μš”μ²­μ— λŒ€ν•΄ Gzip 압좕을 μ μš©ν•  쑰건을 μ„€μ •ν•©λ‹ˆλ‹€.
  • anyλŠ” λͺ¨λ“  ν”„λ‘μ‹œ μš”μ²­(예: CDN, λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ λ“±)에 λŒ€ν•΄ 압좕을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€.
  • μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•„λ‹Œ 쀑간 ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 톡해 μš”μ²­μ΄ 올 λ•Œλ„ μ••μΆ•λœ 데이터λ₯Ό μ „μ†‘ν•˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.
  • any: 항상 μ••μΆ•ν•©λ‹ˆλ‹€.
  • off: ν”„λ½μ‹œμ—μ„œ μš”μ²­ν•  경우 μ••μΆ•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • expired: μš”μ²­ 헀더에 Expires κ°€ 있고 λ§Œλ£Œλ˜μ—ˆμ„ κ²½μš°μ—λ§Œ μ••μΆ•ν•©λ‹ˆλ‹€.
  • no-cache: μš”μ²­ 헀더에 Cache-Control κ°€ 있고 no-cache 일 κ²½μš°μ—λ§Œ μ••μΆ•ν•©λ‹ˆλ‹€.
  • no-store: μš”μ²­ 헀더에 Cache-Control κ°€ 있고 no-store 일 κ²½μš°μ—λ§Œ μ••μΆ•ν•©λ‹ˆλ‹€.
κ·Έ μ™Έ κ°€λŠ₯ν•œ 섀정은 Nginx gzip_proxied Documentation을 μ°Έκ³ ν•˜μ„Έμš”.

nginx 에 gzip 으둜 content type μ„€μ •ν•˜κΈ°

μ»¨ν…μΈ μ˜ μœ ν˜•μ— 따라 gzip_types μ§€μ‹œμžλ‘œ μ••μΆ• μ—¬λΆ€λ₯Ό μ„€μ •ν•  수 있으며 μ•„λž˜ 섀정은 일반적으둜 많이 μ‚¬μš©ν•˜λŠ” 컨텐츠 μœ ν˜•μ— λŒ€ν•΄ μ••μΆ•ν•˜λŠ” 예둜 가독성을 μœ„ν•΄ κ°œν–‰μ„ μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.
gzip_types
    text/plain
    text/css
    text/js
    text/xml
    text/javascript
    application/javascript
    application/x-javascript
    application/json
    application/xml
    application/rss+xml
    image/svg+xml;
gzip_types μ§€μ‹œλ¬Έ
  • Gzip 압좕을 μ μš©ν•  μ½˜ν…μΈ μ˜ MIME νƒ€μž…μ„ μ •μ˜ν•©λ‹ˆλ‹€.
  • 기본적으둜 text/html은 항상 μ••μΆ•λ˜λ―€λ‘œ 이 λͺ©λ‘μ— ν¬ν•¨λ˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.
  • 이 섀정은 gzip on;이 ν™œμ„±ν™”λœ κ²½μš°μ—λ§Œ μ μš©λ©λ‹ˆλ‹€.
μ§€μ •λœ MIME νƒ€μž…
  • text/plain: 일반 ν…μŠ€νŠΈ 파일(예: .txt).
  • text/css: CSS μŠ€νƒ€μΌμ‹œνŠΈ 파일(예: .css).
  • text/js: JavaScript 파일. μ°Έκ³ : text/jsλŠ” λΉ„ν‘œμ€€ MIME νƒ€μž…μœΌλ‘œ, ν˜„λŒ€ μ›Ήμ—μ„œλŠ” application/javascriptκ°€ ꢌμž₯λ©λ‹ˆλ‹€. 일뢀 λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ  수 있음.
  • text/xml: XML ν˜•μ‹μ˜ ν…μŠ€νŠΈ 파일(예: .xml).
  • text/javascript: JavaScript 파일. μ°Έκ³ : 과거에 μ‚¬μš©λ˜μ—ˆμœΌλ‚˜, ν˜„μž¬λŠ” application/javascript둜 λŒ€μ²΄λ¨.
  • application/javascript: ν˜„λŒ€ ν‘œμ€€ JavaScript 파일(예: .js).
  • application/x-javascript: JavaScript 파일의 λΉ„ν‘œμ€€/λ ˆκ±°μ‹œ MIME νƒ€μž…. ν˜Έν™˜μ„±μ„ μœ„ν•΄ 포함.
  • application/json: JSON 데이터 파일(예: .json).
  • application/xml: XML ν˜•μ‹μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 데이터.
  • application/rss+xml: RSS ν”Όλ“œ(예: RSS XML 파일).
  • image/svg+xml: SVG 벑터 이미지 파일(예: .svg).
이 섀정은 μœ„ MIME νƒ€μž…μ— ν•΄λ‹Ήν•˜λŠ” 파일이 ν΄λΌμ΄μ–ΈνŠΈλ‘œ 전솑될 λ•Œ Gzip 압좕을 μ μš©ν•˜λ„λ‘ Nginx에 μ§€μ‹œν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ .css, .js, .json, .svg λ“±μ˜ νŒŒμΌμ€ μ••μΆ•λ˜μ–΄ μ „μ†‘λ˜λ©°, μ΄λŠ” λŒ€μ—­ν­μ„ μ ˆμ•½ν•˜κ³  νŽ˜μ΄μ§€ λ‘œλ“œ 속도λ₯Ό κ°œμ„ ν•©λ‹ˆλ‹€. text/js, text/javascript, application/x-javascriptλŠ” JavaScript νŒŒμΌμ„ λ‹€μ–‘ν•œ MIME νƒ€μž…μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” λΈŒλΌμš°μ €μ™€μ˜ ν˜Έν™˜μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ ν¬ν•¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ£Όμ˜μ‚¬ν•­

λΉ„ν‘œμ€€ MIME νƒ€μž…
  • text/js와 application/x-javascriptλŠ” λΉ„ν‘œμ€€μ΄λ©°, μ΅œμ‹  μ›Ή ν™˜κ²½μ—μ„œλŠ” application/javascript만 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ ˆκ±°μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ§€μ›ν•˜λ €λ©΄ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.
κΈ°λ³Έκ°’κ³Όμ˜ 쀑볡
  • Nginx의 κΈ°λ³Έ gzip_typesμ—λŠ” text/html이 ν¬ν•¨λ˜μ–΄ μžˆμœΌλ―€λ‘œ, 이 섀정은 좔가적인 MIME νƒ€μž…μ„ ν™•μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
μ••μΆ• νš¨μœ¨μ„±
  • SVG(image/svg+xml)와 같은 νŒŒμΌμ€ ν…μŠ€νŠΈ κΈ°λ°˜μ΄λ―€λ‘œ μ••μΆ• νš¨κ³Όκ°€ ν¬μ§€λ§Œ, 이미 μ••μΆ•λœ 파일(예: JPEG, PNG)은 gzip_types에 ν¬ν•¨μ‹œν‚€μ§€ μ•ŠλŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€(μ••μΆ• νš¨κ³Όκ°€ 미미함).
gzip_types 섀정은 ν…μŠ€νŠΈ 기반 파일(CSS, JavaScript, JSON, XML, SVG λ“±)에 Gzip 압좕을 μ μš©ν•˜μ—¬ 데이터 전솑 νš¨μœ¨μ„±μ„ λ†’μž…λ‹ˆλ‹€. λ‹€μ–‘ν•œ JavaScript MIME νƒ€μž…μ„ 포함해 ν˜Έν™˜μ„±μ„ κ°•ν™”ν–ˆμœΌλ©°, 특히 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” 파일 ν˜•μ‹μ„ λŒ€μƒμœΌλ‘œ ν•©λ‹ˆλ‹€. μ΅œμ‹  ν™˜κ²½μ—μ„œλŠ” text/js와 같은 λΉ„ν‘œμ€€ νƒ€μž…μ„ μ œκ±°ν•˜κ³  κ°„μ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

nginx 에 gzip 으둜 컨텐츠 μ••μΆ• μ΅œμ’… μ½”λ“œ

http {
# nginx 의 메인 μ„€μ • 파일인 nginx.conf 의 http ν•­λͺ©μ— λ‹€μŒκ³Ό 같이 μ„€μ •
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
	
# μ••μΆ• μ„€μ •
gzip  on;
gzip_disable "msie6";


gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_proxied any;

gzip_types
  text/plain
  text/css
  text/js
  text/xml
  text/javascript
  application/javascript
  application/x-javascript
  application/json
  application/xml
  application/rss+xml
  image/svg+xml;
}

압좕을 ν•˜λŠ”λ°μ—λ„ μ‹œκ°„μ΄ 쑰금 κ±Έλ¦¬μ§€λ§Œ 압좕을 ν•΄μ œ ν•˜λŠ” 데에도 μ‹œκ°„μ΄ 쑰금 걸리기 λ•Œλ¬Έμ— λͺ¨λ“  νŒŒμΌμ„ μ••μΆ•ν•˜κ³  μ••μΆ•ν•΄μ œ ν•˜λŠ” 것 λ³΄λ‹€λŠ” 파일의 크기가 2KB이상일 κ²½μš°μ—λŠ” 압좕을 ν•˜λŠ”κ²ƒμ΄ λ‚«κ³  2KB μ΄ν•˜μΌ κ²½μš°μ—λŠ” 압좕을 μ§„ν–‰ν•˜μ§€ μ•ŠλŠ”κ²ƒμ΄ 더 효율적 이라고 ν•©λ‹ˆλ‹€.