🌐 Web

3. HTTP

Hugehoo 2020. 12. 31. 13:02

λ³Έ ν¬μŠ€νŒ…μ€ μš°μ•„ν•œ ν˜•μ œλ“€, κΉ€μ˜ν•œ λ‹˜μ˜ 'λͺ¨λ“  개발자λ₯Ό μœ„ν•œ HTTP μ›Ή κΈ°λ³Έ 지식' κ°•μ˜λ₯Ό μˆ˜κ°• ν›„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

 

 

1. HTTP: Hyper Text Transfer Protocol. 즉 톡신 κ·œμ•½μ΄λ‹€.

2. μ–΄λ–€ 톡신 κ·œμ•½μ΄λƒ? HTTP λ©”μ‹œμ§€μ— λͺ¨λ“  것을 전솑할 수 μžˆλ‹€.

3. 말 κ·ΈλŒ€λ‘œ 거의 λͺ¨λ“  ν˜•νƒœμ˜ 데이터λ₯Ό 전솑할 수 μžˆλ‹€. 

  • HTML, TEXT
  • IMAGE, μŒμ„±, μ˜μƒ, 파일
  • JSON, XML (API)

4. μ„œλ²„κ°„μ˜ 데이터λ₯Ό μ£Όκ³  받을 λ•Œλ„ λŒ€λΆ€λΆ„ HTTPλ₯Ό μ‚¬μš©ν•œλ‹€. (ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에도 λ‹Ήμ—°νžˆ HTTP μ‚¬μš©)

5. HTTP 역사

좜처: κ°•μ˜μžλ£Œ

6. TCP ν”„λ‘œν† μ½œ μœ„μ—μ„œ λ™μž‘: HTTP/1.1, HTTP/2

7. UDP ν”„λ‘œν† μ½œ μœ„μ—μ„œ λ™μž‘: HTTP/3 

-> TCPλŠ” 3way handshakeλ“± 속도가 λΉ λ₯Έ λ©”μ»€λ‹ˆμ¦˜μ΄ μ•„λ‹ˆκΈ°μ—, μ„±λŠ₯ κ°œμ„ ν•œ μ—…κ·Έλ ˆμ΄λ“œ 버전을 UDPμœ„μ—μ„œ ꡬ동.

 

8. μ•„λž˜ μ‚¬μ§„μ—μ„œ 보듯, google은 h2, h3 λ²„μ „μ—…λœ ν”„λ‘œν† μ½œμ„ 주둜 μ‚¬μš©ν•œλ‹€. (naverλŠ” h1, h2 λͺ¨λ‘ μ‚¬μš©)

 

 

9. ❗️HTTP νŠΉμ§•β—οΈ

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

- stateless(λ¬΄μƒνƒœ) ν”„λ‘œν† μ½œ, λΉ„μ—°κ²°μ„±

- HTTP λ©”μ‹œμ§€

- λ‹¨μˆœν•¨, ν™•μž₯ κ°€λŠ₯

 

10. ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ 뢄리 ꡬ쑰

-> ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­μ„ 보내고, μ„œλ²„λŠ” 응닡을 보낸닀 (request - response)

 

11. μ΄λ ‡κ²Œ λΆ„λ¦¬λœ ꡬ쑰가 μ€‘μš”ν•œ μ΄μœ λŠ”, 각각(ν΄λΌμ΄μ–ΈνŠΈ, μ„œλ²„) λ…λ¦½μ μœΌλ‘œ 진화할 수 있기 λ•Œλ¬Έμ΄λ‹€.

-> ν΄λΌμ΄μ–ΈνŠΈλŠ” UI와 μ‚¬μš©μ„±μ— μ§‘μ€‘ν•˜μ—¬ 진화, μ„œλ²„λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 데이터, λŒ€μš©λŸ‰ 처리 μ„±λŠ₯ κ°œμ„ μ— μ§‘μ€‘ν•˜λ©° 진화

-> ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” μ„œλ‘œμ—κ²Œ λ…λ¦½μ μ΄λ―€λ‘œ μ„œλ‘œμ—κ²Œ 영ν–₯을 μ£Όμ§€μ•ŠμœΌλ©΄μ„œ 진보할 수 있게 λœλ‹€.

 

12. stateless vs stateful

->stateless: λ¬΄μƒνƒœ /  stateful: μƒνƒœμœ μ§€

 

13. stateful(μƒνƒœμœ μ§€) μ˜ˆμ‹œ

  1. ν΄λΌμ΄μ–ΈνŠΈκ°€ 100λ§Œμ›μ§œλ¦¬ λ…ΈνŠΈλΆ 2개λ₯Ό 사겠닀고 Aμ„œλ²„μ— 정보λ₯Ό λ„˜κ²Όλ‹€.
  2. stateful ν”„λ‘œν† μ½œμ€ 100λ§Œμ›μ§œλ¦¬ λ…ΈνŠΈλΆ 2κ°œλΌλŠ” 정보λ₯Ό μœ μ§€ν•˜κ³  μžˆλ‹€(μƒνƒœμœ μ§€)
  3. 그런데 Aμ„œλ²„κ°€ κ°‘μžκΈ° 터져버렸고, μ€‘κ³„μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό Bμ„œλ²„λ‘œ λ„˜κΈ΄λ‹€.
  4. μƒνƒœμœ μ§€ ν”„λ‘œν† μ½œμ—μ„œλŠ” μ„œλ²„κ°€ 정보λ₯Ό μœ μ§€ν•˜κΈ° λ•Œλ¬Έμ—, Bμ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ 무엇인지 μ•Œ 수 μ—†λ‹€. -> 문제

14. stateless(λ¬΄μƒνƒœ) μ˜ˆμ‹œ

  1. μœ„μ˜ μ˜ˆμ‹œμ™€ 달리 μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 정보λ₯Ό μ „ν˜€ μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€(λ¬΄μƒνƒœ:stateless)
  2. λŒ€μ‹  ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ™€ 톡신할 λ•Œλ§ˆλ‹€ 정보λ₯Ό λ„˜κΈ΄λ‹€(100λ§Œμ›μ§œλ¦¬ λ…ΈνŠΈλΆ 2개 μ‚΄κ±°μ•Ό)
  3. 처음 정보λ₯Ό λ„˜κ²¨λ°›μ€ μ„œλ²„κ°€ ν„°μ Έμ„œ λ‹€λ₯Έ μ„œλ²„μ™€ 톡신을 ν•˜λ”λΌλ„ λ¬Έμ œκ°€ μ—†λ‹€ -> μ •λ³΄λŠ” μ–΄μ°¨ν”Ό ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μ‹œ 보내주기에

15. 즉, HTTPλŠ” stateless protocol을 μ‚¬μš©ν•¨μœΌλ‘œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ κΈ‰κ²©νžˆ λͺ°λ € μ„œλ²„ μž₯μ• κ°€ μΌμ–΄λ‚˜λŠ” 상황에도 λ‹€λ₯Έ μ„œλ²„λ₯Ό μ¦μ„€ν•˜μ—¬ λŒ€μ²˜ν•  수 μžˆλŠ” λŠ₯λ ₯을 μ§€λ‹Œλ‹€. (아무 μ„œλ²„λ‚˜ ν˜ΈμΆœν•΄λ„ λ˜κΈ°μ—)

 

16. μ΄λŠ” 곧 stateless ν”„λ‘œν† μ½œμ—μ„œλŠ” λ¬΄ν•œν•œ μ„œλ²„ 증섀이 κ°€λŠ₯함을 λœ»ν•œλ‹€. 이λ₯Ό μŠ€μΌ€μΌ 아웃이라 μΉ­ν•œλ‹€

 

17. stateless의 κ°€μž₯ 큰 단점은 데이터λ₯Ό λ„ˆλ¬΄ 많이 λ³΄λ‚Έλ‹€λŠ” 것.

 

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

-> 둜그인 같은 경우 μƒνƒœ μœ μ§€λ₯Ό ν•΄μ•Όλ§Œ ν•œλ‹€.

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

 

19. HTTP λ©”μ‹œμ§€: κ±°μ˜ λͺ¨λ“  ν˜•νƒœμ˜ 데이터λ₯Ό 전솑할 수 μžˆλŠ” ν”„λ‘œν† μ½œμ΄λ‹€.

-> HTTP λ©”μ‹œμ§€μ˜ κ΅¬μ‘°λŠ” λ„€ λΆ€λΆ„μœΌλ‘œ λ‚˜λ‰˜μ–΄ μžˆλ‹€.

  1. μ‹œμž‘λΌμΈ, start-line
  2. 헀더, header
  3. 곡백 라인, empty line(CRLF)
  4. λ©”μ‹œμ§€ λ°”λ””, message body

 

 

20. μ‹œμž‘ 라인

-> μ‹œμž‘λΌμΈ (start-line) = request-line / status-line 으둜 ꡬ성

 

1) μš”μ²­ λ©”μ‹œμ§€μ˜ μ‹œμž‘λΌμΈ : request-line

request-line은 μœ„μ™€κ°™μ΄ κ΅¬μ„±λΌμžˆλ‹€.

  • HTTP λ©”μ„œλ“œ: μ„œλ²„κ°€ μˆ˜ν–‰ν•΄μ•Όν•  λ™μž‘μ„ μ§€μ •ν•΄μ„œ μš”μ²­ν•œλ‹€(ex, GET, POST, PUT, DELETE ... )
  • μš”μ²­ λŒ€μƒ: absolute-path[?query] (μ ˆλŒ€κ²½λ‘œ[?쿼리(쑰건문)])
  • HTTP version: μœ„ μ˜ˆμ‹œμ˜ 경우 HTTP 1.1 version

2) 응닡 λ©”μ‹œμ§€μ˜ μ‹œμž‘λΌμΈ : status-line

 

 

21. ν—€λ”

-> HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  뢀가정보

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

 

22. λ©”μ‹œμ§€ λ°”λ”” (HTTP message body)

-> HTTPκ°€ μ‹€μ œλ‘œ 전솑할 데이터

-> HTML, image, video, JSON λ“±λ“± byte둜 ν‘œν˜„ν•  수 μžˆλŠ” λͺ¨λ“  데이터 전솑이 κ°€λŠ₯

 

 

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