Search

์ •์  ํŒŒ์ผ ์„œ๋น™

์ •์  ํŒŒ์ผ ์„œ๋น™

๊ฐœ์š”

์ •์  ํŒŒ์ผ ์„œ๋น™์ด๋ž€ Nginx๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ด๋ฏธ ์ €์žฅ๋œ ํŒŒ์ผ(HTML, CSS, JS, ์ด๋ฏธ์ง€ ๋“ฑ)์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ด๋Š” Nginx๊ฐ€ ๊ฐ€์žฅ ์ž˜ํ•˜๋Š” ์ผ์ด๋ฉฐ, ๋™์  ์š”์ฒญ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ๊ฐ€๋ณ๋‹ค.
Nginx์˜ ์ง„์ •ํ•œ ๊ฐ€์น˜๋Š” ์ •์  ํŒŒ์ผ ์„œ๋น™์— ์žˆ์–ด์š”. ์›น ์„œ๋ฒ„์˜ ๋ชฉ์ ์ด ๊ฒฐ๊ตญ ์ด๊ฑด๋ฐ, Nginx๋Š” ์ด๊ฑธ ์ •๋ง ์ž˜ํ•ด์š”! Apache๋‚˜ ๋‹ค๋ฅธ ์„œ๋ฒ„๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ช‡ ๋ฐฐ ์ด์ƒ ๋น ๋ฅด๊ฒŒ ํŒŒ์ผ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”.
์™œ๋ƒํ•˜๋ฉด Nginx๋Š” ํŒŒ์ผ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ฝ์„ ๋•Œ OS ์ปค๋„์˜ ๋„์›€์„ ๋ฐ›๊ฑฐ๋“ ์š”(sendfile). ์–ด๋–ค ํ”„๋กœ์„ธ์‹ฑ๋„ ์•ˆ ํ•˜๊ณ , ๊ทธ๋ƒฅ "์ด ํŒŒ์ผ์„ ์ €๊ธฐ๋กœ ๋ณด๋‚ด!" ํ•˜๋Š” ๋‹จ์ˆœํ•œ ์ž‘์—…์„ OS ๋ ˆ๋ฒจ์—์„œ ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์ž๋™์ฐจ ์—”์ง„์˜ ๊ณตํšŒ์ „์ด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ํ•  ๋•Œ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ์š”!

์ •์  ํŒŒ์ผ ์„œ๋น™์˜ ํŠน์ง•

graph TD
    A["์ •์  ํŒŒ์ผ ์„œ๋น™์˜<br/>ํ•ต์‹ฌ ํŠน์ง•"] --> B["โšก ์ดˆ๊ณ ์†"]
    A --> C["๐Ÿ’พ ๋‚ฎ์€ ๋ฆฌ์†Œ์Šค"]
    A --> D["๐Ÿ”„ ์บ์‹ฑ ์šฉ์ด"]
    A --> E["๐Ÿ›ก๏ธ ์•ˆ์ „"]

    B --> B1["๋””์Šคํฌ ์ฝ๊ธฐ๋งŒ ํ•จ<br/>ํ”„๋กœ์„ธ์‹ฑ ์—†์Œ"]
    C --> C1["CPU ์‚ฌ์šฉ๋ฅ  ๊ฑฐ์˜ 0%<br/>๋ฉ”๋ชจ๋ฆฌ๋„ ์ตœ์†Œ"]
    D --> D1["๋ธŒ๋ผ์šฐ์ € ์บ์‹œ<br/>CDN ์บ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ"]
    E --> E1["์„œ๋ฒ„ ์ฝ”๋“œ ๋…ธ์ถœ ์—†์Œ<br/>์•ˆ์ „ํ•œ ํŒŒ์ผ๋งŒ ์ œ๊ณต"]

    style A fill:#FFD700
    style B fill:#90EE90
    style C fill:#90EE90
    style D fill:#90EE90
    style E fill:#90EE90
Mermaid
๋ณต์‚ฌ
ํ•ญ๋ชฉ
์ •์  ํŒŒ์ผ ์„œ๋น™
๋™์  ์š”์ฒญ ์ฒ˜๋ฆฌ
์ฒ˜๋ฆฌ ์†๋„
๋ฐ€๋ฆฌ์ดˆ (ms)
์ˆ˜๋ฐฑ ms ~ ์ดˆ
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ
๊ทน์†Œ๋Ÿ‰
๋งŽ์Œ (DB ์กฐํšŒ, ๋กœ์ง ์‹คํ–‰)
์„œ๋ฒ„ ๋ถ€ํ•˜
๊ฑฐ์˜ ์—†์Œ
๋†’์Œ
์บ์‹ฑ
๋งค์šฐ ํšจ๊ณผ์ 
์ œํ•œ์ 
์ฝ”๋“œ ๋…ธ์ถœ ์œ„ํ—˜
๊ฑฐ์˜ ์—†์Œ
์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Œ
ํ™•์žฅ์„ฑ
๊ฑฐ์˜ ๋ฌดํ•œ๋Œ€
์„œ๋ฒ„ ์„ฑ๋Šฅ์— ์ œํ•œ
์ •์  ํŒŒ์ผ ์„œ๋น™์€ ์•„๋ฌด๋ฆฌ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•ด๋„ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ๊ฑฐ์˜ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์•„์š”!

Nginx ์ •์  ํŒŒ์ผ ์„œ๋น™ ๊ตฌ์กฐ

graph LR
    A["๐Ÿ‘ค ํด๋ผ์ด์–ธํŠธ<br/>๋ธŒ๋ผ์šฐ์ €"] -->|"GET /logo.png<br/>GET /style.css"| B["๐Ÿ–ฅ๏ธ Nginx"]
    B -->|๋””์Šคํฌ์—์„œ ์ฝ๊ธฐ| C["๐Ÿ“ ์›น ๋ฃจํŠธ<br/>/var/www/html/"]
    C --> D["logo.png<br/>style.css<br/>index.html<br/>..."]
    B -->|"ํŒŒ์ผ ๋‚ด์šฉ ์ „๋‹ฌ"| A

    style B fill:#90EE90
    style C fill:#87CEEB
Mermaid
๋ณต์‚ฌ

๊ธฐ๋ณธ ์ •์  ํŒŒ์ผ ์„œ๋น™ ์„ค์ •

server { listen 80; server_name example.com; # ์›น ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ • โ€” ๋ชจ๋“  ํŒŒ์ผ์ด ์—ฌ๊ธฐ์„œ ์ฐพ์Œ root /var/www/html; # ๊ธฐ๋ณธ ๋ฌธ์„œ index index.html index.htm; # / ๊ฒฝ๋กœ โ†’ index.html ๋˜๋Š” 404 location / { try_files $uri $uri/ =404; } }
Plain Text
๋ณต์‚ฌ

root vs alias

๊ตฌ๋ถ„
root
alias
์ง€์ • ๋ฐฉ์‹
location ๋ฐ–์—์„œ๋„ ๊ฐ€๋Šฅ
location ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ
๊ฒฝ๋กœ ์ฒ˜๋ฆฌ
location ๊ฒฝ๋กœ + ํŒŒ์ผ๋ช…
alias ๊ฒฝ๋กœ + ํŒŒ์ผ๋ช…
์‚ฌ์šฉ ์˜ˆ
root /var/www/html
alias /var/www/html/assets
์š”์ฒญ
/style.css โ†’ /var/www/html/style.css
/assets/style.css โ†’ /var/www/html/assets/style.css
# root ์‚ฌ์šฉ (๊ถŒ์žฅ) server { root /var/www/html; location / { try_files $uri $uri/ =404; } } # alias ์‚ฌ์šฉ (ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ) server { location /static/ { alias /var/www/static/; # ๋์— / ํ•„์ˆ˜! } }
Plain Text
๋ณต์‚ฌ

try_files ์ง€์‹œ์–ด ์ƒ์„ธ ๋ถ„์„

flowchart TD
    A["์‚ฌ์šฉ์ž ์š”์ฒญ<br/>GET /about"] --> B{"step1: ํŒŒ์ผ ์กด์žฌ?<br/>$uri"}
    B -->|Yes| C["โœ… ํŒŒ์ผ ๋ฐ˜ํ™˜<br/>์š”์ฒญ ์™„๋ฃŒ!"]
    B -->|No| D{"step2: ๋””๋ ‰ํ† ๋ฆฌ ์กด์žฌ?<br/>$uri/"}
    D -->|Yes| E["โœ… ๋””๋ ‰ํ† ๋ฆฌ์˜ index ๋ฐ˜ํ™˜"]
    D -->|No| F{"step3: ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ<br/>=404"}
    F --> G["โŒ 404 ์—๋Ÿฌ ๋ฐ˜ํ™˜"]

    style C fill:#90EE90
    style E fill:#90EE90
    style G fill:#FFB3B3
Mermaid
๋ณต์‚ฌ
# ๊ธฐ๋ณธ ํ˜•ํƒœ try_files $uri $uri/ =404; # ํ•ด์„: # 1๋‹จ๊ณ„: $uri ํŒŒ์ผ ์žˆ๋‚˜? (์˜ˆ: /about ํŒŒ์ผ) # 2๋‹จ๊ณ„: $uri/ ๋””๋ ‰ํ† ๋ฆฌ ์žˆ๋‚˜? (์˜ˆ: /about/ ๋””๋ ‰ํ† ๋ฆฌ) # 3๋‹จ๊ณ„: ์—†์œผ๋ฉด 404 ์—๋Ÿฌ # React/Vue ๊ฐ™์€ SPA try_files $uri $uri/ /index.html; # ํ•ด์„: # 1๋‹จ๊ณ„: $uri ํŒŒ์ผ ์žˆ๋‚˜? # 2๋‹จ๊ณ„: $uri/ ๋””๋ ‰ํ† ๋ฆฌ ์žˆ๋‚˜? # 3๋‹จ๊ณ„: ์—†์œผ๋ฉด /index.html์„ ๋ฐ˜ํ™˜ (React Router๊ฐ€ ์ฒ˜๋ฆฌ)
Plain Text
๋ณต์‚ฌ

ํŒŒ์ผ ์œ ํ˜•๋ณ„ ์„ค์ •

server { root /var/www/html; # ============================================ # HTML ํŒŒ์ผ (์บ์‹ฑ ์ตœ์†Œ) # ============================================ location ~* \\.html$ { expires -1; # ์บ์‹ฑ ์•ˆ ํ•จ add_header Cache-Control "no-cache"; add_header Cache-Control "must-revalidate"; } # ============================================ # CSS, JavaScript (ํ•ด์‹œ ํฌํ•จ๋˜๋ฉด ์žฅ๊ธฐ ์บ์‹ฑ) # ============================================ location /static/css/ { expires 1y; add_header Cache-Control "public, immutable"; } location /static/js/ { expires 1y; add_header Cache-Control "public, immutable"; } # ============================================ # ์ด๋ฏธ์ง€ ํŒŒ์ผ (์ค‘๊ธฐ ์บ์‹ฑ) # ============================================ location ~* \\.(jpg|jpeg|png|gif|ico|webp|svg)$ { expires 30d; add_header Cache-Control "public"; access_log off; # ๋กœ๊ทธ ๊ธฐ๋ก ์•ˆ ํ•จ (๋กœ๊ทธ ํฌ๊ธฐ ์ ˆ์•ฝ) } # ============================================ # ํฐํŠธ ํŒŒ์ผ (์žฅ๊ธฐ ์บ์‹ฑ) # ============================================ location ~* \\.(woff|woff2|ttf|eot|otf)$ { expires 1y; add_header Cache-Control "public, immutable"; add_header Access-Control-Allow-Origin "*"; # CORS } # ============================================ # ๋™์˜์ƒ ํŒŒ์ผ (๋ฒ”์œ„ ์š”์ฒญ ์ง€์›) # ============================================ location ~* \\.(mp4|webm|ogg)$ { expires 30d; mp4; # MP4 pseudo-streaming } # ============================================ # ๊ธฐ๋ณธ ์ •์  ํŒŒ์ผ (๋ชจ๋“  ๊ฒฝ๋กœ) # ============================================ location / { try_files $uri $uri/ =404; } }
Plain Text
๋ณต์‚ฌ

์„ฑ๋Šฅ ์ตœ์ ํ™” ์„ค์ •

http { # ํŒŒ์ผ์„ ์ปค๋„์—์„œ ์ง์ ‘ ์ „์†ก (๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ์ œ๊ฑฐ) sendfile on; # ํŒจํ‚ท์„ ๋ชจ์•„์„œ ํ•œ ๋ฒˆ์— ์ „์†ก (๋„คํŠธ์›Œํฌ ํšจ์œจ) tcp_nopush on; # ์ž์ฃผ ์ ‘๊ทผํ•˜๋Š” ํŒŒ์ผ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ open_file_cache max=10000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; # ์š”์ฒญ ์™„๋ฃŒ ํ›„ ์—ฐ๊ฒฐ ์œ ์ง€ keepalive_timeout 65; server { root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } # ์ •์  ํŒŒ์ผ์€ gzip ์••์ถ• location ~* \\.(css|js|svg|txt|woff|woff2)$ { gzip on; gzip_types text/css application/javascript image/svg+xml; try_files $uri =404; } } }
Plain Text
๋ณต์‚ฌ

๊ฐ ์ตœ์ ํ™” ์˜ต์…˜ ํšจ๊ณผ

์˜ต์…˜
ํšจ๊ณผ
๊ฐœ์„ ๋Ÿ‰
sendfile on
๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ์ œ๊ฑฐ
2~3๋ฐฐ ๋น ๋ฅธ ์ „์†ก
tcp_nopush on
ํŒจํ‚ท ์ตœ์ ํ™”
๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ๋Ÿ‰ 30% ์ฆ๊ฐ€
open_file_cache
ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์บ์‹ฑ
๋””์Šคํฌ I/O 50% ๊ฐ์†Œ
keepalive_timeout
TCP ์žฌ์‚ฌ์šฉ
์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ
gzip on (CSS/JS)
์‘๋‹ต ํฌ๊ธฐ ์••์ถ•
50~70% ํฌ๊ธฐ ๊ฐ์†Œ

๋ณด์•ˆ ์„ค์ •

server { root /var/www/html; # ============================================ # ์ˆจ๊น€ ํŒŒ์ผ ์ฐจ๋‹จ # ============================================ location ~ /\\. { deny all; access_log off; log_not_found off; } # ํŠน์ • ํ™•์žฅ์ž ์ฐจ๋‹จ (.env, .sh, .git ๋“ฑ) location ~ \\.(env|sh|swp|bak)$ { return 403; access_log off; } # ============================================ # ์‹คํ–‰ ๋ถˆ๊ฐ€ ํ™•์žฅ์ž # ============================================ location ~ \\.(php|asp|aspx|jsp)$ { return 403; } # ============================================ # ์ •์ƒ ํŒŒ์ผ ์ œ๊ณต # ============================================ location / { try_files $uri $uri/ =404; } }
Plain Text
๋ณต์‚ฌ

์ •์  ํŒŒ์ผ ์„œ๋น™ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ•ญ๋ชฉ
์„ค์ •
ํšจ๊ณผ
์›น ๋ฃจํŠธ
root /var/www/html
ํŒŒ์ผ ์œ„์น˜ ์ •ํ™•ํžˆ
๊ธฐ๋ณธ ๋ฌธ์„œ
index index.html
/ ์ ‘์† ์‹œ ์ž๋™
ํŒŒ์ผ ๋งตํ•‘
try_files
๊ฒฝ๋กœ๋ณ„ ์ •ํ™•ํ•œ ์ฒ˜๋ฆฌ
HTML ์บ์‹ฑ
expires -1
ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „
์—์…‹ ์บ์‹ฑ
expires 1y
๋ธŒ๋ผ์šฐ์ € ์บ์‹œ
gzip ์••์ถ•
gzip on
์ „์†ก ํฌ๊ธฐ ๊ฐ์†Œ
sendfile
sendfile on
๋น ๋ฅธ ์ „์†ก
์ˆจ๊น€ ํŒŒ์ผ
location ~ /\\.
๋ณด์•ˆ ๊ฐ•ํ™”
ํŒŒ์ผ ์บ์‹ฑ
open_file_cache
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์บ์‹ฑ

์ •์ ํŒŒ์ผ ์„œ๋น™ ์‹ค์Šต

โ€ข
๋„๋ฉ”์ธ : ๊ตญ๋ฃฐ.com
โ€ข
์›น ๋ฃจํŠธ : /var/www/krules

์‹ค์Šต ์ˆœ์„œ

1.
/var/www/krules ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
2.
index.html ํŒŒ์ผ ์ƒ์„ฑ (๊ฐ„๋‹จํ•œ HTML ์ž‘์„ฑ)
3.
Nginx ์„ค์ • ํŒŒ์ผ ์ž‘์„ฑ (์œ„ ์˜ˆ์‹œ ์ฐธ๊ณ )
โ€ข
/etc/nginx/sites-available/krules.conf
1.
์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑ
โ€ข
/etc/nginx/sites-enabled/krules.conf
sudo ln -s /etc/nginx/sites-available/krules.conf /etc/nginx/sites-enabled/
Plain Text
๋ณต์‚ฌ
1.
Nginx ์„ค์ • ํ…Œ์ŠคํŠธ ๋ฐ ์žฌ์‹œ์ž‘
2.
๋ธŒ๋ผ์šฐ์ €์—์„œ http://๊ตญ๋ฃฐ.com ์ ‘์†ํ•˜์—ฌ index.html ํ™•์ธ

krules.conf

server { listen 80; server_name ๊ตญ๋ฃฐ.com; root /var/www/krules; index index.html; location / { try_files $uri $uri/ /index.html; # SPA ๋ผ์šฐํŒ… ๋Œ€์‘ } location /static/ { expires 1y; add_header Cache-Control "public, immutable"; } }
Plain Text
๋ณต์‚ฌ

์„ค์ •์ฝ”๋“œ ์„ค๋ช…

โ€ข
listen 80; : HTTP ๊ธฐ๋ณธ ํฌํŠธ์—์„œ ์š”์ฒญ ์ˆ˜์‹ 
โ€ข
server_name ๊ตญ๋ฃฐ.com; : ํ•ด๋‹น ๋„๋ฉ”์ธ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ
โ€ข
root /var/www/krules; : ์›น ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
โ€ข
index index.html; : ๊ธฐ๋ณธ ๋ฌธ์„œ ์„ค์ •
โ€ข
location / { ... } : ๋ชจ๋“  ๊ฒฝ๋กœ์— ๋Œ€ํ•ด try_files๋กœ ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
โ€ข
$uri : ์š”์ฒญ๋œ ๊ฒฝ๋กœ (์˜ˆ: /about)
โ€ข
$uri/ : ์š”์ฒญ๋œ ๊ฒฝ๋กœ ๋’ค์— / ๋ถ™์ธ ๊ฒƒ (์˜ˆ: /about/)
โ€ข
/index.html : ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด index.html ๋ฐ˜ํ™˜ (SPA ๋ผ์šฐํŒ… ๋Œ€์‘)
โ€ข
location /static/ { ... } : /static/ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์žฅ๊ธฐ ์บ์‹ฑ ์„ค์ • (JS, CSS, ์ด๋ฏธ์ง€ ๋“ฑ)
โ€ข
try_files $uri $uri/ /index.html; : ์š”์ฒญ๋œ ๊ฒฝ๋กœ๊ฐ€ ์‹ค์ œ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด index.html์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ React Router๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•จ
โ€ข
/static/ ๊ฒฝ๋กœ๋Š” ์ •์  ์—์…‹์ด๋ฏ€๋กœ ์žฅ๊ธฐ ์บ์‹ฑ ์„ค์ •
โ€ข
expires 1y; : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ 1๋…„ ๋™์•ˆ ์บ์‹œํ•˜๋„๋ก ์ง€์‹œ
โ€ข
add_header Cache-Control "public, immutable"; : ์บ์‹œ๊ฐ€ ๊ณต์šฉ์ด๋ฉฐ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค์ž„์„ ๋ช…์‹œํ•˜์—ฌ ์บ์‹ฑ ํšจ์œจ ๊ทน๋Œ€ํ™”

ํ•ต์‹ฌ ์ •๋ฆฌ

์ •์  ํŒŒ์ผ ์„œ๋น™ = Nginx์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ, ์ดˆ๊ณ ์† + ์ €๋ถ€ํ•˜
root ์ง€์‹œ์–ด๋กœ ์›น ๋ฃจํŠธ ์„ค์ •, try_files๋กœ ์ •ํ™•ํ•œ ํŒŒ์ผ ๋งตํ•‘
ํŒŒ์ผ ์œ ํ˜•๋ณ„ ์บ์‹ฑ: HTML(์—†์Œ) โ†’ CSS/JS(1๋…„) โ†’ ์ด๋ฏธ์ง€(30์ผ)
sendfile + tcp_nopush: ์ปค๋„ ๋ ˆ๋ฒจ ์ตœ์ ํ™”๋กœ 2~3๋ฐฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ
์ •์  ํŒŒ์ผ์€ gzip ์••์ถ•: ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜(CSS, JS)์€ 30~70% ํฌ๊ธฐ ๊ฐ์†Œ
๋ณด์•ˆ: ์ˆจ๊น€ ํŒŒ์ผ(.), .env, .php ๋“ฑ ์ฐจ๋‹จ ํ•„์ˆ˜