🌐 HTTP/1.1 β†’ HTTP/2 μ „ν™˜κΈ°: Nginx μ„€μ •μœΌλ‘œ ν•΄κ²°ν•œ 싀무 μž₯μ•  κ²½ν—˜

μ—…λ°μ΄νŠΈ:
1 λΆ„ μ†Œμš”

🌐 HTTP/1.1 β†’ HTTP/2 μ „ν™˜κΈ°: Nginx μ„€μ •μœΌλ‘œ ν•΄κ²°ν•œ 싀무 μž₯μ•  κ²½ν—˜


🚨 μ‹œμž‘μ€ κ°‘μž‘μŠ€λŸ¬μš΄ 응닡 였λ₯˜

μ–΄λŠ λ‚ , 배포 이후 μ›Ή νŽ˜μ΄μ§€μ—μ„œ 간헐적인 응닡 μ§€μ—°κ³Ό
504 Gateway Timeout 였λ₯˜κ°€ ν„°μ§€κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

  • νŽ˜μ΄μ§€λŠ” λ‘œλ”©μ΄ μ•ˆ λ˜κ³ β€¦
  • μ½˜μ†”μ—λŠ” νŠΉμ • JS/CSS μš”μ²­μ΄ 계속 λŒ€κΈ° μƒνƒœβ€¦
  • μ„œλ²„ λ‘œκ·ΈλŠ” μ‘°μš©ν•œλ°, μ‚¬μš©μžλŠ” 계속 μ—λŸ¬λ₯Ό 보고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒμ—λŠ” λ„€νŠΈμ›Œν¬ 문제라고 μƒκ°ν–ˆμ§€λ§Œ,
원인은 HTTP/1.1의 ꡬ쑰적 ν•œκ³„μ— μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


🧩 원인 뢄석: HTTP/1.1의 νŒŒμ΄ν”„λΌμ΄λ‹ 문제

μš°λ¦¬λŠ” HTTP/1.1 ν™˜κ²½μ—μ„œ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜κ³  μžˆμ—ˆκ³ ,
ν΄λΌμ΄μ–ΈνŠΈλŠ” Nginxλ₯Ό 거쳐 μ„œλ²„μ— μš”μ²­μ„ 보내고 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

발견된 문제

  • ν•˜λ‚˜μ˜ 컀λ„₯μ…˜μ— μ—¬λŸ¬ μš”μ²­μ΄ 순차적으둜 μŒ“μ΄λŠ” ꡬ쑰 (νŒŒμ΄ν”„λΌμ΄λ‹)
  • 첫 번째 JS μš”μ²­μ΄ μ§€μ—°λ˜μž, λ‚˜λ¨Έμ§€ λ¦¬μ†ŒμŠ€ μš”μ²­λ„ 쀄쀄이 λŒ€κΈ°
  • 결과적으둜 λͺ¨λ“  λ¦¬μ†ŒμŠ€ λ‘œλ”©μ΄ λ©ˆμΆ”κ³  504 였λ₯˜ λ°œμƒ

μ •λ¦¬ν•˜λ©΄β€¦

ν•˜λ‚˜μ˜ 컀λ„₯μ…˜μ—μ„œ μš”μ²­μ€ 순차적으둜만 응닡 κ°€λŠ₯ β†’
첫 μš”μ²­μ΄ 느리면 λ‚˜λ¨Έμ§€λ„ 쀄쀄이 λ¬Άμž„ = HOL Blocking


πŸš€ ν•΄κ²°: HTTP/2둜 μ „ν™˜

βœ… ν•΄κ²° μ „λž΅

  1. ν΄λΌμ΄μ–ΈνŠΈ β†’ Nginx β†’ Spring μ„œλ²„ ꡬ쑰 μœ μ§€
  2. Nginxμ—μ„œ HTTP/2 ν™œμ„±ν™”
  3. ν…ŒμŠ€νŠΈ κ²°κ³Ό: μš”μ²­ 병렬 처리둜 응닡 μ§€μ—° μ™„μ „ ν•΄κ²°

πŸ”§ Nginxμ—μ„œ HTTP/2 ν™œμ„±ν™” 방법

1️⃣ κΈ°μ‘΄ μ„€μ • (HTTP/1.1)

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
    }
}

2️⃣ μˆ˜μ •λœ μ„€μ • (HTTP/2 적용)

server {
    listen 443 ssl http2;  # http2 λͺ…μ‹œ
    server_name example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
    }
}

πŸ“Œ 주의: HTTP/2λŠ” TLS 기반(HTTPS)μ—μ„œλ§Œ λ™μž‘ν•˜λ―€λ‘œ SSL 섀정이 ν•„μˆ˜μž…λ‹ˆλ‹€.


πŸ“ˆ μ „ν™˜ ν›„ λ³€ν™”

ν•­λͺ© μ „ (HTTP/1.1) ν›„ (HTTP/2)
μš”μ²­ 방식 순차 μš”μ²­/응닡 병렬 μš”μ²­/응닡
μ§€μ—° μš”μ†Œ 첫 μš”μ²­μ΄ 늦으면 전체 μ§€μ—° μš”μ²­λΌλ¦¬ 독립적 처리
νŽ˜μ΄μ§€ λ‘œλ”© 느림, 일뢀 504 였λ₯˜ λΆ€λ“œλŸ½κ³  λΉ λ₯Έ λ‘œλ”©
μ‚¬μš©μž κ²½ν—˜ νŽ˜μ΄μ§€ 깨짐, λŒ€κΈ° 였λ₯˜ μ—†μŒ, λ°˜μ‘ 속도 ↑

πŸ” HTTP/2의 기술적 μž₯점 μš”μ•½

κΈ°λŠ₯ μ„€λͺ…
λ©€ν‹°ν”Œλ ‰μ‹± ν•˜λ‚˜μ˜ 컀λ„₯μ…˜μ—μ„œ μš”μ²­/응닡 병렬 처리
λ°”μ΄λ„ˆλ¦¬ ν”„λ ˆμ΄λ° ν…μŠ€νŠΈ λŒ€μ‹  λ°”μ΄λ„ˆλ¦¬ 처리둜 속도 ν–₯상
HPACK 헀더 μ••μΆ• λ°˜λ³΅λ˜λŠ” 헀더λ₯Ό μ••μΆ•ν•΄ λŒ€μ—­ν­ μ ˆμ•½
HOL Blocking ν•΄κ²° 응닡 μˆœμ„œμ— 얽맀이지 μ•ŠμŒ

πŸ’‘ μ •λ¦¬ν•˜λ©°

μ‹€μ œλ‘œ κ²½ν—˜ν•΄ λ³΄λ‹ˆ, λ‹¨μˆœν•œ ν”„λ‘œν† μ½œ 차이 ν•˜λ‚˜κ°€
μ„œλΉ„μŠ€ 응닡성과 μ‚¬μš©μž κ²½ν—˜μ— 큰 영ν–₯을 λ―ΈμΉœλ‹€λŠ” κ±Έ μ²΄κ°ν–ˆμŠ΅λ‹ˆλ‹€.


νƒœκ·Έ: , , , , , , , ,

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°