Skip to content

🟒 HTTP κΈ°λ³Έ, 역사, ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰, λ¬΄μƒνƒœ ν”„λ‘œν† μ½œ, λΉ„ μ—°κ²°μ„±, HTTP λ©”μ‹œμ§€Β #84

@leemember

Description

@leemember

πŸ€μ§€κΈˆμ€ λͺ¨λ“  것을 HTTP ν”„λ‘œν† μ½œμ— λ‹΄μ•„μ„œ μ „μ†‘ν•©λ‹ˆλ‹€.
HTTPλŠ” ν•˜μ΄νΌν…μŠ€νŠΈ 트랜슀퍼 ν”„λ‘œν† μ½œ μ΄λž€ λœ»μž…λ‹ˆλ‹€.

✨λͺ¨λ“  κ²ƒμ΄λž€ ?

  • HTML, TEXT
  • 이미지, μŒμ„±, μ˜μƒ, 파일
  • JSON, XML(API)
  • 거의 λͺ¨λ“  ν˜•νƒœμ˜ 데이터 전솑 κΈ°λŠ₯
    μ„œλ²„κ°„μ— 데이터λ₯Ό μ£Όκ³  받을 λ•Œλ„ λŒ€λΆ€λΆ„ HTTP μ‚¬μš©

πŸ”₯ κ²°λ‘ 

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

TCPλ₯Ό 직접 μ—°κ²°ν•΄μ„œ ν•˜λŠ” κ²½μš°μ—λŠ” κ²Œμž„μ„œλ²„λ‚˜ νŠΉμˆ˜ν•œκ²½μš°μ—λ§Œ ν•œλ‹€.
심지어 μš”μ¦˜ λͺ¨λ°”일 κ²Œμž„ 같은 κ²½μš°μ—λ„ HTTP둜 ν†΅μ‹ ν•˜λŠ” ꡬ쑰둜 κ°œλ°œν•œλ‹€.
HTTP λΌλŠ”κ²Œ μ‹œκ°„μ΄ 흐λ₯΄λ©΄μ„œ 거의 λͺ¨λ“  것을 전솑할 수 μžˆλ„λ‘ λ°”λ€Œμ—ˆλ‹€.

πŸ‘€ HTTP의 역사

  • HTTP/0.9 1991λ…„ : GET λ©”μ„œλ“œλ§Œ 지원, HTTP 헀더X
  • HTTP/1.0 1996λ…„ : λ©”μ„œλ“œ, 헀더 μΆ”κ°€
  • ✨HTTP/1.1 1997λ…„ : κ°€μž₯ 많이 μ‚¬μš©ν•˜κ³  μš°λ¦¬μ—κ²Œ κ°€μž₯ μ€‘μš”ν•œ 버전이닀 ✨
  • HTTP/2 2015λ…„ : μ„±λŠ₯ κ°œμ„ 
  • HTTP/3 진행쀑 : TCP λŒ€μ‹ μ— UDPλ₯Ό μ‚¬μš©, μ„±λŠ₯ κ°œμ„ 

πŸ’» 기반 ν”„λ‘œν† μ½œ

TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
ν˜„μž¬ HTTP/1.1 주둜 μ‚¬μš©ν•œλ‹€.
HTTP/2, HTTP/3 도 점점 μ¦κ°€ν•˜λŠ” μΆ”μ„Έλ‹€.

근데 μš°λ¦¬λŠ” HTTP/1만 λ°°μ›Œλ†“μœΌλ©΄ λœλ‹€. μ™œλƒλ©΄ HTTP/2λž‘ HTTP/3λŠ” μ„±λŠ₯κ°œμ„ λ§Œ ν•œ 것이기 λ•Œλ¬Έ!

ν”„λ‘œν† μ½œ ν™•μΈν•˜λ €λ©΄ 개발자 λ„κ΅¬μ—μ„œ μ΄λ ‡κ²Œ ν”„λ‘œν† μ½œμ„ μ„ΈνŒ…ν•΄μ£Όλ©΄ λœλ‹€. HTTP 1은 λ‹€ μ“°κ³ μžˆκ³  HTTP2 μš”μ¦˜ 많이 μ‚¬μš©ν•˜λŠ” 쀑이닀.

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

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

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ™€ κ°œλ…μ μœΌλ‘œ 뢄리λ₯Ό ν•œλ‹€.
λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ΄λž‘ λ°μ΄ν„°λŠ” μ„œλ²„μ— λ‹€ λ°€μ–΄λ„£λŠ”λ‹€.
ν΄λΌμ΄μ–ΈνŠΈλŠ” UI 그리고 μ‚¬μš©μ„±μ—λ§Œ 집쀑을 ν•œλ‹€.

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

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

- μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό 보쑴 ν•˜μ§€ μ•ŠλŠ”λ‹€.

(Stateful μƒνƒœλ₯Ό μœ μ§€ν•œλ‹€λŠ” 것이고 Stateless μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이닀.)

μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μ„€λͺ…

πŸ”₯ Statefull

  • 상황1. λ…ΈνŠΈλΆμ„ κ΅¬λ§€ν•˜λŠ”λ° 직원1ν•œν…Œ λ…ΈνŠΈλΆ 2κ°œμ™€ 가격이 μ–Όλ§ˆμΈμ§€ μ•Œκ³  μ‹ μš©μΉ΄λ“œλ‘œ 거래λ₯Ό ν•œλ‹€.
  • 상황2. λ…ΈνŠΈλΆμ„ κ΅¬λ§€ν•˜λŠ”λ° 직원2ν•œν…Œ μ£Όμ–΄(λ…ΈνŠΈλΆ)λ₯Ό μ•ˆλ§ν•˜κ³  2개 κ΅¬λ§€ν•œλ‹€ λ§ν•˜κ³ , 직원 3ν•œν…Œ μ‹ μš©μΉ΄λ“œλ‘œ κ΅¬λ§€ν•˜κ² λ‹€κ³  ν•œλ‹€. 그럼 직원 2와 직원 3이 무엇을 μ–Όλ§ˆμ— μ‚¬λŠ”μ§€λ₯Ό λͺ¨λ₯Έλ‹€.

상황1처럼 직원 ν•œ λͺ…ν•˜κ³ λ§Œ κ±°λž˜κ°€ κ°€λŠ₯ν•˜λ‹€λŠ” 것. 상황2λŠ” 직원듀이 contextλ₯Ό λͺ¨λ₯΄λ‹ˆκΉŒ 상황 μž₯μ• κ°€ λ°œμƒν•œλ‹€. ν•˜μ§€λ§Œ Stateless κ²½μš°μ—λŠ”

πŸ”₯ Stateless
μœ„μ— 상황2처럼 λ…ΈνŠΈλΆμ„ κ΅¬λ§€ν•˜λŠ”λ° 직원2ν•œν…Œ μ£Όμ–΄(λ…ΈνŠΈλΆ)λ₯Ό μ•ˆλ§ν•˜κ³  2개 κ΅¬λ§€ν•œλ‹€ λ§ν•˜κ³ , 직원 3ν•œν…Œ μ‹ μš©μΉ΄λ“œλ‘œ κ΅¬λ§€ν•˜κ² λ‹€κ³  ν•˜λ©΄ 직원 2와 직원 3이 λ…ΈνŠΈλΆμ„ 2개λ₯Ό μ‹ μš©μΉ΄λ“œλ‘œ ꡬ맀 ν•˜κ² λ‹€κ³  이미 λ‹€ μ•„λŠ” μƒνƒœλ‹€. 이게 λ°”λ‘œ Stateless의 μž₯점이닀. ν™•μž₯성이 λ†’λ‹€λŠ” 것.

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

- μž₯점 : μ„œλ²„ ν™•μž₯μ„± λ†’μŒ (μŠ€μΌ€μΌ 아웃)

- 단점 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μΆ”κ°€ 데이터 전솑

이처럼 **Statefull(μƒνƒœμœ μ§€)**은 쀑간에 μ„œλ²„κ°€ μž₯μ• λ‚˜λ©΄ μž‘μ—…μ„ λ‹€μ‹œ ν•΄μ•Όν•œλ‹€.
Stateless(λ¬΄μƒνƒœ)λŠ” 아무 μ„œλ²„λ‚˜ ν˜ΈμΆœν•΄λ„ λœλ‹€. μ²˜μŒλΆ€ν„° ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ ν•  λ•Œ 데이터λ₯Ό λ‹€ λ‹΄μ•„μ„œ μš”μ²­ν•œλ‹€.
그러면 μ„œλ²„λŠ” μƒνƒœλ₯Ό λ³΄κ΄€ν•˜μ§€ μ•Šκ³  κ·Έλƒ₯ μ‘λ‹΅λ§Œ ν•΄μ€€λ‹€.

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„1에 μš”μ²­μ„ ν•˜κ³  μ„œλ²„1에 μž₯μ• κ°€ 생기면 μ€‘κ³„μ„œλ²„κ°€ λ‹€λ₯Έ μ„œλ²„2둜 λ„˜κ²¨μ€€λ‹€. κ·Έλž˜μ„œ ν™•μž₯성이 μ’‹λ‹€.

❗ μ‹€λ¬΄ν•œκ³„

  • λͺ¨λ“  것을 λ¬΄μƒνƒœλ‘œ 섀계 ν•  수 μžˆλŠ” κ²½μš°λ„ 있고 μ—†λŠ” κ²½μš°λ„ μžˆλ‹€.

  • λ¬΄μƒνƒœ : 둜그인이 ν•„μš” μ—†λŠ” λ‹¨μˆœν•œ μ„œλΉ„μŠ€ μ†Œκ°œ ν™”λ©΄

  • μƒνƒœ μœ μ§€ : 둜그인

  • λ‘œκ·ΈμΈν•œ μ‚¬μš©μžμ˜ 경우 둜그인 ν–ˆλ‹€λŠ” μƒνƒœλ₯Ό μ„œλ²„μ— μœ μ§€

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

  • μƒνƒœ μœ μ§€λŠ” μ΅œμ†Œν•œλ§Œ μ‚¬μš©ν•˜λŠ”κ²Œ μ’‹λ‹€. (λ‘œκ·ΈμΈκ°™μ€ 경우)

πŸ”— λΉ„μ—°κ²°μ„±

μš”μ²­μ„ν•˜κ³  응닡을 ν•˜λ©΄ TCP/IP 연결을 μ’…λ£Œν•΄ 버린닀.

μž₯점

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

단점

  1. TCP/IP 연결을 μƒˆλ‘œ λ§Ίμ–΄μ•Ό ν•œλ‹€. 즉, 3way handshake μ‹œκ°„ μΆ”κ°€
  2. μ›Ή λΈŒλΌμš°μ €λ‘œ μ‚¬μ΄νŠΈλ₯Ό μš”μ²­ν•˜λ©΄ HTML 뿐만 μ•„λ‹ˆλΌ μžλ°”μŠ€ν¬λ¦½νŠΈ, css, μΆ”κ°€ 이미지 λ“±λ“± μˆ˜λ§Žμ€ μžμ›μ΄ ν•¨κ»˜ λ‹€μš΄λ‘œλ“œλœλ‹€.
  3. μ§€κΈˆμ€ HTTP 지속 μ—°κ²°λ‘œ 문제 ν•΄κ²°
  4. HTTP/2, HTTP/3μ—μ„œ 더 λ§Žμ€ μ΅œμ ν™”κ°€ ν•„μš”

⭐ HTTP λ©”μ‹œμ§€ (제일 μ€‘μš”) ⭐

μ‹œμž‘λΌμΈ, 헀더, 곡백(이 뢀뢄은 무쑰건 μžˆμ–΄μ•Όν•œλ‹€.), λ©”μ‹œμ§€λ°”λ”” μ΄λ ‡κ²Œ κ΅¬μ„±λ˜μ–΄μžˆλ‹€.

HTTP μš”μ²­ λ©”μ‹œμ§€μ™€ HTTP 응닡 λ©”μ‹œμ§€λ‹€.

HTTP μš”μ²­ λ©”μ‹œμ§€

GET 검색 / path μ£Όμ†Œ / HTTP 버전 (μ‹œμž‘λΆ€λΆ„)
λ°”λ””μ—λŠ” μš”μ²­ν•  게 μ—†μœΌλ©΄ 곡백으둜 λ„£κ³  μš”μ²­ν•˜λ©΄ λœλ‹€.

HTTP 응닡 λ©”μ‹œμ§€

html에 데이터가 λ“€μ–΄μ˜¨λ‹€.

μ‹œμž‘λΌμΈ

start-line = μš”μ²­ 라인 request-line / 응닡 라인 status-line
μ‹œμž‘ 라인은 μš”μ²­ λ©”μ‹œμ§€μ™€ μƒνƒœλΌμΈμ΄ μžˆμŠ΅λ‹ˆλ‹€.
μš”μ²­λΌμΈ(request-line)μ—λŠ” λ©”μ„œλ“œμ™€ μš”μ²­ νƒ€κ²Ÿ, 그리고 HTTP 버전이 λ“€μ–΄κ°€μ•Όν•œλ‹€.
request-line = method SP(곡백) request-target SP(곡백) HTTP-version CRLF

β­μš”μ²­ λ©”μ‹œμ§€- HTTP λ©”μ„œλ“œ ⭐ μ§„μ§œ μ€‘μš”

  • μ’…λ₯˜ : GET(λ¦¬μ†ŒμŠ€ 쑰회), POST(μš”μ²­ λ‚΄μ—­ 처리), PUT, DELETE(μ‚­μ œ 뢀탁)
  • μ„œλ²„κ°€ μˆ˜ν–‰ν•΄μ•Ό ν•  λ™μž‘ μ§€μ • (GET: λ¦¬μ†ŒμŠ€μ‘°νšŒ / POST: μš”μ²­ λ‚΄μ—­ 처리)

μš”μ²­ λ©”μ‹œμ§€ - μš”μ²­ λŒ€μƒ (/search?q=hello&hl=ko)

예) GET //search?q=hello&hl=ko HTTP/1.1
HOST: www.google.com
μš”μ²­ λ©”μ‹œμ§€ - HTTP Version

응닡 λ©”μ‹œμ§€ status-line

status-line = HTTP-version SP(곡백) status-code SP(곡백) reason-phrase CRLF

⭐응닡 λ©”μ‹œμ§€ μƒνƒœμ½”λ“œβ­ (μ—„μ²­ μ€‘μš”)

  • μš”μ²­ 성곡, μ‹€νŒ¨λ₯Ό λ‚˜νƒ€λ‚Έλ‹€

  • 200 : 성곡

  • 400 : ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 였λ₯˜

  • 500 : μ„œλ²„ λ‚΄λΆ€ 였λ₯˜

OK : μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 짧은 μƒνƒœ μ½”λ“œ μ„€λͺ… κΈ€
곡식 μŠ€νŽ™ : HTTP-message = start-line*(header-field CRLF)CRLF[message-body]
μ—¬κΈ°μ„œ CRLFλŠ” enter ν‘œμ‹œλ‹€.

HTTP 헀더

  • header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 ν—ˆμš©! 띄어써도 되고 μ•ˆ 띄어도 λœλ‹€.)
  • field-name은 λŒ€μ†Œλ¬Έμž ꡬ문 μ—†μŒ
    ex)Host:www.google.com

HTTP ν—€λ”μ˜ μš©λ„

  • HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  λΆ€κ°€ 정보
    (예) λ©”μ‹œμ§€ λ°”λ””μ˜ λ‚΄μš©, λ©”μ‹œμ§€ λ°”λ””μ˜ 크기, μ••μΆ•, 인증, μš”μ²­ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €) 정보, μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보, μΊμ‹œ 관리 정보...

  • ν‘œμ€€ 헀더가 λ„ˆλ¬΄ λ§Žλ‹€

  • ν•„μš”μ‹œ μž„μ˜μ˜ 헀더 μΆ”κ°€ κ°€λŠ₯
    helloworld: hihi

HTTP λ©”μ‹œμ§€ λ°”λ””

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

πŸ™‚ λ‹¨μˆœν•¨ ν™•μž₯ κ°€λŠ₯

  • HTTPλŠ” λ‹¨μˆœν•˜λ‹€. μŠ€νŽ™λ„ μ½μ–΄λ³Όλ§Œ ν•˜λ‹€.
    μ‹œμž‘μ€„
    머리
    λ°”λ””

μ΄λ ‡κ²Œ κ΅¬λΆ„λœλ‹€.

  • HTTP λ©”μ‹œμ§€λ„ 맀우 λ‹¨μˆœν•˜λ‹€.

  • 크게 μ„±κ³΅ν•˜λŠ” ν‘œμ€€ κΈ°μˆ μ€ λ‹¨μˆœν•˜μ§€λ§Œ ν™•μž₯ κ°€λŠ₯ν•œ 기술

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions