LUCATHREE.COM

← Back to list
🧐 TIL

[λ°±μ—”λ“œ κΈ°λ³Έ κ°œλ… 정리] HTTP

μž‘μ„±μΌ:
TILTerms

HTTP

Hypertext Transfer Protocol(HTTP) 은 μ›ΉνŽ˜μ΄μ§€λ₯Ό λ‘œλ“œν•˜κΈ° μœ„ν•΄ ν•˜μ΄νΌλ§ν¬λ₯Ό μ‚¬μš©ν•˜λŠ” μ›”λ“œ μ™€μ΄λ“œ μ›Ή(WWW)의 기초 ν”„λ‘œν† μ½œμ΄λ‹€. λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ κΈ°κΈ°λ“€ κ°„ 정보λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•΄ μ„€κ³„λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측(application layer) ν”„λ‘œν† μ½œμ΄λ©°, 일반적으둜 ν΄λΌμ΄μ–ΈνŠΈ μž₯치(예: μ›Ή λΈŒλΌμš°μ €)κ°€ μ„œλ²„μ— μš”μ²­(request)을 보내면, μ„œλ²„κ°€ 응닡(response) λ©”μ‹œμ§€λ₯Ό λŒλ €μ£ΌλŠ” 흐름이 HTTP의 기본적인 μž‘λ™ 방식이닀.

λ§Œλ“€μ–΄μ§„ 계기 β€” WWW

1989λ…„, νŒ€ λ²„λ„ˆμŠ€ 리가 CERNμ—μ„œ μ—°κ΅¬μžλ“€μ΄ 정보λ₯Ό μ‰½κ²Œ κ³΅μœ ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ λ¬Έμ„œλ‚˜ λ¦¬μ†ŒμŠ€λ‘œ μ¦‰μ‹œ 이동할 수 μžˆλŠ” 링크(μ—°κ²°) λ₯Ό ν¬ν•¨ν•œ ν…μŠ€νŠΈμΈ ν•˜μ΄νΌν…μŠ€νŠΈλ₯Ό 기반으둜 ν•˜λŠ” μ‹œμŠ€ν…œμ„ μ œμ•ˆν•œλ‹€. (ν•˜μ΄νΌν…μŠ€νŠΈλŠ” 1965년에 ν…Œλ“œ λ„¬μŠ¨μ— μ˜ν•΄ 처음 μ •μ˜)
이 μ‹œμŠ€ν…œμ„ λ§Œλ“€κΈ° μœ„ν•΄ ν•˜μ΄νΌν…μŠ€νŠΈ λ¬Έμ„œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ λ§ˆν¬μ—… 언어인 Hypertext Markup Language, HTMLκ³Ό μž‘μ„±λœ ν•˜μ΄νΌν…μŠ€νŠΈ λ¬Έμ„œλ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•œ ν”„λ‘œν† μ½œλ‘œ HTTPλ₯Ό λ§Œλ“€κ²Œ λœλ‹€. 그리고 HTML λ¬Έμ„œλ₯Ό ν•΄μ„ν•˜μ—¬ μ‚¬μš©μžκ°€ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ ν˜•νƒœλ‘œ λ³€ν™˜ν•˜μ—¬ λ³΄μ—¬μ£ΌλŠ” ν”„λ‘œκ·Έλž¨μΈ μ›Ή λΈŒλΌμš°μ €κ°€ 더해져 μ›”λ“œ μ™€μ΄λ“œ μ›Ή(World Wide Web, WWW)이 νƒ„μƒν•˜κ²Œ λœλ‹€.
μ›”λ“œ μ™€μ΄λ“œ μ›Ήκ³Ό 인터넷이 같은 κ²ƒμœΌλ‘œ ν˜Όλ™λ˜κΈ°λ„ ν•˜μ§€λ§Œ μ •ν™•νžˆ 인터넷은 μ „ 세계 컴퓨터와 μž₯치λ₯Ό μ—°κ²°ν•˜λŠ” λ„€νŠΈμ›Œν¬ 인프라이고 이 μœ„μ—μ„œ μ„œλΉ„μŠ€λ‘œμ„œ λ™μž‘ν•˜λŠ” 정보 곡유 μ‹œμŠ€ν…œμ΄ μ›”λ“œ μ™€μ΄λ“œ 웹이닀.

HTTP μš”μ²­(Request)의 ꡬ성 μš”μ†Œ

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ή μ‚¬μ΄νŠΈλ₯Ό λ‘œλ“œν•  λ•Œ λ³΄λ‚΄λŠ” HTTP μš”μ²­μ—λŠ” 일반적으둜 λ‹€μŒκ³Ό 같은 μš”μ†Œλ“€μ΄ ν¬ν•¨λœλ‹€:
  1. HTTP 버전: HTTP/1.0, HTTP/1.1, HTTP/2, HTTP/3 λ“±. 각 λ²„μ „λ§ˆλ‹€ κΈ°λŠ₯ 및 퍼포먼슀, μ—°κ²° μœ μ§€(persistent connection) λ“±μ˜ 관리 방식에 차이가 μ‘΄μž¬ν•œλ‹€.
  1. URL: μ–΄λ–€ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ”μ§€ λ‚˜νƒ€λ‚Έλ‹€.
  1. HTTP λ©”μ†Œλ“œ(Method): μš”μ²­μ΄ μ„œλ²„μ— μ–΄λ–€ λ™μž‘μ„ κΈ°λŒ€ν•˜λŠ”μ§€λ₯Ό λͺ…μ‹œν•œλ‹€. μ£Όμš” λ©”μ†Œλ“œλ‘œ 정보λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•œ GET, 정보 μ œμΆœμ„ μœ„ν•œ POST, 정보 ꡐ체λ₯Ό μœ„ν•œ PUT, 정보 μΌλΆ€μ˜ μˆ˜μ •μ„ μœ„ν•œ PATCH, 정보 μ‚­μ œλ₯Ό μœ„ν•œ DELETE κ°€ 있으며, κ·Έ 밖에도 HEAD, OPTIONS, TRACE, CONNECT 등이 μžˆλ‹€.
  1. μš”μ²­ 헀더(Request Headers): ν΄λΌμ΄μ–ΈνŠΈκ°€ λ³΄λ‚΄λŠ” λΆ€κ°€ μ •λ³΄λ“€λ‘œ, 예λ₯Ό λ“€λ©΄ μ–΄λ–€ λΈŒλΌμš°μ €λ₯Ό μ“°λŠ”μ§€, μ–΄λ–€ νƒ€μž…μ˜ μ½˜ν…μΈ λ₯Ό κΈ°λŒ€ν•˜λŠ”μ§€, 인증 정보 등이 ν¬ν•¨λœλ‹€.
  1. μš”μ²­ λ³Έλ¬Έ(Request Body): μ„ νƒμ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” μš”μ†Œλ‘œ 폼 데이터, 둜그인 정보, JSON λ˜λŠ” 기타 포맷의 데이터 등이 ν¬ν•¨λœλ‹€.

HTTP 응닡(Response)의 ꡬ성 μš”μ†Œ

μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— λŒ€ν•΄ 응닡을 돌렀주게 λ˜λŠ”λ°, μ‘λ‹΅μ—λŠ” 보톡 λ‹€μŒ μš”μ†Œλ“€μ΄ ν¬ν•¨λœλ‹€:
  1. HTTP μƒνƒœ μ½”λ“œ(Status Code): μš”μ²­μ΄ μ„±κ³΅ν–ˆλŠ”μ§€, λ¦¬λ‹€μ΄λ ‰μ…˜μΈμ§€, ν΄λΌμ΄μ–ΈνŠΈ ν˜Ήμ€ μ„œλ²„ μͺ½ 였λ₯˜μΈμ§€ 등을 λ‚˜νƒ€λ‚΄λŠ” μ„Έ 자리 숫자 μ½”λ“œ.
      • 2xx : 성곡
      • 3xx : λ¦¬λ‹€μ΄λ ‰μ…˜
      • 4xx : ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜
      • 5xx : μ„œλ²„ 였λ₯˜
  1. 응닡 헀더(Response Headers): μ‘λ‹΅μ˜ 메타 λ°μ΄ν„°λ‘œ 컨텐츠 νƒ€μž…, 인코딩, μΊμ‹œ μ œμ–΄, μΏ ν‚€ λ“±μ˜ 정보가 포함될 수 μžˆλ‹€.
  1. 응닡 λ³Έλ¬Έ(Response Body): μš”μ²­κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ HTML, JSON, 이미지, 파일 λ“± ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ— 따라 μ½˜ν…μΈ κ°€ μ„ νƒμ μœΌλ‘œ ν¬ν•¨λœλ‹€.

HTTP 버전 별 정리

1. HTTP/0.9 (1991)

β€” λ‹¨μˆœν–ˆλ˜ 졜초 버전
  • ν…μŠ€νŠΈλ§Œ 전솑 κ°€λŠ₯
  • λ©”μ†Œλ“œλŠ” GET만 지원
  • μƒνƒœ μ½”λ“œλ„ μ—†κ³ , 헀더도 없이 κ·Έλƒ₯ HTML λ¬Έμ„œλ§Œ 전달

2. HTTP/1.0 (1996)

β€” 첫 ν‘œμ€€μ΄ 된 버전
  • 헀더와 μƒνƒœ μ½”λ“œ λ„μž…
  • λ©”μ†Œλ“œ μΆ”κ°€: POST, HEAD
  • 연결은 μš”μ²­λ§ˆλ‹€ λŠμ–΄μ§ (λΉ„μ—°κ²°μ„±)
  • 단점: λ§€ μš”μ²­λ§ˆλ‹€ TCP 연결을 μƒˆλ‘œ λ§Œλ“€κΈ° λ•Œλ¬Έμ— μ„±λŠ₯이 떨어짐

3. HTTP/1.1 (1997)

β€” ν˜„μž¬κΉŒμ§€λ„ μ‚¬μš©μ€‘μΈ κ°€μž₯ 였래 쓰이고 μžˆλŠ” 버전
  • Persistent Connection(Keep-Alive)을 톡해 TCP μ—°κ²° μœ μ§€ 및 μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•΄μ Έ μ„±λŠ₯이 ν–₯상됨
  • Host 헀더 ν•„μˆ˜ν™” β†’ ν•˜λ‚˜μ˜ μ„œλ²„μ—μ„œ μ—¬λŸ¬ 도메인 ν˜ΈμŠ€νŒ… κ°€λŠ₯ (가상 ν˜ΈμŠ€νŒ…)
  • λ©”μ†Œλ“œ μΆ”κ°€: PUT, PATCH, OPTIONS, DELETE
  • Chunked Transfer Encoding β†’ 슀트리밍 지원

4. HTTP/2 (2015)

β€” μ„±λŠ₯ κ°œμ„ μ— μ΄ˆμ μ„ 두고 κ°œλ°œν•˜μ—¬ νŽ˜μ΄μ§€ λ‘œλ”© 속도가 빨라짐
  • λ°”μ΄λ„ˆλ¦¬ ν”„λ‘œν† μ½œ β†’ 더 효율적인 νŒŒμ‹±
  • λ©€ν‹°ν”Œλ ‰μ‹±(Multiplexing) β†’ ν•˜λ‚˜μ˜ TCP μ—°κ²°μ—μ„œ μ—¬λŸ¬ μš”μ²­/응닡 λ™μ‹œ 전솑
  • 헀더 μ••μΆ•(HPACK) β†’ λŒ€μ—­ν­ μ ˆμ•½
  • μ„œλ²„ ν‘Έμ‹œ(Server Push) 지원 β†’ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•˜κΈ° 전에 ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό λ³΄λ‚΄μ€Œ
  • λŒ€ν‘œμ μœΌλ‘œ κ³ μ„±λŠ₯ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 톡신을 μœ„ν•΄ 개발된 gRPCκ°€ HTTP/2λ₯Ό 기반으둜 함

5. HTTP/3 (2022)

β€” TCP λŒ€μ‹  QUIC(Quick UDP Internet Connections)λΌλŠ” UDP 기반 전솑 계측을 μ‚¬μš©ν•˜μ—¬ 더 λΉ λ₯΄κ³  μ•ˆμ •μ„±μ„ 좔ꡬ
  • TCP ν•Έλ“œμ…°μ΄ν¬ 문제 ν•΄κ²° β†’ μ—°κ²° 섀정이 더 빠름
  • νŒ¨ν‚· 손싀 μ‹œ 병λͺ© κ°μ†Œ β†’ λΉ„λ””μ˜€ 슀트리밍, κ²Œμž„ λ“± μ‹€μ‹œκ°„ μ„œλΉ„μŠ€μ— 유리
  • 기본적으둜 μ•”ν˜Έν™”(TLS 1.3) λ‚΄μž₯

HTTPS

HyperText Transfer Protocol Secure의 μ•½μžλ‘œ κΈ°μ‘΄ HTTP에 SSL/TLS ν”„λ‘œν† μ½œμ„ κ²°ν•©ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•œ ν”„λ‘œν† μ½œ.
κΈ°μ‘΄ HTTPλŠ” λͺ¨λ“  μš”μ²­κ³Ό 응닡이 평문(Plain Text) 으둜 μ „μ†‘λ˜κΈ° λ•Œλ¬Έμ— 데이터 전솑 κ³Όμ •μ—μ„œ λΉ„λ°€λ²ˆν˜Έ 같은 μ€‘μš” 정보가 κ·ΈλŒ€λ‘œ λ…ΈμΆœλœ μƒνƒœλ‘œ λ„€νŠΈμ›Œν¬μ— ν˜λŸ¬κ°€λ©° νŒ¨ν‚· μŠ€λ‹ˆν•‘(Packet Sniffing), μ€‘κ°„μž 곡격(MITM) 같은 곡격을 톡해 쀑간에 μš”μ²­μ„ κ°€λ‘œμ±„μ„œ 확인이 κ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ HTTP에 λ³΄μ•ˆ λ ˆμ΄μ–΄λ₯Ό μΆ”κ°€ν•œ HTTPSκ°€ μƒκ²ΌμœΌλ©° μ΄μ œλŠ” 선택지가 μ•„λ‹Œ 기본이 된 μˆ˜μ€€μ΄λ‹€.

HTTPSκ°€ ν•΄κ²°ν•˜λŠ” 문제

  1. 데이터 μ•”ν˜Έν™” (Encryption): λͺ¨λ“  μš”μ²­/응닡이 μ•”ν˜Έν™”λ˜μ–΄ μ€‘κ°„μ—μ„œ λˆ„κ°€ νŒ¨ν‚·μ„ κ°€λ‘œμ±„λ„ 해독할 수 μ—†λ‹€.
  1. 인증 (Authentication): μΈμ¦μ„œ(Certificate)λ₯Ό 톡해 μ„œλ²„κ°€ 믿을 수 μžˆλŠ” μ„œλ²„μΈμ§€ 확인할 수 μžˆλ‹€.
  1. 무결성 (Integrity): 데이터가 전솑 쀑에 λ³€μ‘°λ˜μ§€ μ•Šμ•˜λŠ”μ§€λ₯Ό 보μž₯ν•˜μ—¬ μ½”λ“œλ₯Ό λͺ°λž˜ λΌμ›Œ λ„£κ±°λ‚˜, νŒŒμΌμ„ λ³€μ‘°ν•΄μ„œ μ•…μ„±μ½”λ“œλ₯Ό μ‹¬λŠ” 것을 방지함.
이 외에도 HTTPS μ‚¬μš©μ‹œ SEO μš°λŒ€λ₯Ό ν†΅ν•œ 이점이 있고 HTTP/2, HTTP/3을 μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ μš”κ±΄μœΌλ‘œ μ „μ œλœλ‹€.