3. HTTP

2020. 12. 31. 13:02ใ†๐ŸŒ Web

๋ณธ ํฌ์ŠคํŒ…์€ ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค, ๊น€์˜ํ•œ ๋‹˜์˜ '๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ 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, ํฌ๊ฒŒ ์„ฑ๊ณตํ•˜๋Š” ํ‘œ์ค€ ๊ธฐ์ˆ ์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ธฐ์ˆ .