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

윀경·2021λ…„ 8μ›” 31일
0

HTTP

λͺ©λ‘ 보기
3/8
post-thumbnail

[1] λͺ¨λ“  것이 HTTP

: HTTP λ©”μ‹œμ§€λ‘œ 거의 λͺ¨λ“  ν˜•νƒœμ˜ 데이터가 전솑될 수 μžˆλ‹€.
(ex. HTML, ν…μŠ€νŠΈ, 이미지, μŒμ„±, μ˜μƒ, 파일, JSON, XML(API)..)

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

βœ”οΈ HTTP 역사
HTTP/1.1 (1997λ…„) β†’ κ°€μž₯ 많이 μ‚¬μš©λ˜λ©° μš°λ¦¬μ—κ²Œ κ°€μž₯ μ€‘μš”ν•œ λ²„μ „μœΌλ‘œ κΌ½νžŒλ‹€.

βœ”οΈ 기반 ν”„λ‘œν† μ½œ
TCP: HTTP/1.1(ν˜„μž¬ 주둜 μ‚¬μš©), HTTP/2 β†’ tcp ν”„λ‘œν† μ½œ μœ„ λ™μž‘
UDP: HTTP/3 β†’ udp 기반
(HTTP/2, HTTP/3 λ˜ν•œ 점점 증가)

HTTP νŠΉμ§•

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

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

: Request Response ꡬ쑰


[3] Stateful, Stateless

λ¬΄μƒνƒœ ν”„λ‘œν† μ½œ (Stateless)

: (을 지ν–₯). μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό λ³΄μ‘΄ν•˜μ§€ λͺ»ν•¨
- μž₯점: μ„œλ²„ ν™•μž₯μ„± λ†’μŒ (μŠ€μΌ€μΌ 아웃)
- 단점: ν΄λΌμ΄μ–ΈνŠΈκ°€ μΆ”κ°€ 데이터 전솑

Stateful πŸ†š Stateless

πŸ“Œ μƒνƒœμœ μ§€ (Stateful)의 μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μž.

πŸ™‹πŸ»β€β™€οΈ: μ„ μƒλ‹˜, μ € μ•„μ΄μŠ€ν¬λ¦Ό λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ«: λ”ΈκΈ°? μ΄ˆμ½”? μ–΄λ–€κ²Œ λ¨Ήκ³ μ‹Άλ‹ˆ?

πŸ™‹πŸ»β€β™€οΈ: μ €λŠ” μ΄ˆμ½”κ°€ λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ«: 그래, μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Όμ€ 냉동싀 첫번째 칸에 μžˆμœΌλ‹ˆ κ°€μ Έλ‹€ 먹어도 돼.

πŸ™‹πŸ»β€β™€οΈ: 두 개 먹어도 λΌμš” ??
πŸ‘©πŸ»β€πŸ«: 그래 !!

이 λŒ€ν™”λ₯Ό λ³΄μ•˜μ„ λ•Œ μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†λ‹€. 단, μ„ μƒλ‹˜μ΄ λ°”λΉ  이야기λ₯Ό λ‚˜λˆ„λ‹€ μ‚¬λΌμ‘Œλ‹€ ..! μ˜†λ°˜ μ„ μƒλ‹˜μ΄ μ˜€μ…¨λ‹€λ©΄ ..?

πŸ™‹πŸ»β€β™€οΈ: μ„ μƒλ‹˜, μ € μ•„μ΄μŠ€ν¬λ¦Ό λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ« (ν† λΌλ°˜ μ„ μƒλ‹˜): λ”ΈκΈ°? μ΄ˆμ½”? μ–΄λ–€κ²Œ λ¨Ήκ³ μ‹Άλ‹ˆ?
πŸƒπŸ»β€β™€οΈπŸ’¨
πŸ™‹πŸ»β€β™€οΈ: μ €λŠ” μ΄ˆμ½”κ°€ λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ« (기린반 μ„ μƒλ‹˜): ?? κ°‘μžκΈ° 무슨 μ΄ˆμ½”? μ΄ˆμ½œλ ›μ΄ λ¨Ήκ³ μ‹Άλ‹ˆ?
πŸƒπŸ»β€β™€οΈπŸ’¨
πŸ™‹πŸ»β€β™€οΈ: 두 개 먹어도 λΌμš” ??
πŸ‘©πŸ»β€πŸ« (νŽ­κ·„λ°˜ μ„ μƒλ‹˜): ?? 뭘 두 κ°œλ‚˜ λ¨Ήκ² λ‹€λŠ” κ±°μ•Ό?

πŸ™‹πŸ»β€β™€οΈ μ•„μ΄μ˜ λŒ€ν™”λŠ” λ˜‘κ°™λ‹€. κ·ΈλŸ¬λ‚˜ μ„ μƒλ‹˜μ΄ 자꾸 λ°”λ€Œλ©΄μ„œ λŒ€ν™”μ˜ 흐름을 νŒŒμ•…ν•˜μ§€ λͺ»ν•˜κ³  μžˆλ‹€.

Stateful이라면 μƒνƒœλ₯Ό μœ μ§€ν•΄μ€˜μ•Ό ν•œλ‹€.

πŸ™‹πŸ»β€β™€οΈ: μ„ μƒλ‹˜, μ € μ•„μ΄μŠ€ν¬λ¦Ό λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ«: λ”ΈκΈ°? μ΄ˆμ½”? μ–΄λ–€κ²Œ λ¨Ήκ³ μ‹Άλ‹ˆ? (μ•„μ΄μŠ€ν¬λ¦Ό μƒνƒœ μœ μ§€)

πŸ™‹πŸ»β€β™€οΈ: μ €λŠ” μ΄ˆμ½”κ°€ λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ«: 그래, μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Όμ€ 냉동싀 첫번째 칸에 μžˆμœΌλ‹ˆ κ°€μ Έλ‹€ 먹어도 돼. (μ•„μ΄μŠ€ν¬λ¦Ό, μ΄ˆμ½”λ§› μƒνƒœ μœ μ§€)

πŸ™‹πŸ»β€β™€οΈ: 두 개 먹어도 λΌμš” ??
πŸ‘©πŸ»β€πŸ«: 그래 !! (λ…ΈνŠΈλΆ, μ΄ˆμ½”λ§›, 두 개 μƒνƒœ μœ μ§€)

πŸ“Œ λ¬΄μƒνƒœ (Stateless)의 μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μž.

πŸ™‹πŸ»β€β™€οΈ: μ„ μƒλ‹˜, μ € μ•„μ΄μŠ€ν¬λ¦Ό λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ«: λ”ΈκΈ°? μ΄ˆμ½”? μ–΄λ–€κ²Œ λ¨Ήκ³ μ‹Άλ‹ˆ?

πŸ™‹πŸ»β€β™€οΈ: μ €λŠ” μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Όμ΄ λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ«: 그래, μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Όμ€ 냉동싀 첫번째 칸에 μžˆμœΌλ‹ˆ κ°€μ Έλ‹€ 먹어도 돼.

πŸ™‹πŸ»β€β™€οΈ: μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Ό 두 개 먹어도 λΌμš” ??
πŸ‘©πŸ»β€πŸ«: 그래 !! μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Ό λ‘κ°œ λ¨Ήμ–΄.

이건 λ¬΄μƒνƒœμΌ λ•Œ λŒ€ν™” λ‚΄μš©μ΄λ‹€.
이제 μ„ μƒλ‹˜μ΄ λ°”λ€Œμ—ˆμ„ λ•Œλ₯Ό λ‹€μ‹œ μ‚΄νŽ΄λ³΄μž.

πŸ™‹πŸ»β€β™€οΈ: μ„ μƒλ‹˜, μ € μ•„μ΄μŠ€ν¬λ¦Ό λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ« (ν† λΌλ°˜ μ„ μƒλ‹˜): λ”ΈκΈ°? μ΄ˆμ½”? μ–΄λ–€κ²Œ λ¨Ήκ³ μ‹Άλ‹ˆ?
πŸƒπŸ»β€β™€οΈπŸ’¨
πŸ™‹πŸ»β€β™€οΈ: μ €λŠ” μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Όκ°€ λ¨Ήκ³ μ‹Άμ–΄μš”.
πŸ‘©πŸ»β€πŸ« (기린반 μ„ μƒλ‹˜): 그래, μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Όμ€ 냉동싀 첫번째 칸에 μžˆμœΌλ‹ˆ κ°€μ Έλ‹€ 먹어도 돼.
πŸƒπŸ»β€β™€οΈπŸ’¨
πŸ™‹πŸ»β€β™€οΈ: μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Ό 두 개 먹어도 λΌμš” ??
πŸ‘©πŸ»β€πŸ« (νŽ­κ·„λ°˜ μ„ μƒλ‹˜): 그래 !! μ΄ˆμ½” μ•„μ΄μŠ€ν¬λ¦Ό λ‘κ°œ λ¨Ήμ–΄.

μ΄λ ‡κ²Œ ν† λΌλ°˜ μ„ μƒλ‹˜μ΄λ“ , κΈ°λ¦°, νŽ­κ·„λ°˜ μ„ μƒλ‹˜μ΄λ“  μ „ν˜€ 상관이 없어진닀.

즉,

Stateful: 쀑간에 μ„ μƒλ‹˜μ΄ λ°”λ€Œλ©΄ μ•ˆ 된 λ‹€.
(바뀐닀면 μƒνƒœ 정보λ₯Ό μ„ μƒλ‹˜λ§ˆλ‹€ 미리 μ•Œλ €μ€˜μ•Όν•œλ‹€.)

Stateless: μŠ€μΌ€μΌ 아웃 - μˆ˜ν‰ ν™•μž₯ 유리
μ„ μƒλ‹˜μ΄ 100번 λ°”λ€Œμ–΄λ„ 상관 μ—†λ‹€.
- κ°‘μžκΈ° 아이듀이 ν•œκΊΌλ²ˆμ— λͺ°λ €μ™€ μ•„μ΄μŠ€ν¬λ¦Όμ„ 달라고 쑸라도 μ„ μƒλ‹˜μ„ 그만큼 λͺ¨μ…”μ˜¬ 수 μžˆλ‹€.
- κ°‘μžκΈ° ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ΄ 증가해도 μ„œλ²„λ₯Ό λŒ€κ±° νˆ¬μž…ν•  수 μžˆλ‹€.
λ¬΄μƒνƒœλŠ” 응닡 μ„œλ²„λ₯Ό μ‰½κ²Œ λ°”κΏ€ 수 μžˆλ‹€. ➑️ λ¬΄ν•œλŒ€λ‘œ μ„œλ²„ 증섀 κ°€λŠ₯
(μƒνƒœμœ μ§€λŠ” κ°‘μžκΈ° ν†΅μ‹ ν•˜λ˜ μ„œλ²„κ°€ κ³ μž₯λ‚œλ‹€λ©΄ μ²˜μŒλΆ€ν„° κ·Έ 과정을 λ‹€μ‹œ ν•΄μ•Όν•œλ‹€.)

βœ”οΈ Stateless 싀무 ν•œκ³„
λͺ¨λ“  것을 λ¬΄μƒνƒœλ‘œ 섀계할 수 μžˆλŠ” κ²½μš°λ„ μžˆμ§€λ§Œ κ·Έλ ‡κ²Œ ν•  수 μ—†λŠ” κ²½μš°λ„ μžˆλ‹€.

λ¬΄μƒνƒœμ˜ 예: 둜그인이 ν•„μš”μ—†λŠ” λ‹¨μˆœ μ„œλΉ„μŠ€ μ†Œκ°œ ν™”λ©΄
μƒνƒœμœ μ§€μ˜ 예: 둜그인 (둜그인 μƒνƒœλ₯Ό μ„œλ²„μ— μœ μ§€)

일반적으둜 λΈŒλΌμš°μ € 쿠킀와 μ„œλ²„ μ„Έμ…˜λ“±μ„ μ‚¬μš©ν•΄ μƒνƒœ μœ μ§€(μƒνƒœ μœ μ§€λŠ” μ΅œμ†Œν•œλ§Œ μ‚¬μš©)


[4] λΉ„ μ—°κ²°μ„±(connectionless)


➑️ 연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λͺ¨λΈ: μ„œλ²„ μžμ› μ†Œλͺ¨λ₯Ό 막을 수 μžˆλ‹€.

λΉ„ μ—°κ²°μ„±

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

단점

λΉ„ 연결성이 단점이 μ—†λŠ” 것은 μ•„λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ΅œμ†Œν•œμ˜ 연결을 μœ μ§€ν•˜λ©΄ TCP/IP 연결을 μƒˆλ‘œ λ§Ίμ–΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ 자주 생기고 μ΄λŠ” 3 way handshakeλ₯Ό μˆ˜ν–‰ν•˜λŠ” μ‹œκ°„μ΄ μΆ”κ°€λœλ‹€.

μ›Ή λΈŒλΌμš°μ €λ‘œ μ‚¬μ΄νŠΈλ₯Ό μš”μ²­ν•˜λ©΄ HTML 뿐만 μ•„λ‹ˆλΌ μžλ°” 슀크립트, css, μΆ”κ°€ 이미지 λ“± 수 λ§Žμ€ μžμ›μ΄ ν•¨κ»˜ λ‹€μš΄λ‘œλ“œ λœλ‹€.

μ§€κΈˆμ€ HTTP 지속 μ—°κ²°(Persistent Connections)둜 ν•΄κ²°
HTTP/2, HTTP/3μ—μ„œ 더 λ§Žμ€ μ΅œμ ν™”

βœ”οΈ 초기 HTTP (μ—°κ²°, μ’…λ£Œ λ‚­λΉ„)
βœ”οΈ HTTP 지속 μ—°κ²° (Persistent Connections)


[5] HTTP λ©”μ‹œμ§€

본격적으둜 HTTP λ©”μ‹œμ§€λ₯Ό μ•Œμ•„λ³΄μž.

μ‹œμž‘ 라인

start-line = request-line / status-line
request-line = method SP(곡백) request-target SP HTTP-version CRLF(μ—”ν„°)

method: GET(λ¦¬μ†ŒμŠ€ 쑰회), POST(μš”μ²­ λ‚΄μ—­ 처리), PUT, DELETE ...
request-target: path β†’ absolute-path[?query]
(μ ˆλŒ€κ²½λ‘œλž€ /둜 μ‹œμž‘ν•˜λŠ” 경둜λ₯Ό 말함)

μƒνƒœμ½”λ“œ: 200(성곡), 400(ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 였λ₯˜), 500(μ„œλ²„ λ‚΄λΆ€ 였λ₯˜)

HTTP header

header-field = field-name":"(띄어쓰기 λΆˆκ°€) OWS(:띄어쓰기 ν—ˆμš©) field-value OWS
(field-name은 λŒ€μ†Œλ¬Έμž ꡬ뢄 μ—†μŒ)

βœ”οΈ HTTP ν—€λ”λŠ” HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  λΆ€κ°€ 정보(λ©”μ‹œμ§€ λ°”λ”” λ‚΄μš©/크기, 인증, ν΄λΌμ΄μ–ΈνŠΈ 정보..)듀을 λ‹΄κ³ μžˆλ‹€.
ν‘œμ€€ 헀더가 μ—„μ²­ 많고 ν•„μš”μ‹œ μž„μ˜μ˜ 헀더λ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

βœ”οΈ HTTP λ°”λ””λŠ” μ‹€μ œ 전솑할 데이터λ₯Ό λ‹΄κ³  있으며 HTML λ¬Έμ„œ, 이미지, μ˜μƒ, JSON.. byte둜 ν‘œν˜„ κ°€λŠ₯ν•œ λͺ¨λ“  데이터λ₯Ό 전솑할 수 μžˆλ‹€.

πŸ“Œ μ •λ¦¬ν•˜μžλ©΄

  • HTTP λ©”μ‹œμ§€μ— λͺ¨λ“  것을 전솑할 수 있으며
  • HTTP 역사 HTTP/1.1을 κΈ°μ€€μœΌλ‘œ ν•™μŠ΅
  • HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ꡬ쑰이닀.
  • λ˜ν•œ, λ¬΄μƒνƒœ ν”„λ‘œν† μ½œ(Stateless)이며
  • HTTP λ©”μ‹œμ§€λŠ” 헀더, λ°”λ””λ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.
  • λ‹¨μˆœν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜λ‹€.

profile
개발 바보 이사 쀑

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보