STUDYπŸ„

[HTTP] 3. HTTP κΈ°λ³Έ

쏴리쏭 2025. 2. 28. 22:42

μ•ˆλ…•ν•˜μ„Έμš”!

또 μΈν”„λŸ° κΉ€μ˜ν•œ κ°•μ‚¬λ‹˜ κ°•μ˜λ₯Ό 보고 μ™”μ–΄μš”~~

정리 μ‹œμž‘ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

κ³ κ³ !!


1. HTTP에 κ΄€ν•˜μ—¬..

HyperText Transfer Protocol

HTTP λ©”μ‹œμ§€μ—λŠ” λͺ¨λ“  것을 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.

HTML, TEXT, IMAGE, μŒμ„±, μ˜μƒ, 파일, JSON (API), XML (API) λ“± 거의 λͺ¨λ“  ν˜•νƒœμ˜ 데이터 말이죠!

μ„œλ²„ 간에 데이터λ₯Ό μ£Όκ³  받을 λ•Œλ„ λŒ€λΆ€λΆ„ HTTPλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μ‹€λ¬΄μ—μ„œ TCP ν”„λ‘œν† μ½œ 직접 연결은 νŠΉμˆ˜ν•œ 상황 μ•„λ‹ˆλ©΄ 잘 μ—†μŠ΅λ‹ˆλ‹€.

 

μ§€κΈˆμ€ HTTP μ‹œλŒ€!!

 

1-1. HTTP의 역사

  • HTTP/0.9 1991λ…„: GET λ©”μ„œλ“œλ§Œ μ§€μ›ν–ˆκ³ , HTTP 헀더가 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.
  • HTTP/1.0 1996λ…„: λ©”μ„œλ“œμ™€ 헀더λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  • HTTP/1.1 1997λ…„: ν˜„μž¬ κ°€μž₯ 많이 μ‚¬μš©ν•˜κ³  있고, μš°λ¦¬μ—κ²Œ κ°€μž₯ μ€‘μš”ν•œ λ²„μ „μž…λ‹ˆλ‹€. (λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯이 λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€)
  • HTTP/2 2015λ…„: 기쑴의 1.1 λ²„μ „μ—μ„œ μ„±λŠ₯을 κ°œμ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • HTTP/3 ~ing: TCP λŒ€μ‹ μ— UDPλ₯Ό μ‚¬μš©ν–ˆκ³ , 1.1 λ²„μ „μ—μ„œ μ„±λŠ₯을 κ°œμ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 

 

1-2. 기반 ν”„λ‘œν† μ½œ

  • TCP 기반: HTTP/1.1, HTTP/2
  • UDP 기반: HTTP/3 (속도 λΉ¨λΌμ§€κ²Œ ν•˜λ €κ³  UDPλ₯Ό μ‚¬μš©ν•΄ μ΅œμ ν™”)
  • ν˜„μž¬μ—λŠ” HTTP/1.1을 주둜 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
    • HTTP/2와 HTTP/3도 점점 μ‚¬μš©λŸ‰μ΄ μ¦κ°€ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

1-3. HTTP νŠΉμ§•

  • ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰
  • λ¬΄μƒνƒœ ν”„λ‘œν† μ½œ(Stateless)
  • λΉ„ μ—°κ²°μ„±
  • HTTP λ©”μ‹œμ§€ (저루 μ€‘μš”!!)
  • λ‹¨μˆœν•¨, ν™•μž₯ κ°€λŠ₯

2. HTTP νŠΉμ§•1 - ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰

  • Request Response ꡬ쑰 (μš”μ²­ 응닡 ꡬ쑰)
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ— μš”μ²­μ„ 보내고 응닡을 λŒ€κΈ°ν•©λ‹ˆλ‹€.
  • μ„œλ²„κ°€ μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄μ„œ ν΄λΌμ΄μ–ΈνŠΈν•œν…Œ μ‘λ‹΅ν•©λ‹ˆλ‹€.
ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 뢄리

 μ˜›λ‚ μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λ₯Ό λΆ„λ¦¬ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜, μ§€κΈˆμ€ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λ₯Ό λΆ„λ¦¬ν•΄μ„œ
μ„œλ²„μ—λŠ” business logic(λΉ„μ§€λ‹ˆμŠ€ 둜직)κ³Ό 데이터λ₯Ό λ„£κ³ , ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚¬μš©μ„±κ³Ό UI에 집쀑을 ν•˜κ²Œλ” ν–ˆμŠ΅λ‹ˆλ‹€.


뢄리할 λ•Œμ˜ μž₯점

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ 각각 λ…λ¦½μ μœΌλ‘œ μ§„ν™”κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰


3. HTTP νŠΉμ§•2 - λ¬΄μƒνƒœ ν”„λ‘œν† μ½œ (Stateless)

 StatelessλŠ” μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό λ³΄μ‘΄ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이게 λ­” 말이지? 예제둜 μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

  • μž₯점: μ„œλ²„ ν™•μž₯성이 λ†’μŠ΅λ‹ˆλ‹€. (μŠ€μΌ€μΌ 아웃)
  • 단점: ν΄λΌμ΄μ–ΈνŠΈκ°€ μΆ”κ°€μ μœΌλ‘œ 데이터λ₯Ό 많이 전솑해야 ν•©λ‹ˆλ‹€.

 

3-1. Stateful과 Stateless 차이

Statefulκ³Ό Stateless의 μ°¨μ΄λŠ” 예제둜 보면 이해가 쉽기에 예제둜 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

 

3-1(1). Statefulκ³Ό Stateless 차이 (μƒνƒœ μœ μ§€ - Stateful)

μƒνƒœ μœ μ§€ - Stateful 예제

 

예제λ₯Ό 보면 고객과 μ μ›μ˜ 일상적인 λŒ€ν™”μΈ 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‘κΊΌμš΄ 글씨λ₯Ό μžμ„Ένžˆ 보고 λ°‘μ—λ‘œ λ„˜μ–΄κ°€λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

3-1(2). Statefulκ³Ό Stateless 차이 (μƒνƒœ μœ μ§€ - Stateful, λ§Œμ•½μ— 점원이 쀑간에 λ°”λ€Œλ©΄?)

μƒνƒœ μœ μ§€ - Stateful μ„œλ²„ 였λ₯˜ 예제

 

어라? 점원이 λ°”λ€Œμ—ˆλ„€μš”?

점원이 λ°”λ€Œλ©΄μ„œ 고객이 ν•˜λŠ” 말을 이해λ₯Ό λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

3-1(3). Statefulκ³Ό Stateless 차이 (μƒνƒœ μœ μ§€ - Stateful, 정리)

μƒνƒœ μœ μ§€ - Stateful 예제 정리

 

이제 μ†λ‹˜μ€ ν΄λΌμ΄μ–ΈνŠΈ, 점원은 μ„œλ²„λΌκ³  μƒκ°ν•˜λ©΄ λ©λ‹ˆλ‹€.

 

λ”°λΌμ„œ, Stateful은 μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 이전 μƒνƒœλ₯Ό λ³΄μ‘΄ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ, λ‹€λ₯Έ μ„œλ²„(점원)둜 λ°”λ€Œλ©΄ 였λ₯˜κ°€ λ‚©λ‹ˆλ‹€.

일일이 μ„œλ²„μ—κ²Œ λ‹€ λ”°λ‘œ μ•Œλ €μ€˜μ•Όν•΄μš”!! μ²˜μŒλΆ€ν„° λ‹€μ‹œ μ‹œμž‘ν•΄μ•Όν•˜κ³ !! μ–Όλ§ˆλ‚˜ λΉ„νš¨μœ¨μ μ΄μ—μš”!

 

3-1(4). Statefulκ³Ό Stateless 차이 (λ¬΄μƒνƒœ - Stateless)

λ¬΄μƒνƒœ - Stateless 예제

 

이 예제 μ—­μ‹œ 고객과 μ μ›μ˜ 일상적인 λŒ€ν™”μΈλ°μš”.

λ‘κΊΌμš΄ 글씨 λˆˆμ—¬κ²¨ 보고 λ°‘μ—λ‘œ λ„˜μ–΄κ°€λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

3-1(5). Statefulκ³Ό Stateless 차이 (λ¬΄μƒνƒœ - Stateless, λ§Œμ•½μ— 점원이 쀑간에 λ°”λ€Œλ©΄?)

λ¬΄μƒνƒœ - Stateless μ„œλ²„ 였λ₯˜ 예제

 

μ—¬κΈ°μ„œλ„ 또 점원이 λ°”λ€Œμ—ˆμ–΄μš”!

근데, μ•„κΉŒμ™€μ˜ 차이점이 λ³΄μ΄μ‹œλ‚˜μš”?

λΆ„λͺ… 점원이 λ°”λ€Œμ—ˆλŠ”λ° μ•„κΉŒ Stateful λ•Œλž‘μ€ λ‹€λ₯΄κ²Œ λŒ€ν™”κ°€ μ›ν™œν•˜κ²Œ 잘 μ΄μ–΄κ°€λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

즉, StatelessλŠ” κΈ°μ‘΄ μ„œλ²„κ°€ μ•„λ‹Œ λ‹€λ₯Έ μ„œλ²„λ‘œ λ°”λ€Œμ–΄λ„ 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•„μš”ν•œ 데이터λ₯Ό λ°”λ‘œλ°”λ‘œ λ„˜κΈ°κΈ° λ•Œλ¬Έμ΄μ£ .

 

3-1(6). Statefulκ³Ό Stateless 차이 정리

μœ„μ—μ„œ μ–˜κΈ°ν•œ 예제λ₯Ό ν† λŒ€λ‘œ Statefulκ³Ό Stateless 차이λ₯Ό μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • μƒνƒœ μœ μ§€(Stateful): 쀑간에 λ‹€λ₯Έ μ„œλ²„(점원)둜 λ°”λ€Œλ©΄ μ•ˆλ©λ‹ˆλ‹€.
    • 쀑간에 λ‹€λ₯Έ μ„œλ²„(점원)둜 λ°”λ€” λ•Œ, μƒνƒœ 정보λ₯Ό λ‹€λ₯Έ μ„œλ²„(점원)μ—κ²Œ 미리 μ•Œλ €μ€˜μ•Ό ν•©λ‹ˆλ‹€.
  • λ¬΄μƒνƒœ(Stateless): 쀑간에 λ‹€λ₯Έ μ„œλ²„(점원)둜 λ°”λ€Œμ–΄λ„ λ©λ‹ˆλ‹€.
    • κ°‘μžκΈ° ν΄λΌμ΄μ–ΈνŠΈ(고객) μš”μ²­μ΄ 증가해도 μ„œλ²„(점원)을 λŒ€κ±° νˆ¬μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ¬΄μƒνƒœλŠ” 응닡 μ„œλ²„λ₯Ό μ‰½κ²Œ λ°”κΏ€ 수 μžˆμŠ΅λ‹ˆλ‹€. -> λ¬΄ν•œν•œ μ„œλ²„ 증섀이 κ°€λŠ₯ν•©λ‹ˆλ‹€!!

 

3-2. μƒνƒœ μœ μ§€ - Stateful

이제 μœ„μ—μ„œ μ–˜κΈ°ν•œ Statefulκ³Ό Stateless에 κ΄€ν•΄μ„œ 그림으둜 λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

예제λ₯Ό λ΄€μœΌλ―€λ‘œ 이제 그림이 이해가 κ°€κ² μ£ ?

 

  • 항상 같은 μ„œλ²„κ°€ μœ μ§€λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

ν΄λΌμ΄μ–ΈνŠΈAλŠ” μ„œλ²„1μ΄λž‘λ§Œ 톡신을 ν•΄μ„œ μ„œλ²„λ₯Ό 더 늘리기 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

처음 μš”μ²­ν•  λ•Œ 데이터λ₯Ό ν•œ λ²ˆμ— 보내지 μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

  • 쀑간에 μ„œλ²„κ°€ μž₯μ• κ°€ λ‚˜λ©΄?

 

쀑간에 μ„œλ²„1이 μž₯μ• κ°€ λ‚˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈAλŠ” μ²˜μŒλΆ€ν„° λ‹€μ‹œ ν•΄μ•Όν•©λ‹ˆλ‹€.

μ„œλ²„2와 μ„œλ²„3은 μ„œλ²„1이 κ°–κ³  있던 데이터가 μ—†κΈ° λ•Œλ¬Έμ΄μ£ .

 

3-3. λ¬΄μƒνƒœ - Stateless

  • 아무 μ„œλ²„λ‚˜ ν˜ΈμΆœν•΄λ„ λ©λ‹ˆλ‹€.

 

ν΄λΌμ΄μ–ΈνŠΈAκ°€ μš”μ²­μ„ ν•  λ•Œ λΆ€ν„° 데이터λ₯Ό λ‹€ κ°€μ§€κ³ μ„œ μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.

아무 μ„œλ²„λ‚˜ 닡해라!

 

  • 쀑간에 μ„œλ²„κ°€ μž₯μ• κ°€ λ‚˜λ©΄?

 

μ„œλ²„1이 κ³ μž₯ λ‚˜λ„ μ„œλ²„2κ°€ λ‹΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

  • μž₯점 - μŠ€μΌ€μΌ 아웃 (μˆ˜ν‰ ν™•μž₯ 유리!!)

 

μ„œλ²„λ₯Ό λ¬΄ν•œλŒ€λ‘œ 놔둬도 λΉ λ₯΄κ²Œ 톡신이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

  • 싀무 ν•œκ³„
    • λͺ¨λ“  것을 λ¬΄μƒνƒœλ‘œ 섀계할 수 μžˆλŠ” κ²½μš°λ„ 있고 μ—†λŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€.
      • λ¬΄μƒνƒœ μ˜ˆμ‹œ: 둜그인이 ν•„μš” μ—†λŠ” λ‹¨μˆœν•œ μ„œλΉ„μŠ€ μ†Œκ°œ ν™”λ©΄
      • μƒνƒœ μœ μ§€ μ˜ˆμ‹œ: 둜그인 (Stateless의 ν•œκ³„)
    • 둜그인 ν•œ μ‚¬μš©μžμ˜ κ²½μš°μ—λŠ” 둜그인 ν–ˆλ‹€λŠ” μƒνƒœλ₯Ό μ„œλ²„μ— μœ μ§€ν•©λ‹ˆλ‹€.
    • 일반적으둜 λΈŒλŸ¬μš°μ € 쿠킀와 μ„œλ²„ μ„Έμ…˜ 등을 μ‚¬μš©ν•΄μ„œ μƒνƒœλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
    • κ·Έ 외에도 데이터λ₯Ό λ„ˆλ¬΄ 많이 보낼 수 μžˆλ‹€λŠ” ν•œκ³„κ°€ μžˆμŠ΅λ‹ˆλ‹€.
    • μƒνƒœ μœ μ§€λŠ” μ΅œμ†Œν•œλ§Œ μ‚¬μš©!!
      • 둜그인 같은 κΈ°λŠ₯을 μœ„ν•΄μ„œ μƒνƒœ μœ μ§€λ₯Ό μ‚¬μš©μ€ ν•˜λ˜, μ΅œμ†Œν•œμœΌλ‘œ μ‚¬μš©ν•˜κ³  μ™ λ§Œν•˜λ©΄ λ¬΄μƒνƒœλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

 


4. HTTP νŠΉμ§•3 - λΉ„ μ—°κ²°μ„± (connectionless)

 

4-1. 연결을 μœ μ§€ν•˜λŠ” λͺ¨λΈ

1. ν΄λΌμ΄μ–ΈνŠΈ1κ³Ό μ„œλ²„κ°€ μš°μ„  μš”μ²­ 응닡(TCP/IP μ—°κ²°) ν•©λ‹ˆλ‹€.

 

 

2. ν΄λΌμ΄μ–ΈνŠΈ1κ³Ό μ„œλ²„κ°€ μ—°κ²°λœ μƒνƒœμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ2와 μ„œλ²„κ°€ μš”μ²­ 응닡해도 ν΄λΌμ΄μ–ΈνŠΈ1κ³Ό μ„œλ²„λŠ” 계속 μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

 

3. ν΄λΌμ΄μ–ΈνŠΈ3κ³Ό μ„œλ²„κ°€ 연결해도 ν΄λΌμ΄μ–ΈνŠΈ1κ³Ό μ„œλ²„, ν΄λΌμ΄μ–ΈνŠΈ2와 μ„œλ²„λŠ” 계속 μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

계속 μ—°κ²°λ˜κ³  μžˆμ„ λ•Œμ˜ 단점

ν΄λΌμ΄μ–ΈνŠΈ1κ³Ό ν΄λΌμ΄μ–ΈνŠΈ2κ°€ μš”μ²­ μ‘λ‹΅ν•˜μ§€ μ•Šκ³  놀고 μžˆμ–΄λ„ 쓸데없이 연결을 계속 μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
즉, μ„œλ²„ μžμ›μ€ μ—°κ²°λ˜μ–΄ μžˆλŠ” λ™μ•ˆ 계속 μ†Œλͺ¨κ°€ λ©λ‹ˆλ‹€.

 

4-2. 연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λͺ¨λΈ (λΉ„ μ—°κ²°μ„±)

1. ν΄λΌμ΄μ–ΈνŠΈ1κ³Ό μ„œλ²„κ°€ μš°μ„  μš”μ²­ 응닡(TCP/IP μ—°κ²°) ν•©λ‹ˆλ‹€.

 

 

2. 그러고 μž‘μ—…μ΄ λλ‚˜λ©΄ μ¦‰μ‹œ 연결을 λŠμ–΄λƒ…λ‹ˆλ‹€.

 

 

3. ν΄λΌμ΄μ–ΈνŠΈ2와 μ„œλ²„λ₯Ό μ—°κ²°ν•©λ‹ˆλ‹€.

그러고 ν΄λΌμ΄μ–ΈνŠΈ1 λ•Œ 처럼 μž‘μ—…μ΄ λλ‚˜λ©΄ μ¦‰μ‹œ 연결을 λŠμ–΄λƒ…λ‹ˆλ‹€.

 

 

4. ν΄λΌμ΄μ–ΈνŠΈ3도 ν΄λΌμ΄μ–ΈνŠΈ1, ν΄λΌμ΄μ–ΈνŠΈ2 λ•Œμ²˜λŸΌ ν•©λ‹ˆλ‹€.

 

 

μž‘μ—…μ΄ λλ‚˜κ³  μ¦‰μ‹œ 연결을 λŠμ–΄λƒˆμ„ λ•Œμ˜ μž₯점

μ—°κ²°ν•  λ•Œλ§Œ μžμ›μ„ μ“°κ³  λ°”λ‘œ 연결을 λŠμ–΄λ²„λ¦¬λ‹ˆκΉŒ μ΅œμ†Œν•œμ˜ μžμ› μ†Œλͺ¨λ₯Ό μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ν΄λΌμ΄μ–ΈνŠΈκ°€ μœ„μ˜ 그림처럼 3κ°œκ°€ μ•„λ‹Œ 수 만 κ°œκ°€ λ˜μ–΄λ²„λ¦°λ‹€λ©΄ μ‚¬μš©λ˜λŠ” μžμ›μ˜ 양이 μ—„μ²­ 쀄어듀 κ²ƒμž…λ‹ˆλ‹€.

 

 

4-2(1). λΉ„ μ—°κ²°μ„± μ •μ˜

  • HTTPλŠ” 기본적으둜 연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λΉ„ μ—°κ²°μ„± λͺ¨λΈμž…λ‹ˆλ‹€.
  • HTTPλŠ” 일반적으둜 초 λ‹¨μœ„ μ΄ν•˜μ˜ λΉ λ₯Έ μ†λ„λ‘œ μ‘λ‹΅ν•©λ‹ˆλ‹€.
  • 1μ‹œκ°„ λ™μ•ˆ 수 천 λͺ…이 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•΄λ„ μ‹€μ œ μ„œλ²„μ—μ„œ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” μš”μ²­μ€ 수 μ‹­ 개 μ΄ν•˜λ‘œ 맀우 μž‘μŠ΅λ‹ˆλ‹€.
    • ex) μ›Ή λΈŒλΌμš°μ €μ—μ„œ 계속 μ—°μ†ν•΄μ„œ 검색 λ²„νŠΌμ„ λˆ„λ₯΄μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
  • μ„œλ²„ μžμ›μ„ 맀우 효율적으둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (μ΄μœ λŠ” μœ„μ—μ„œ 확인)

 

4-3. λΉ„ μ—°κ²°μ„± ν•œκ³„μ™€ 극볡

<ν•œκ³„>

  • μ—°κ²°ν•  λ•Œλ§ˆλ‹€ TCP/IP 연결을 μƒˆλ‘œ λ§Ίμ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • 3 way handshake μ‹œκ°„μ΄ μΆ”κ°€ λ©λ‹ˆλ‹€. (μ‚¬μš©μž μž…μž₯μ—μ„œ 맀우 단점)
  • μ›Ή λΈŒλΌμš°μ €λ‘œ μ‚¬μ΄νŠΈλ₯Ό μš”μ²­ν•˜λ©΄ HTML 뿐만 μ•„λ‹ˆλΌ μžλ°”μŠ€ν¬λ¦½νŠΈ, css, μΆ”κ°€ 이미지 λ“± 수 λ§Žμ€ μžμ›μ΄ ν•¨κ»˜ λ‹€μš΄λ‘œλ“œκ°€ λ©λ‹ˆλ‹€.
    • 즉, 검색 ν•˜λ‚˜λ§Œ 해도 수 λ§Žμ€ μžμ›μ΄ 우루루 λ‹€μš΄λ‘œλ“œκ°€ λ©λ‹ˆλ‹€.

<극볡>

  • μ§€κΈˆμ€ HTTP 지속 μ—°κ²°(Persistent Connections)둜 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
    • HTTP 지속 μ—°κ²°κ³Ό κ΄€λ ¨λœ μ–˜κΈ°λŠ” λ°‘μ—μ„œ ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
  • HTTP/2, HTTP/3μ—μ„œ 더 많이 μ΅œμ ν™” ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

4-3(1). HTTP 초기 - μ—°κ²°, μ’…λ£Œ λ‚­λΉ„

0.1초 μ‹œκ°„μ€ μž„μ˜λ‘œ 적어놓은 κ²ƒμž…λ‹ˆλ‹€.

ν•„μš”ν•œ 것이 생길 λ•Œλ§ˆλ‹€ 연결을 ν•˜κ³  λλ‚˜λ©΄ λ°”λ‘œ 끊고.. μ‹œκ°„ λ‚­λΉ„κ°€ λ©λ‹ˆλ‹€.

 

 

4-3(2). HTTP 지속 μ—°κ²°(Persistent Connections)

짧은 μ‹œκ°„ λ™μ•ˆλ§Œ 연결을 μœ μ§€ν•˜λ‹€κ°€ 연결을 μ’…λ£Œμ‹œμΌœλ²„λ¦½λ‹ˆλ‹€.

κ·Έ 짧은 μ‹œκ°„ λ™μ•ˆ μž‘μ—…μ„ λ‹€ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

http/3λŠ” UDP 연결을 ν•΄μ„œ 지속 연결을 ν•˜λ©΄μ„œ μ—°κ²°ν•˜λŠ” 속도 λ§ˆμ € μ€„μ—¬λ²„λ ΈμŠ΅λ‹ˆλ‹€.

 


5. HTTP νŠΉμ§•4 - HTTP λ©”μ‹œμ§€

저루 μ€‘μš”ν•œ HTTP λ©”μ‹œμ§€μ— κ΄€ν•΄μ„œ μ„€λͺ…해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

μš°μ„  HTTP μš”μ²­ λ©”μ‹œμ§€μ™€ HTTP 응닡 λ©”μ‹œμ§€μ˜ μ˜ˆμ‹œλ₯Ό λ³΄μ—¬λ“œλ¦¬λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

μ˜ˆμ‹œλŠ” μœ„μ˜ μ‚¬μ§„μ²˜λŸΌ 이렇고 HTTP μš”μ²­ λ©”μ‹œμ§€μ™€ HTTP 응닡 λ©”μ‹œμ§€ ꡬ쑰 차이λ₯Ό 그림으둜 μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

HTTP μš”μ²­ λ©”μ‹œμ§€μ™€ HTTP 응닡 λ©”μ‹œμ§€λŠ” μ‹œμž‘ 라인이 λ‹€λ¦…λ‹ˆλ‹€!! 

λ˜ν•œ, HTTP μš”μ²­ λ©”μ‹œμ§€μ™€ HTTP 응닡 λ©”μ‹œμ§€ λ‘˜ λ‹€ 무쑰건 곡백라인(CRLF)κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

5-1. μš”μ²­ λ©”μ‹œμ§€ μ‹œμž‘ 라인

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  • start-line = request-line(μš”μ²­ λ©”μ‹œμ§€) / status-line(응닡 λ©”μ‹œμ§€)
  • request-line = method SP(곡백 - ν•œ μΉΈ λ„λŠ” spaceν‚€) request-target SP(곡백 - spaceν‚€) HTTP-version CRLF(μ—”ν„°)
    • method: GET = 쑰회
    • request-target: path = /search?q=hello&hl=ko
    • HTTP-version: HTTP 버전

 

5-1(1). μš”μ²­ λ©”μ‹œμ§€ μ‹œμž‘ 라인 - HTTP λ©”μ„œλ“œ

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  • μ’…λ₯˜: GET, POST, PUT, DELETE
  • μ„œλ²„κ°€ μˆ˜ν–‰ν•΄μ•Ό ν•  λ™μž‘μ„ μ§€μ •ν•©λ‹ˆλ‹€.
    • GET: λ¦¬μ†ŒμŠ€ 쑰회
    • POST: μš”μ²­ λ‚΄μ—­ 처리
  • HTTP λ©”μ„œλ“œμ˜ 더 μžμ„Έν•œ λ‚΄μš©μ€ λ’€μ—μ„œ ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

5-1(2). μš”μ²­ λ©”μ‹œμ§€ μ‹œμž‘ 라인 - μš”μ²­ λŒ€μƒ

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  • absoulte-path[?query] => (μ ˆλŒ€κ²½λ‘œ[?쿼리])
    • μ ˆλŒ€ κ²½λ‘œμ— 쿼리 ν•©μ³μ„œ!
    • μ ˆλŒ€ 경둜 = "/"둜 μ‹œμž‘ν•˜λŠ” 경둜

 

5-1(3). μš”μ²­ λ©”μ‹œμ§€ μ‹œμž‘ 라인 - HTTP 버전

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  • HTTP Version

 

5-2. 응닡 λ©”μ‹œμ§€ μ‹œμž‘ 라인

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
   <body>...</body>
</html>
  • start-line = request-line(μš”μ²­ λ©”μ‹œμ§€) / status-line(응닡 λ©”μ‹œμ§€)
  • status-line = HTTP-version SP status-code SP reason-phrase CRLF
    • HTTP-version: HTTP 버전
    • status-code: HTTP μƒνƒœ μ½”λ“œ, μš”μ²­ 성곡 ν˜Ήμ€ μš”μ²­ μ‹€νŒ¨λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
      • 200: 성곡
      • 400: ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 였λ₯˜
      • 500: μ„œλ²„ λ‚΄λΆ€ 였λ₯˜
    • reason-phrase: 이유 문ꡬ = μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 짧은 μƒνƒœ μ½”λ“œ μ„€λͺ… κΈ€

 

5-3. HTTP 헀더

μœ„μ—κ°€ μš”μ²­ λ©”μ‹œμ§€ / μ•„λž˜κ°€ 응닡 λ©”μ‹œμ§€

λ…Έλž€μƒ‰ 배경에 밑쀄 쳐진 뢀뢄이 헀더 λΆ€λΆ„ μž…λ‹ˆλ‹€.

μš”μ²­ λ©”μ‹œμ§€μ™€ 응닡 λ©”μ‹œμ§€ λ‘˜ λ‹€ 헀더 ꡬ쑰가 λΉ„μŠ·ν•©λ‹ˆλ‹€.

  • header-field = field-name ":" OWS field-value OWS    (OWS: 띄어쓰기 ν—ˆμš©)
  • field-name은 λŒ€μ†Œλ¬Έμž ꡬ뢄이 μ—†μŠ΅λ‹ˆλ‹€.

 

5-3(1). HTTP 헀더 - μš©λ„

  • HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  λΆ€κ°€ 정보가 λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.
    • ex) λ©”μ‹œμ§€ λ°”λ””μ˜ λ‚΄μš©, λ©”μ‹œμ§€ λ°”λ””μ˜ 크기, μ••μΆ•, 인증, μš”μ²­ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €) 정보, μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보, μΊμ‹œ 관리 정보... λ“±λ“±
  • ν‘œμ€€ 헀더가 λ„ˆλ¬΄ λ§ŽμŠ΅λ‹ˆλ‹€.
  • ν•„μš” μ‹œμ— μž„μ˜μ˜ 헀더λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • ex) helloworld: hihi

 

5-4. HTTP λ©”μ‹œμ§€ λ°”λ””

νŒŒλž€μƒ‰ 배경에 λ…Έλž€ 글씨가 λ©”μ‹œμ§€ λ°”λ”” λΆ€λΆ„ μž…λ‹ˆλ‹€.

  • μ‹€μ œλ‘œ 전솑할 데이터가 λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.
  • HTML λ¬Έμ„œ, 이미지, μ˜μƒ, JSON λ“±λ“± byte둜 ν‘œν˜„ν•  수 μžˆλŠ” λͺ¨λ“  데이터λ₯Ό 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

6. HTTP νŠΉμ§•5 - λ‹¨μˆœν•¨ ν™•μž₯ κ°€λŠ₯

  • HTTPλŠ” λ‹¨μˆœν•©λ‹ˆλ‹€. λ˜ν•œ, HTTP λ©”μ‹œμ§€λ„ 맀우 λ‹¨μˆœν•©λ‹ˆλ‹€.
  • 크게 μ„±κ³΅ν•˜λŠ” ν‘œμ€€ κΈ°μˆ μ€ λ‹¨μˆœν•˜μ§€λ§Œ ν™•μž₯ κ°€λŠ₯ν•œ κΈ°μˆ μž…λ‹ˆλ‹€.
  • μ§€κΈˆμ€ HTTP μ‹œλŒ€!!