Home > Network > 2024 > 🌐[Network] HTTP ν”„λ‘œν† μ½œμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

🌐[Network] HTTP ν”„λ‘œν† μ½œμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
Network

🌐[Network] HTTP ν”„λ‘œν† μ½œμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • HTTP(ν•˜μ΄νΌν…μŠ€νŠΈ 전솑 ν”„λ‘œν† μ½œ, HyperText Transfer Protocol)λŠ” μ›Ήμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 데이터λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•œ κ·œμ•½μž…λ‹ˆλ‹€.
  • μΈν„°λ„·μ—μ„œ μ›Ή νŽ˜μ΄μ§€, 이미지, λ™μ˜μƒ λ“± λ‹€μ–‘ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ „μ†‘ν•˜λŠ” ν‘œμ€€ 톡신 ν”„λ‘œν† μ½œλ‘œ, μ›Ή λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ κ°„μ˜ 톡신에 μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ ν”„λ‘œν† μ½œ(Protocol)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

1️⃣ HTTP의 κΈ°λ³Έ κ°œλ….

1️⃣ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ λͺ¨λΈ.

  • HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ μš”μ²­-응닡 λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.
    • μ›Ή λΈŒλΌμš°μ € 같은 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ 보내면, μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό μ‘λ‹΅μœΌλ‘œ λŒλ €μ€λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ : μ›Ή λΈŒλΌμš°μ €, λͺ¨λ°”일 μ•± λ“± μ‚¬μš©μž μΈ‘μ—μ„œ μš”μ²­μ„ λ³΄λ‚΄λŠ” μͺ½μž…λ‹ˆλ‹€.
  • μ„œλ²„ : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  응닡을 λ³΄λ‚΄λŠ” μͺ½μœΌλ‘œ, μ›Ή μ„œλ²„λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„κ°€ λŒ€ν‘œμ μž…λ‹ˆλ‹€.

2️⃣ λ¬΄μƒνƒœμ„±(Stateless).

  • HTTPλŠ” λ¬΄μƒνƒœμ„± ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.
    • 즉, 각 μš”μ²­μ€ 독립적이며, 이전 μš”μ²­μ΄λ‚˜ 응닡에 μ˜μ‘΄ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
      • μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•  λ•Œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό κΈ°μ–΅ν•˜μ§€ μ•ŠμœΌλ©°, λͺ¨λ“  μš”μ²­μ€ μƒˆλ‘œμš΄ κ²ƒμ²˜λŸΌ μ²˜λ¦¬λ©λ‹ˆλ‹€.
  • 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄, μΏ ν‚€λ‚˜ μ„Έμ…˜μ„ 톡해 ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 방법이 μ‚¬μš©λ˜κΈ°λ„ ν•©λ‹ˆλ‹€.

3️⃣ URI(Uniform Resource Identifier)

  • HTTPλŠ” URI(톡합 지원 μ‹λ³„μž)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ήμ—μ„œ νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.
    • μΌλ°˜μ μœΌλ‘œλŠ” URIλŠ” μ›Ή μ£Όμ†Œ(λ˜λŠ” URL)둜 ν‘œν˜„λ˜λ©°, μ„œλ²„μ—μ„œ μ›ν•˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  • 예: https://www.example.com/index.html
    • https:// : HTTP ν”„λ‘œν† μ½œ(HTTPS)
    • www.example.com : μ„œλ²„ 도메인 이름
    • /index.html : μ„œλ²„ λ‚΄μ—μ„œ μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ˜ 경둜

4️⃣ HTTP λ©”μ„œλ“œ(HTTP Methods)

  • HTTPλŠ” λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μš”μ²­μ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • λ©”μ„œλ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μ–΄λ–€ μž‘μ—…μ„ μš”μ²­ν•˜λŠ”μ§€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  • μ£Όμš” HTTP λ©”μ„œλ“œ
    • GET : λ¦¬μ†ŒμŠ€λ₯Ό μ‘°νšŒν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.(데이터λ₯Ό μ„œλ²„μ—μ„œ κ°€μ Έμ˜΄)
    • POST : μ„œλ²„μ— μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • PUT : μ„œλ²„μ˜ κΈ°μ‘΄ λ¦¬μ†ŒμŠ€λ₯Ό μˆ˜μ •ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • DELETE : μ„œλ²„μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œ ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • HEAD : GET μš”μ²­κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ, 응닡 λ³Έλ¬Έ 없이 ν—€λ”λ§Œμ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

5️⃣ HTTP μƒνƒœ μ½”λ“œ(HTTP Status Codes)

  • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•΄ μƒνƒœ μ½”λ“œλ₯Ό 톡해 μ‘λ‹΅μ˜ κ²°κ³Όλ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
    • μƒνƒœ μ½”λ“œλŠ” μš”μ²­μ΄ μ„±κ³΅ν–ˆλŠ”μ§€, μ‹€νŒ¨ν–ˆλŠ”μ§€, λ˜λŠ” μ–΄λ–€ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜μ—¬, 3자리 숫자둜 κ΅¬μ„±λ©λ‹ˆλ‹€.
  • μ£Όμš” μƒνƒœ μ½”λ“œ
    • 200 OK : μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ 처리됨.
    • 201 Created : λ¦¬μ†ŒμŠ€κ°€ μ„±κ³΅μ μœΌλ‘œ 생성됨.
    • 400 Bad Request : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ 잘λͺ»λ¨.
    • 401 Unauthorized : 인증이 ν•„μš”ν•¨.
    • 403 Forbidden : κΆŒν•œμ΄ μ—†μ–΄μ„œ μš”μ²­μ΄ 거뢀됨.
    • 404 Not Found : μš”μ²­ν•œ λ¦¬μ†ŒμŠ€λ₯Ό 찾을 수 μ—†μŒ.
    • 500 Internal Server Error : μ„œλ²„ λ‚΄λΆ€ 였λ₯˜κ°€ λ°œμƒν•¨.

6️⃣ 헀더(Headers)

  • HTTP μš”μ²­κ³Ό μ‘λ‹΅μ—λŠ” 헀더가 ν¬ν•¨λ©λ‹ˆλ‹€.
    • ν—€λ”λŠ” μš”μ²­μ΄λ‚˜ 응닡에 λŒ€ν•œ λΆ€κ°€ 정보λ₯Ό λ‹΄κ³  있으며, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 톡신 방식을 μ œμ–΄ν•©λ‹ˆλ‹€.
  • μ£Όμš” 헀더 예
    • Content-Type : μš”μ²­ λ˜λŠ” 응닡 본문의 데이터 ν˜•μ‹μ„ μ§€μ •ν•©λ‹ˆλ‹€.
      • 예: application/json, text/html
    • User-Agent : ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(예: λΈŒλΌμš°μ €)의 정보λ₯Ό μ„œλ²„μ— μ „λ‹¬ν•©λ‹ˆλ‹€.
    • Authorization : 인증에 ν•„μš”ν•œ 정보(토큰 λ“±)λ₯Ό ν¬ν•¨ν•˜μ—¬ μ„œλ²„μ— μ „λ‹¬ν•©λ‹ˆλ‹€.

7️⃣ HTTP 버전.

  • HTTPλŠ” μ—¬λŸ¬ 버전이 μ‘΄μž¬ν•˜λ©°, 각 버전은 μ„±λŠ₯ 및 κΈ°λŠ₯을 κ°œμ„ ν•΄μ™”μŠ΅λ‹ˆλ‹€.
    • HTTP/1.0 : 기본적인 κΈ°λŠ₯만 μ œκ³΅ν•˜λ©°, ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μš”μ²­λ§Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • HTTP/1.1 : μ—°κ²° μž¬μ‚¬μš©(Persistent Connection)을 μ§€μ›ν•˜μ—¬ μ—¬λŸ¬ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • μ—¬μ „νžˆ μ›Ήμ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” λ²„μ „μž…λ‹ˆλ‹€.
    • HTTP/2 : μ„±λŠ₯ ν–₯상을 μœ„ν•΄ μš”μ²­κ³Ό 응닡을 λ‹€μ€‘ν™”ν•˜μ—¬, λ™μ‹œμ— μ—¬λŸ¬ μš”μ²­μ„ 보내고 받을 수 있게 μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
      • μ›Ή νŽ˜μ΄μ§€ λ‘œλ”© 속도λ₯Ό 크게 κ°œμ„ ν•©λ‹ˆλ‹€.
    • HTTP/3 : μ΅œμ‹  λ²„μ „μœΌλ‘œ, QUIC ν”„λ‘œν† μ½œμ„ 기반으둜 ν•˜μ—¬ μ„±λŠ₯κ³Ό λ³΄μ•ˆμ„±μ„ 크게 κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ“ QUIC(Quick UDP Internet Connections) ν”„λ‘œν† μ½œ.

QUIC(Quick UDP Internet Connections)λŠ” ꡬ글이 κ°œλ°œν•œ 인터넷 전솑 계측 ν”„λ‘œν† μ½œλ‘œ, TCP와 같은 μ‹ λ’°μ„±μžˆλŠ” 데이터 전솑을 μ œκ³΅ν•˜λ©΄μ„œλ„ UDP(User Datagram Protocol)λ₯Ό 기반으둜 ν•˜μ—¬ 더 λΉ λ₯Έ μ—°κ²° 수립과 더 λ‚˜μ€ μ„±λŠ₯을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.

HTTP/3λŠ” QUIC μœ„μ—μ„œ λ™μž‘ν•˜λ©°, μ›Ήμ—μ„œμ˜ 저지연과 μ•ˆμ •μ„±μ„ κ°œμ„ ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

2️⃣ HTTP 톡신 κ³Όμ •.

  • HTTP 톡신 과정은 ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­(Request)을 보내고, μ„œλ²„κ°€ 응닡(Response)을 λ°˜ν™˜ν•˜λŠ” μš”μ²­-응닡 λͺ¨λΈλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

1️⃣ ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­.

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λ©΄, HTTP μš”μ²­μ„ μ„œλ²„λ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.
    • μš”μ²­μ€ λ‹€μŒκ³Ό 같은 ꡬ성 μš”μ†Œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
      • μš”μ²­ λ©”μ„œλ“œ(예: GET, POST)
      • URI(예: /index.html)
      • 헀더(예: Content-Type, User-Agent)
      • λ³Έλ¬Έ(POST μš”μ²­μΌ 경우 데이터가 포함될 수 있음)

πŸ‘‰ μ˜ˆμ‹œ: GET μš”μ²­.

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0

2️⃣ μ„œλ²„ 응닡.

  • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ²˜λ¦¬ν•œ ν›„, HTTP 응닡을 ν΄λΌμ΄μ–ΈνŠΈμ— λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • 응닡은 λ‹€μŒκ³Ό 같은 ꡬ성 μš”μ†Œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
      • μƒνƒœ μ½”λ“œ (예: 200 OK, 404 Not Found)
      • 헀더 (예: Content-Type, Cache-Control)
      • λ³Έλ¬Έ (예: HTML, JSON 데이터)

πŸ‘‰ μ˜ˆμ‹œ: 200 OK 응닡.

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1354

<html>
<head><title>Example</title></head>
<body>...</body>
</html>

3️⃣ HTTP의 μ£Όμš” νŠΉμ§•.

1️⃣ 간단함.

  • HTTPλŠ” ν…μŠ€νŠΈ 기반 ν”„λ‘œν† μ½œλ‘œ, μ‚¬λžŒμ΄ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ λ°©μ‹μœΌλ‘œ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • 각 μš”μ²­κ³Ό 응닡은 λͺ…ν™•ν•œ ꡬ쑰둜 λ˜μ–΄ μžˆμ–΄, μ‰½κ²Œ 해석할 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ ν™•μž₯μ„±.

  • HTTPλŠ” ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.
    • 헀더λ₯Ό ν†΅ν•œ λ‹€μ–‘ν•œ 정보(인증 정보, 캐싱 정보, 데이터 ν˜•μ‹ λ“±)λ₯Ό 전솑할 수 있으며, μƒˆλ‘œμš΄ κΈ°λŠ₯도 μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μœ μ—°μ„±.

  • HTTPλŠ” λ‹€μ–‘ν•œ 데이터 ν˜•μ‹μ„ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • ν…μŠ€νŠΈ, 이미지, λ™μ˜μƒ λ“± λ‹€μ–‘ν•œ μ½˜ν…μΈ  νƒ€μž…μ„ μ§€μ›ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ 이λ₯Ό κ΅ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ λ¬΄μƒνƒœμ„±.

  • 각 HTTP μš”μ²­μ€ λ…λ¦½μ μœΌλ‘œ 처리되며, μ„œλ²„λŠ” μš”μ²­ 간에 μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 μ„œλ²„λŠ” ν™•μž₯μ„±κ³Ό λ‹¨μˆœμ„±μ„ μœ μ§€ν•  수 μžˆμ§€λ§Œ, μΏ ν‚€λ‚˜ μ„Έμ…˜μ„ 톡해 μƒνƒœ μœ μ§€λ₯Ό 보완할 수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ HTTP와 HTTPS의 차이

  • HTTPS(HyperText Transfer Protocol Secure)λŠ” HTTP에 λ³΄μ•ˆ 계측(SSL/TLS)이 μΆ”κ°€λœ λ²„μ „μž…λ‹ˆλ‹€.
    • HTTPSλŠ” 데이터λ₯Ό μ•”ν˜Έν™”ν•˜μ—¬ μ „μ†‘ν•˜λ―€λ‘œ, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 톡신을 λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • 이λ₯Ό 톡해 데이터가 제 3μžμ— μ˜ν•΄ 도청, λ³€μ‘°, μœ„μ‘°λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€.

πŸ‘‰ μ£Όμš” 차이점.

  • HTTP : 데이터λ₯Ό μ•”ν˜Έν™”ν•˜μ§€ μ•Šκ³  ν‰λ¬ΈμœΌλ‘œ 전솑.
  • HTTPS : SSL/TLSλ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ•”ν˜Έν™”ν•΄ 전솑.

5️⃣ κ²°λ‘ .

  • HTTPλŠ” μ›Ήμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 데이터λ₯Ό μ£Όκ³ λ°›λŠ” 데 μ‚¬μš©λ˜λŠ” 핡심적인 톡신 ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.
  • μš”μ²­-응닡 λͺ¨λΈμ„ 기반으둜 ν•˜λ©°, λ¦¬μ†ŒμŠ€ μ ‘κ·Ό, 데이터 전솑, μ›Ή νŽ˜μ΄μ§€ λ‘œλ”© 등에 μ‚¬μš©λ©λ‹ˆλ‹€.
  • HTTPλŠ” κ°„λ‹¨ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜λ©°, ν˜„λŒ€ μ›Ήμ˜ κΈ°λ°˜μ„ μ΄λ£¨λŠ” μ€‘μš”ν•œ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.