LUCATHREE.COM

← Back to list
🧐 TIL

[λ°±μ—”λ“œ κΈ°λ³Έ κ°œλ… 정리] μ›Ήμ„œλ²„

μž‘μ„±μΌ:
TILTerms

μ›Ήμ„œλ²„ (Web Server)

μ›Ή κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°›μ•„ μ›Ήμ‚¬μ΄νŠΈμ˜ μ½˜ν…μΈ λ₯Ό λ°˜ν™˜ν•˜λŠ” λͺ¨λ“  λŒ€μƒμ„ μ„œλ²„λ‘œ ν†΅μΌν•΄μ„œ λΆ€λ₯΄λŠ” κ²½μš°κ°€ λ§Žλ‹€. μš©μ–΄μƒ ν‹€λ¦° 것은 μ•„λ‹ˆμ§€λ§Œ λ•Œλ‘œλŠ” β€œSpring μ„œλ²„β€, β€œFastAPI μ„œλ²„β€ 처럼 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ„œλ²„λ‘œ λΆ€λ₯΄λŠ” κ²½μš°κ°€ 생기기도 ν•˜κ³  과거와 달리 λ°±μ—”λ“œ μ„œλ²„μ™€ ν”„λ‘ νŠΈμ—”λ“œ μ„œλ²„λ₯Ό 각각 λΆ„λ¦¬ν•˜κΈ°λ„ ν•˜λŠ” ν˜„μž¬, μ›Ήμ„œλ²„μ˜ μ •μ˜λ₯Ό λ‹€μ‹œ 정리해본닀.

μ›Ήμ„œλ²„μ˜ μ •μ˜

일단 μ›Ήμ„œλ²„μ˜ μ •μ˜λ₯Ό κ²€μƒ‰ν•˜λ©΄ β€œν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 따라 μ›Ήμ‚¬μ΄νŠΈμ˜ μ½˜ν…μΈ (ν…μŠ€νŠΈ, 이미지, HTML 파일 λ“±)λ₯Ό μ €μž₯ν•˜κ³  μ œκ³΅ν•˜λŠ” ν•˜λ“œμ›¨μ–΄ λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄β€λΌκ³  λ‚˜μ˜¨λ‹€. μ—¬κΈ°μ—μ„œ β€œν•˜λ“œμ›¨μ–΄ λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄β€λΌλŠ” 점에 μ£Όλͺ©ν•΄μ•Όν•˜λŠ”λ°, ν•˜λ“œμ›¨μ–΄ 관점과 μ†Œν”„νŠΈμ›¨μ–΄ 관점에 따라 뜻이 달라지기 λ•Œλ¬Έμ΄λ‹€.
μ†Œν”„νŠΈμ›¨μ–΄ κ΄€μ μ—μ„œ μ›Ήμ„œλ²„λŠ” μ‚¬μš©μžμ—κ²Œ ν•„μš”ν•œ μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•˜λŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œ μš”μ²­μ„ λ°›κ³  μš”μ²­ λ‚΄μš©μ— 따라 μ½˜ν…μΈ λ₯Ό λ°˜ν™˜ν•˜λŠ” 일련의 과정을 μ²˜λ¦¬ν•œλ‹€.
그런데 ν•˜λ“œμ›¨μ–΄ κ΄€μ μ—μ„œλŠ” μ•žμ„œ λ§ν•œ μ›Ήμ„œλ²„ ν”„λ‘œκ·Έλž¨μ„ ν¬ν•¨ν•˜μ—¬ μ›Ήμ‚¬μ΄νŠΈμ˜ μ»΄ν¬λ„ŒνŠΈ νŒŒμΌλ“€μ„ 물리적으둜 μ €μž₯ν•˜κ³  인터넷에 μ—°κ²°λ˜μ–΄ 톡신을 ν•  수 μžˆλŠ” 기기의 κ°œλ…μœΌλ‘œ ν™•μž₯λœλ‹€. β€œμ˜¨ν”„λ ˆλ―ΈμŠ€ μ„œλ²„β€λ‚˜ β€œν΄λΌμš°λ“œ μ„œλ²„β€ 같은 κ°œλ…μ€ ν•˜λ“œμ›¨μ–΄ κ΄€μ μ—μ„œ μ„œλ²„μ˜ 물리적 μœ„μΉ˜μ— 따라 λ‚˜λ‰œ 것이라고 λ³Ό 수 μžˆλ‹€.
이 ν¬μŠ€νŠΈμ—μ„œ 계속 μ„€λͺ…ν•  λ‚΄μš©λ“€μ€ μ†Œν”„νŠΈμ›¨μ–΄ κ΄€μ μ—μ„œμ˜ μ›Ήμ„œλ²„μ™€ μ—°κ΄€λœ λ‚΄μš©μ΄λΌκ³  보면 λœλ‹€.

μ›Ήμ„œλ²„μ˜ μ—­ν• 

(μ†Œν”„νŠΈμ›¨μ–΄λ‘œμ„œ) μ›Ήμ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ(주둜 μ›Ή λΈŒλΌμš°μ €)λ‘œλΆ€ν„° HTTP μš”μ²­μ„ λ°›μ•„ 정적 μ½˜ν…μΈ (Static Content)λ₯Ό κ·ΈλŒ€λ‘œ μ‘λ‹΅ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€. 즉, λΈŒλΌμš°μ €κ°€ μš”μ²­ν•œ νŒŒμΌμ„ β€œκ·ΈλŒ€λ‘œβ€ λŒλ €μ£ΌλŠ” 역할을 ν•˜λŠ” κ²ƒμœΌλ‘œ HTML, CSS, JavaScript 파일 및 이미지, 폰트, λ™μ˜μƒ 등을 μ œκ³΅ν•œλ‹€.
λŒ€ν‘œμ μœΌλ‘œλŠ” Nginx와 Apacheκ°€ μ›Ήμ„œλ²„λ‘œ 많이 μ‚¬μš©λœλ‹€.
μ—¬κΈ°μ„œ μ£Όμ˜ν•  것은 μ›Ήμ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 따라 λ‚΄μš©μ΄ λ‹¬λΌμ§€λŠ” 동적 μ½˜ν…μΈ μ˜ 처리λ₯Ό ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€λŠ” 것이닀. 동적 μ½˜ν…μΈ μ˜ 생성은 WAS(Web Application Server)의 μ—­ν• λ‘œ μ›Ήμ„œλ²„μ™€ WASλŠ” μ„œλ‘œ λ‹€λ₯΄λ‹€.

νŠΉμ§• μš”μ•½

  • 처리 λŒ€μƒ: 정적 파일 (HTML, CSS, JS λ“±)
  • μ‹€ν–‰ 방식: μš”μ²­ 받은 νŒŒμΌμ„ κ·ΈλŒ€λ‘œ 응닡
  • 속도: 맀우 빠름 (I/O 쀑심, CPU λΆ€λ‹΄ 적음)
  • μ˜ˆμ‹œ: Nginx, Apache

μ›Ήμ„œλ²„ μ—­ν• μ˜ ν™•μž₯

그런데, 의문이 ν•˜λ‚˜ λ“ λ‹€. μ›Ήμ‚¬μ΄νŠΈμ— 정적 μ½˜ν…μΈ λ§Œ μ„œλΉ™ν•˜λ˜ 과거와 달리 ν˜„μž¬λŠ” 동적 μ½˜ν…μΈ μ˜ 전달이 μ€‘μš”ν•΄μ§€κ³  μ›Ήμ„œλΉ„μŠ€μ˜ λ³΅μž‘λ„κ°€ λ†’μ•„μ§€λ©΄μ„œ ν”„λ‘ νŠΈμ—”λ“œ μ„œλ²„μ™€ λ°±μ—”λ“œ μ„œλ²„λ₯Ό λΆ„λ¦¬ν•΄μ„œ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.
λ¨Όμ € μ„€λͺ…ν•œλŒ€λ‘œ μ›Ήμ„œλ²„μ˜ 역할이 정적 μ½˜ν…μΈ λ₯Ό μ „λ‹¬ν•˜λŠ” 것이라면 더 이상 직접 html, css, js 등을 닀루지 μ•ŠλŠ” λ°±μ—”λ“œ API ꡬ성에 nginx, apacheκ°€ 포함될 ν•„μš”κ°€ μ—†λ‹€. κ·ΈλŸΌμ—λ„ μ›Ήμ„œλ²„λŠ” λ°˜λ“œμ‹œ WAS와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ”λ°, κ·Έ μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

κ²Œμ΄νŠΈμ›¨μ΄λ‘œμ„œμ˜ μ›Ήμ„œλ²„

κ²Œμ΄νŠΈμ›¨μ΄λŠ” λ„€νŠΈμ›Œν¬λ‚˜ μ‹œμŠ€ν…œ μ„€κ³„μ—μ„œ 두 개의 μ„œλ‘œ λ‹€λ₯Έ ν™˜κ²½μ„ μ—°κ²°ν•˜λŠ” κ΄€λ¬Έ 역할을 ν•˜λŠ” ꡬ성 μš”μ†Œλ‘œ 톡신을 μ€‘κ°œν•˜κ³  ν”„λ‘œν† μ½œμ„ λ³€ν™˜ν•΄μ£ΌκΈ°λ„ ν•œλ‹€.
ν˜„λŒ€ λ°±μ—”λ“œ κ΅¬μ‘°μ—μ„œ μ›Ήμ„œλ²„λŠ” λ‹¨μˆœνžˆ HTML, CSS, JS νŒŒμΌμ„ μ „λ‹¬ν•˜κΈ°λ³΄λ‹€λŠ” λͺ¨λ“  μ™ΈλΆ€ μš”μ²­μ΄ ν†΅κ³Όν•˜λŠ” API κ²Œμ΄νŠΈμ›¨μ΄ 역할을 ν•˜λ©° μ‚¬μš©μžμ˜ μš”μ²­μ΄ WASλ‚˜ λ°±μ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ‹ΏκΈ° 전에 λ³΄μ•ˆ, λΌμš°νŒ…, 캐싱, μ••μΆ• 등을 μ²˜λ¦¬ν•˜λŠ” λ ˆμ΄μ–΄λ‘œ μ—­ν• ν•œλ‹€.

λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ (Reverse Proxy)

β€˜λŒ€λ¦¬μΈβ€™μ„ λœ»ν•˜λŠ” λ‹¨μ–΄μ—μ„œ μœ λž˜ν•œ ν”„λ‘μ‹œ(Proxy)λŠ” λ„€νŠΈμ›Œν¬ ν†΅μ‹ μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 사이에 μœ„μΉ˜ν•˜μ—¬ 쀑계 역할을 ν•˜λŠ” μ‹œμŠ€ν…œμ΄λ‹€. ν”„λ‘μ‹œμ˜ μ£Όμš” 역할은 λ³΄μ•ˆ κ°•ν™”, μ›Ή νŠΈλž˜ν”½ 관리, 개인 정보 보호, 캐싱을 ν†΅ν•œ μ„±λŠ₯ ν–₯상 등이 μžˆλ‹€.
ν¬μ›Œλ“œ ν”„λ‘μ‹œ(Forward Proxy)λŠ” ν΄λΌμ΄μ–ΈνŠΈ 츑에 μœ„μΉ˜ν•˜λ©° μ‚¬μš©μžκ°€ 인터넷 상에 μ‘΄μž¬ν•˜λŠ” μ„œλ²„λ“€κ³Ό μ—°κ²°ν•  λ•Œ 이λ₯Ό λŒ€μ‹  μ—°κ²°ν•˜μ—¬ μ‚¬μš©μžμ˜ IP μ£Όμ†Œλ₯Ό 숨겨 λ³΄μ•ˆμ„ κ°•ν™”ν•˜κ³  읡λͺ…성을 μ œκ³΅ν•˜λŠ” λ“±μ˜ 역할을 ν•œλ‹€.
이와 λ°˜λŒ€λ˜λŠ” λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ(Reverse Proxy)λŠ” μ„œλ²„ 츑에 μœ„μΉ˜ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ˜€λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμœΌλ‘œ μ„œλ²„ λ‚΄λΆ€ λ„€νŠΈμ›Œν¬ ꡬ쑰가 λ…ΈμΆœλ˜μ§€ μ•Šλ„λ‘ λŒ€λ¦¬λ‘œ μš”μ²­μ„ λ°›μ•„ μ²˜λ¦¬ν•œλ‹€.

λ‘œλ“œ λ°ΈλŸ°μ‹±

λŒ€μš©λŸ‰ νŠΈλž˜ν”½ 처리λ₯Ό μœ„ν•΄ 물리적 μ„œλ²„λ₯Ό μ—¬λŸ¬κ°œλ‘œ κ΅¬μ„±ν•œ 경우 νŠΉμ • μ„œλ²„μ— νŠΈλž˜ν”½μ΄ λͺ°λ¦¬μ§€ μ•Šλ„λ‘ ν•˜κΈ° μœ„ν•œ 별도 λ‘œμ§μ„ κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ nginxλ‚˜ apacheλ₯Ό 톡해 νŠΈλž˜ν”½μ„ λΆ„μ‚° μ‹œν‚¬ 수 μžˆλ‹€.
이λ₯Ό 톡해 WAS에 직접 μ—°κ²°ν•˜μ§€ μ•Šμ•„λ„ μˆ˜ν‰ ν™•μž₯이 μ‰¬μ›Œμ§€κ³  λ‹€μš΄λœ μ„œλ²„λ₯Ό μžλ™μœΌλ‘œ κ°μ§€ν•˜μ—¬ 관리할 μˆ˜λ„ μžˆλ‹€.

λ³΄μ•ˆ (Security Layer)

HTTPS(SSL/TLS) ν”„λ‘œν† μ½œ 싀행을 μ›Ήμ„œλ²„κ°€ λ‹΄λ‹Ήν•˜μ—¬ 이후 WASλŠ” HTTPS μ²˜λ¦¬μ— κ΄€μ—¬ν•˜μ§€ μ•Šλ„λ‘ ν•  수 μžˆλ‹€. λ˜ν•œ νŠΉμ • IP 차단, μš”μ²­ μ œν•œ(Rate Limiting), CORS μ œμ–΄ 등도 μ›Ήμ„œλ²„μ—μ„œ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ‹€.

μ„±λŠ₯ μ΅œμ ν™”

μš”μ²­μ„ Gzip으둜 μ••μΆ•ν•˜μ—¬ μ „μ†‘ν•˜κ±°λ‚˜ HTTP/2, Keep-Alive, Connection μž¬μ‚¬μš© 지원, 캐싱 등을 톡해 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μ§„ν–‰ν•  μˆ˜λ„ μžˆλ‹€.
λ‹€λ₯Έ κΈ°λŠ₯듀을 ν¬ν•¨ν•˜μ—¬ 결과적으둜 μ›Ήμ„œλ²„λŠ” WASκ°€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—λ§Œ μ§‘μ€‘ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” 보쑰 μž₯μΉ˜λ‘œμ„œμ˜ 역할을 ν•œλ‹€.

κ²°λ‘ 

정적 파일 μ„œλΉ™μ΄ μ›Ήμ„œλ²„μ˜ 졜초 μ—­ν• μ΄μ—ˆμœΌλ‚˜ 이후 κΈ°λŠ₯듀이 μΆ”κ°€λ˜λ©΄μ„œ μš”μ²­μ„ 관리, 보호, λΆ„λ°°ν•˜λŠ” 역할을 더 μ€‘μ μ μœΌλ‘œ ν•˜κ²Œ λ˜λ©΄μ„œ μ›Ήμ„œλ²„λŠ” μ—¬μ „νžˆ λ°±μ—”λ“œλ₯Ό κ΅¬μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨λ‘œμ„œ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ˜κ³  μžˆλ‹€. λ˜ν•œ μ›Ήμ„œλ²„λŠ” λ°±μ—”λ“œμ—μ„œλ§Œ μ‚¬μš©λ˜μ§€ μ•Šκ³  ν”„λ‘ νŠΈμ—”λ“œ μ„œλ²„μ—μ„œλ„ μ‚¬μš©λ˜λ©° μ •μ • μ½˜ν…μΈ  μ œκ³΅μ„ μœ„ν•œ κΈ°μ‘΄ μ—­ν•  μ—­μ‹œ μˆ˜ν–‰μ€‘μ΄λ‹€.
Β