[Spring Boot][3] 3. HTTP ๊ธฐ๋ณธ

sorzzzzyยท2021๋…„ 8์›” 31์ผ
0

Spring Boot - RoadMap 1

๋ชฉ๋ก ๋ณด๊ธฐ
18/46
post-thumbnail

๐Ÿท ๋ชจ๋“  ๊ฒƒ์ด HTTP

HyperText Transfer Protocol

1๏ธโƒฃ HTTP ๋ฉ”์‹œ์ง€์— ๋ชจ๋“  ๊ฒƒ์„ ์ „์†ก

  • HTML, TEXT
  • IMAGE, ์Œ์„ฑ, ์˜์ƒ, ํŒŒ์ผ
  • JSON, XML (API)
  • ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ
  • ์„œ๋ฒ„๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋„ ๋Œ€๋ถ€๋ถ„ HTTP ์‚ฌ์šฉ
    โžก๏ธ ์ง€๊ธˆ์€ HTTP ์‹œ๋Œ€!

2๏ธโƒฃ HTTP ์—ญ์‚ฌ

  • HTTP/0.9 1991๋…„: GET ๋ฉ”์„œ๋“œ๋งŒ ์ง€์›, HTTP ํ—ค๋”X
  • HTTP/1.0 1996๋…„: ๋ฉ”์„œ๋“œ, ํ—ค๋” ์ถ”๊ฐ€
  • HTTP/1.1 1997๋…„: ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ, ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฒ„์ „
    RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
  • HTTP/2 2015๋…„: ์„ฑ๋Šฅ ๊ฐœ์„ 
  • HTTP/3 ์ง„ํ–‰์ค‘: TCP ๋Œ€์‹ ์— UDP ์‚ฌ์šฉ, ์„ฑ๋Šฅ ๊ฐœ์„ 

3๏ธโƒฃ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ

  • TCP: HTTP/1.1, HTTP/2
  • UDP: HTTP/3
  • ํ˜„์žฌ HTTP/1.1 ์ฃผ๋กœ ์‚ฌ์šฉ
    HTTP/2, HTTP/3 ๋„ ์ ์  ์ฆ๊ฐ€

4๏ธโƒฃ ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ
  • ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ(์Šคํ…Œ์ด์Šค๋ฆฌ์Šค), ๋น„์—ฐ๊ฒฐ์„ฑ
  • HTTP ๋ฉ”์‹œ์ง€
  • ๋‹จ์ˆœํ•จ, ํ™•์žฅ ๊ฐ€๋Šฅ


๐Ÿท ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ

  • Request Response ๊ตฌ์กฐ
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ๋Œ€๊ธฐ
  • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‘๋‹ต
  • ๋…๋ฆฝ์ ์ธ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค


๐Ÿท Stateful, Stateless

โœ”๏ธ Stateless

  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

โœ”๏ธ Stateful, Stateless ์ฐจ์ด

์ƒํƒœ ์œ ์ง€(Stateful) : ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ ์›์œผ๋กœ ๋ฐ”๋€Œ๋ฉด ์•ˆ๋œ๋‹ค.
(์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ ์›์œผ๋กœ ๋ฐ”๋€” ๋•Œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ์ ์›์—๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.)
๋ฌด์ƒํƒœ(Statekess) : ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ ์›์œผ๋กœ ๋ฐ”๋€Œ์–ด๋„ ๋œ๋‹ค.
- ๊ฐ‘์ž๊ธฐ ๊ณ ๊ฐ์ด ์ฆ๊ฐ€ํ•ด๋„ ์ ์›์„ ๋Œ€๊ฑฐ ํˆฌ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๊ฐ‘์ž๊ธฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์ฆ๊ฐ€ํ•ด๋„ ์„œ๋ฒ„๋ฅผ ๋Œ€๊ฑฐ ํˆฌ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฌด์ƒํƒœ๋Š” ์‘๋‹ต ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค โžก๏ธ ๋ฌดํ•œํ•œ ์„œ๋ฒ„ ์ฆ์„ค ๊ฐ€๋Šฅ

โœ”๏ธ Stateless ์‹ค๋ฌด ํ•œ๊ณ„

  • ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด์ƒํƒœ๋กœ ์„ค๊ณ„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
  • ๋ฌด์ƒํƒœ
    • ์˜ˆ) ๋กœ๊ทธ์ธ์ด ํ•„์š” ์—†๋Š” ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ์†Œ๊ฐœ ํ™”๋ฉด
  • ์ƒํƒœ ์œ ์ง€
    • ์˜ˆ) ๋กœ๊ทธ์ธ
  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ํ–ˆ๋‹ค๋Š” ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์— ์œ ์ง€
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค์™€ ์„œ๋ฒ„ ์„ธ์…˜๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ ์œ ์ง€
  • ์ƒํƒœ ์œ ์ง€๋Š” ์ตœ์†Œํ•œ๋งŒ ์‚ฌ์šฉ


๐Ÿท ๋น„ ์—ฐ๊ฒฐ์„ฑ(connectionless)

โœ”๏ธ ๋น„์—ฐ๊ฒฐ์„ฑ ์ด๋ž€?

  • HTTP๋Š” TCP/IP์™€ ๋‹ค๋ฅด๊ฒŒ ๊ธฐ๋ณธ์ด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ(์ดˆ ๋‹จ์œ„ ์ดํ•˜์˜ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ตํ•จ!)
  • 1์‹œ๊ฐ„ ๋™์•ˆ ์ˆ˜์ฒœ๋ช…์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ํ•˜๋”๋ผ๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์€ ์ˆ˜์‹ญ๊ฐœ ์ดํ•˜๋กœ ๋งค์šฐ ์ž‘๋‹ค
  • ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

โœ”๏ธ ํ•œ๊ณ„์™€ ๊ทน๋ณต

  • TCP/IP ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•จ โžก๏ธ 3 way handshake ์‹œ๊ฐ„์ด ์ถ”๊ฐ€
  • ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๋ฉด HTML ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, css, ์ถ”๊ฐ€ ์ด๋ฏธ์ง€ ๋“ฑ ์ˆ˜ ๋งŽ์€ ์ž์›์ด ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ ๋จ โžก๏ธ ๋น„ํšจ์œจ์ 
  • ์ง€๊ธˆ์€ HTTP ์ง€์† ์—ฐ๊ฒฐ(Persistent Connections)๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • HTTP/2, HTTP/3์—์„œ ๋” ๋งŽ์€ ์ตœ์ ํ™”


๐Ÿท HTTP ๋ฉ”์‹œ์ง€

HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ํ˜•์‹์„ ๊ฐ€์ง„๋‹ค!

1๏ธโƒฃ ์‹œ์ž‘ ๋ผ์ธ - ์š”์ฒญ ๋ฉ”์‹œ์ง€

  • HTTP ๋ฉ”์„œ๋“œ (GET: ์กฐํšŒ)
  • ์š”์ฒญ ๋Œ€์ƒ (/search?q=hello&hl=ko)
  • HTTP Version

โœ”๏ธ HTTP ๋ฉ”์„œ๋“œ

  • ์ข…๋ฅ˜: GET, POST, PUT, DELETE...
  • ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋™์ž‘ ์ง€์ •

โœ”๏ธ HTTP ์š”์ฒญ ๋Œ€์ƒ

  • absolute-path?query
  • ์ ˆ๋Œ€๊ฒฝ๋กœ= "/" ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ๋กœ

2๏ธโƒฃ ์‹œ์ž‘ ๋ผ์ธ - ์‘๋‹ต ๋ฉ”์‹œ์ง€

  • HTTP ๋ฒ„์ „
  • HTTP ์ƒํƒœ ์ฝ”๋“œ: ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • 200 : ์„ฑ๊ณต
    • 400 : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์˜ค๋ฅ˜
    • 500 : ์„œ๋ฒ„ ์˜ค๋ฅ˜
  • ์ด์œ  ๋ฌธ๊ตฌ : ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์งง์€ ์ƒํƒœ ์ฝ”๋“œ ์„ค๋ช… ๊ธ€

3๏ธโƒฃ HTTP ํ—ค๋”

  • HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด
    ์˜ˆ ) ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ๋‚ด์šฉ, ๋ฐ”๋”” ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ, ์š”์ฒญ ๋“ฑ ๋“ฑ .. ๋งค์šฐ ๋งŽ์Œ ^^*

4๏ธโƒฃ HTTP ๋ฉ”์‹œ์ง€ ๋ฐ”๋””

  • ์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ
  • HTML ๋ฌธ์„œ, ์ด๋ฏธ์ง€, ์˜์ƒ, JSON ๋“ฑ๋“ฑ byte๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ

์ญ‰ ์ญ‰ ๋‚˜๊ฐ€๋ด…์‹œ๋‹ค

profile
Backend Developer

0๊ฐœ์˜ ๋Œ“๊ธ€