πŸ“š HTTP μ™„λ²½κ°€μ΄λ“œ - 5μž₯. μ›Ή μ„œλ²„

BOOaΒ·2025λ…„ 4μ›” 30일

HTTP

λͺ©λ‘ 보기
5/6
post-thumbnail

πŸ“ 핡심 κ°œλ… μš”μ•½

  • μ›Ή μ„œλ²„λŠ” HTTP μš”μ²­μ„ λ°›μ•„ 응닡을 λŒλ €μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€.
  • 주된 역할은 λ¦¬μ†ŒμŠ€ 제곡, μš”μ²­ λΌμš°νŒ…, μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 연동 등이닀.
  • 정적 컨텐츠 제곡(HTML, CSS, JS, 이미지)κ³Ό 동적 컨텐츠 처리(API, μ„œλ²„ 둜직 μ‹€ν–‰) λͺ¨λ‘ κ°€λŠ₯ν•˜λ‹€.
  • λ³΄μ•ˆ, 인증, λ‘œκΉ…, 캐싱, μ••μΆ• 등을 톡해 μ›Ή 톡신을 μ΅œμ ν™”ν•˜κ³  κ΄€λ¦¬ν•œλ‹€.

✨ 포인트

  • 정적 λ¦¬μ†ŒμŠ€ 제곡 : ν”„λ‘ νŠΈμ—”λ“œ λΉŒλ“œ 결과물을 μ„œλΉ™ν•˜λŠ” κΈ°λ³Έ μ—­ν• 
  • MIME νƒ€μž… 관리 : μ„œλ²„κ°€ μ˜¬λ°”λ₯Έ Content-Type 을 μ„ΈνŒ…ν•΄μ•Ό λΈŒλΌμš°μ €κ°€ μ œλŒ€λ‘œ 해석 κ°€λŠ₯
  • 캐싱 μ œμ–΄ : Cache-Control, ETag λ₯Ό 톡해 정적 파일 μ—…λ°μ΄νŠΈ 관리
  • μ••μΆ• : μ„œλ²„κ°€ λ¦¬μ†ŒμŠ€λ₯Ό μ••μΆ•ν•΄ μ „λ‹¬ν•˜λ©΄ νŽ˜μ΄μ§€ λ‘œλ”© 속도 ν˜•μƒ
  • CORS 처리 : ν”„λ‘ νŠΈμ™€ λ°±μ—”λ“œ λΆ„λ¦¬λœ κ΅¬μ‘°μ—μ„œλŠ” CORS μ„€μ • ν•„μˆ˜ κ³ λ €
  • λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ‚¬μš© : Nginx λ“± ν”„λ‘μ‹œ μ„œλ²„λ₯Ό 톡해 API μ„œλ²„μ™€ ν”„λ‘ νŠΈμ—”λ“œ 앱을 μ—°κ²°
  • λ³΄μ•ˆ : λͺ¨λ“  톡신은 기본적으둜 HTTPS 적용이 ν•„μˆ˜
  • μ„œλ²„ 였λ₯˜ 핸듀링 : 404 ,500 μ—λŸ¬ 처리 νŽ˜μ΄μ§€ μ»€μŠ€ν„°λ§ˆμ΄μ§• ν•„μš”

βœ…γ…€μ›Ή μ„œλ²„μ˜ κΈ°λ³Έ λ™μž‘

  • HTTP μš”μ²­ μˆ˜μ‹  ➑️ μš”μ²­ 뢄석 ➑️ μ μ ˆν•œ 응닡 생성 ➑️ 전솑 νλ¦„μœΌλ‘œ λ™μž‘
  • λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•˜κ±°λ‚˜, 동적 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ— μš”μ²­μ„ λ„˜κ²¨ 처리 κ²°κ³Όλ₯Ό λ°›μ•„ μ „λ‹¬ν•œλ‹€.

βœ…γ…€μ •μ  컨텐츠와 동적 컨텐츠

λΉŒλ“œλœ React/Vue 앱은 정적 파일둜 μ„œλ²„κ°€ μ„œλΉ™ν•˜μ§€λ§Œ, API μš”μ²­μ€ λ™μ μœΌλ‘œ μ²˜λ¦¬λœλ‹€.

  • 정적 컨텐츠 : HTML, CSS, JS, 이미지 파일처럼 λ³€ν•˜μ§€ μ•ŠλŠ” λ¦¬μ†ŒμŠ€
  • 동적 컨텐츠 : μ„œλ²„ μΈ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μš”μ²­μ— 따라 κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄λ‚΄λŠ” λ¦¬μ†ŒμŠ€
ꡬ뢄웹 μ„œλ²„ (Web Server)WAS (Web Application Server)
μ£Όμš” 역할정적인 μ½˜ν…μΈ  제곡 (HTML, CSS, JS, 이미지 λ“±)동적인 둜직 처리 (λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, DB 연동 λ“±)
μ˜ˆμ‹œNginx, Apache HTTP ServerTomcat, JBoss, WebLogic, Jetty
처리 λŒ€μƒλΈŒλΌμš°μ € μš”μ²­ β†’ 정적 파일 μ‘λ‹΅λΈŒλΌμš°μ € μš”μ²­ β†’ λ‚΄λΆ€ 둜직 μ‹€ν–‰ β†’ 응닡 생성
μ‹€ν–‰ λ°©μ‹μš”μ²­λœ νŒŒμΌμ„ κ·ΈλŒ€λ‘œ μ „λ‹¬μžλ°” μ„œλΈ”λ¦Ώ, JSP, μŠ€ν”„λ§ 같은 λ‘œμ§μ„ μ‹€ν–‰
μš”μ²­ νλ¦„λΈŒλΌμš°μ € β†’ μ›Ή μ„œλ²„ β†’ 정적 μ‘λ‹΅λΈŒλΌμš°μ € β†’ μ›Ή μ„œλ²„ β†’ WAS β†’ 동적 응닡
μ–Έμ–΄ μ˜μ‘΄μ„±μ–Έμ–΄ λΉ„μ˜μ‘΄μ  (파일만 μ„œλΉ™)주둜 Java 기반 (Spring, JSP λ“±)
λ³΄ν†΅μ˜ ꡬ성웹 μ„œλ²„ + WAS μ‘°ν•©μœΌλ‘œ μ‚¬μš© (μ„±λŠ₯, λ³΄μ•ˆ, 뢄리 λͺ©μ )
  1. μ‚¬μš©μžκ°€ /index.html μš”μ²­
  • μ›Ή μ„œλ²„κ°€ 정적 νŒŒμΌμ„ λ°”λ‘œ 전달
  1. μ‚¬μš©μžκ°€ /user?id=1 μš”μ²­
  • μ›Ή μ„œλ²„κ°€ 동적 μš”μ²­μž„μ„ 인식
  • WAS(Spring λ“±)μ—κ²Œ μš”μ²­μ„ 전달
  • WASκ°€ DBμ—μ„œ μœ μ € 정보λ₯Ό 쑰회
  • WASκ°€ HTML을 생성해 μ›Ή μ„œλ²„μ— 전달
  • μ›Ή μ„œλ²„κ°€ μ΅œμ’… 응닡을 ν΄λΌμ΄μ–ΈνŠΈμ— 전달

βœ…γ…€MIME νƒ€μž…

  • μ„œλ²„λŠ” 각 λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μ˜¬λ°”λ₯Έ MIME νƒ€μž…μ„ μ„€μ •ν•΄μ•Ό ν•œλ‹€ ➑️ Content-Type 헀더
μ˜ˆμ‹œMIME νƒ€μž…
HTMLtext/html
CSStext/css
JavaScriptapplication/javascript
PNGimage/png

βœ…γ…€μ›Ή μ„œλ²„μ˜ μΆ”κ°€ κΈ°λŠ₯

  • 캐싱 μ œμ–΄ : Cache-Control , ETag 헀더 μ„€μ •
  • μ••μΆ• : gzip , Brotli 압좕을 톡해 파일 크기 쀄이기
  • λ³΄μ•ˆ : HTTPS 적용, HSTS μ„€μ •
  • 인증 : HTTP κΈ°λ³Έ 인증, 토큰 기반 인증 연동
  • λ‘œκΉ… 및 λͺ¨λ‹ˆν„°λ§ : μš”μ²­/응닡 기둝, 였λ₯˜ 좔적

Cache-Control: no-cache , Cache-Control: max-age=~ 같은 μ„€μ •μœΌλ‘œ 정적 파일 κ°±μ‹  μ£ΌκΈ° 쑰절


βœ…γ…€λ¦¬λ²„μŠ€ ν”„λ‘μ‹œ μ„œλ²„

ν”„λ‘ νŠΈ μ„œλ²„λ₯Ό /에, API μ„œλ²„λ₯Ό /api둜 μ—°κ²°ν•˜λŠ” 섀정이 κΈ°λ³Έ νŒ¨ν„΄μ΄λ‹€.

  • ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ λ°›μ•„ μ‹€μ œ μ„œλ²„λ‘œ μ „λ‹¬ν•˜λŠ” 쀑간 μ„œλ²„
  • Nginx , Apache κ°€ 많이 μ‚¬μš©λœλ‹€.
  • λ‘œλ“œ λ°ΈλŸ°μ‹±, HTTPS 쒅단, 정적 파일 μ„œλΉ™, API μ„œλ²„/ν”„λ‘ νŠΈ μ„œλ²„ 뢄리 μ—°κ²°

βœ…γ…€κ°€μƒ ν˜ΈμŠ€νŒ…

μŠ€ν…Œμ΄μ§• μ„œλ²„μ™€ 운영 μ„œλ²„λ₯Ό 같은 μ„œλ²„μ—μ„œ μš΄μ˜ν•  λ•Œ 유용

  • ν•˜λ‚˜μ˜ 물리적 μ„œλ²„μ—μ„œ μ—¬λŸ¬ 도메인을 μ„œλΉ„μŠ€ν•˜λŠ” 기술
  • IP μ£Όμ†Œ 곡유 λ°©μ‹μœΌλ‘œ λ™μž‘

βœ…γ…€μ„œλ²„ 였λ₯˜ 처리

  • 4xx, 5xx μ—λŸ¬λ₯Ό μ„œλ²„κ°€ κ°μ§€ν•˜κ³  μ μ ˆν•œ μ—λŸ¬ νŽ˜μ΄μ§€λ₯Ό μ‘λ‹΅ν•œλ‹€.
  • μ»€μŠ€ν…€ μ—λŸ¬ νŽ˜μ΄μ§€λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.

λΈŒλΌμš°μ €μ—μ„œ μ»€μŠ€ν…€ 404 νŽ˜μ΄μ§€λ₯Ό λ„μš°κ±°λ‚˜ SPA μ•±μ—μ„œλŠ” history fallback μ²˜λ¦¬κ°€ ν•„μš”

πŸ”Žγ…€History Fallback

SPAμ—μ„œλŠ” μ£Όμ†Œμ°½μ— μ–΄λ–€ 경둜λ₯Ό μž…λ ₯해도 μ„œλ²„κ°€ 항상 index.html 을 μ‘λ‹΅ν•˜μ—¬, ν΄λΌμ΄μ–ΈνŠΈ λΌμš°ν„°κ°€ 화면을 μ•Œμ•„μ„œ μ „ν™˜ν•˜λ„λ‘ λ§Œλ“œλŠ” μ„€μ •

  • SPAλŠ” ν•˜λ‚˜μ˜ index.html 둜 λͺ¨λ“  νŽ˜μ΄μ§€λ₯Ό μ²˜λ¦¬ν•œλ‹€.
  • μ‹€μ œλ‘œ /about ,/profile 같은 κ²½λ‘œμ— 별도 파일이 μ—†λ‹€.
  • λΈŒλΌμš°μ € μ£Όμ†Œμ°½μ— 직접 경둜λ₯Ό μž…λ ₯ν•˜λ©΄ μ„œλ²„κ°€ ν•΄λ‹Ή νŒŒμΌμ„ 찾으렀고 ν•œλ‹€ ➑️ 파일 ❌ = 404 μ—λŸ¬
  • 이λ₯Ό 막기 μœ„ν•΄ μ„œλ²„κ°€ 항상 index.html 을 λ°˜ν™˜ν•˜λ„λ‘ μ„€μ •ν•œλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ λΌμš°ν„°κ°€ URL을 해석해 μ•Œλ§žμ€ 화면을 λ Œλ”λ§ν•œλ‹€.

βœ…γ…€λ¦¬λ‹€μ΄λ ‰μ…˜

  • μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ "λ‹€λ₯Έ URL둜 가라"κ³  μ•Œλ €μ£ΌλŠ” 것
  • μ„œλ²„ 응닡 μ½”λ“œ 3xx 둜 λ™μž‘ν•œλ‹€.
  • λ¦¬λ‹€μ΄λ ‰μ…˜ 섀정이 잘λͺ»λ˜λ©΄ λ¬΄ν•œλ£¨ν”„, SEO 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆλ‹€.
λŒ€ν‘œμ μΈ μ˜ˆμ‹œν›„
HTTPHTTPS μžλ™ μ „ν™˜
example.comwww.example.com
/old-path/new-paath

βœ…γ…€λ³΄μ•ˆ (SSL/TLS)

  • HTTPS 연결을 μœ„ν•΄ μ„œλ²„μ— μΈμ¦μ„œλ₯Ό μ„€μΉ˜ν•œλ‹€. ➑️ SSL/TLS
  • ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ κ°„ 데이터 μ•”ν˜Έν™”λ₯Ό 보μž₯ν•œλ‹€.

βœ…γ…€λΆ€ν•˜ λΆ„μ‚° (λ‘œλ“œ λ°ΈλŸ°μ‹±)

  • μ—¬λŸ¬ λŒ€μ˜ μ„œλ²„μ— νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œμΌœ μ„±λŠ₯κ³Ό μ•ˆμ •μ„±μ„ 높인닀.

ν”„λ‘ νŠΈμ—μ„œ 가끔 "ν•œ 번 λ‘œκ·ΈμΈν–ˆλŠ”λ°, λ‹€λ₯Έ μ„œλ²„μ—μ„œλŠ” λ‘œκ·Έμ•„μ›ƒ μƒνƒœ" 와 같은 λ¬Έμ œκ°€ 생길 수 μžˆλ‹€. μ΄λ•Œ, μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ 방법이 μ€‘μš”ν•˜λ‹€.


βœ…γ…€λ‘œκΉ…

  • μ„œλ²„λŠ” μš”μ²­κ³Ό 응닡에 λŒ€ν•œ 둜그λ₯Ό 남긴닀.
  • μš”μ²­ μ‹œκ°„, μš”μ²­ IPμ£Όμ†Œ, μš”μ²­ URL, 응닡 μƒνƒœ μ½”λ“œ, 응닡 μ‹œκ°„
  • λ‘œκΉ…μ€ 문제 뢄석, ν•΄ν‚Ή 탐지, μ‚¬μš©λŸ‰ 뢄석 등에 ν•„μˆ˜μ μ΄λ‹€.

0개의 λŒ“κΈ€