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

 

1. ๋ชจ๋“  ๊ฒƒ์ด HTTP

- HTML, TEXT

- IMAGE, ์Œ์„ฑ, ์˜์ƒ, ํŒŒ์ผ

- JSON, XML (API)

- ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ

- ์„œ๋ฒ„๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋„ ๋Œ€๋ถ€๋ถ„ HTTP ์‚ฌ์šฉ

 

HTTP/1.1 ๋ฒ„์ „ (1997)

- ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ 

 

TCP ๊ธฐ๋ฐ˜ : HTTP/1.1, HTTP/2

UDP ๊ธฐ๋ฐ˜ : HTTP/3

-> 2,3 ์ ์  ์ฆ๊ฐ€

 

ํ™•์ธํ•˜๋Š”๋ฒ• : ํฌ๋กฌ - F12 - Network - ์˜ค๋ฅธ์ชฝ๋ฒ„ํŠผ - ํ”„๋กœํ† ์ฝœ

 

HTTP ํŠน์ง•

- ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ

- ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ(์Šคํ…Œ์ด์Šค ๋ฆฌ์Šค), ๋น„์—ฐ๊ฒฐ์„ฑ

- HTTP ๋ฉ”์‹œ์ง€

- ๋‹จ์ˆœํ•จ, ํ™•์žฅ ๊ฐ€๋Šฅ


2. ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ

- Request / Response ๊ตฌ์กฐ

- ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋Œ€๊ธฐ

- ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‘๋‹ต

- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ->    ์„œ๋ฒ„์— ๋ฐ€์–ด๋„ฃ์Œ
- UI, ์‚ฌ์šฉ์„ฑ                  ->    ํด๋ผ์ด์–ธํŠธ์— ์ง‘์ค‘

-> ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ™” ๊ฐ€๋Šฅ

3. ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ (Stateless, ์Šคํ…Œ์ด์Šค๋ฆฌ์Šค)

[HTTP๋Š” ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ]

 

- ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ  ๋ณด์กด X

์žฅ์ ) ์„œ๋ฒ„ ํ™•์žฅ์„ฑ ๋†’์Œ (์Šค์ผ€์ผ ์•„์›ƒ)

๋‹จ์ ) ํด๋ผ์ด์–ธํŠธ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก

 

Stateful, Stateless ์ฐจ์ด

- Stateful    : ์ƒํƒœ ์œ ์ง€

- Stateless : ์ƒํƒœ ์œ ์ง€ X

 

[๋ฌด์ƒํƒœ ์˜ˆ์‹œ]

- ์ƒํƒœ์œ ์ง€ : ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ ์›์œผ๋กœ ๋ฐ”๋€Œ๋ฉด ์•ˆ๋จ

                   (์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ ์›์œผ๋กœ ๋ฐ”๋€” ๋•Œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ์ ์›์—๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค˜์•ผํ•จ)

- ๋ฌด์ƒํƒœ : ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ ์›์œผ๋กœ ๋ฐ”๋€Œ์–ด๋„ ๋จ

                > ๊ฐ‘์ž๊ธฐ ๊ณ ๊ฐ์ด ์ฆ๊ฐ€ํ•ด๋„ ์ ์› ๋Œ€๊ฑฐ ํˆฌ์ž… ๊ฐ€๋Šฅ

                > ๊ฐ‘์ž๊ธฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์ฆ๊ฐ€ํ•ด๋„ ์„œ๋ฒ„ ๋Œ€๊ฑฐ ํˆฌ์ž… ๊ฐ€๋Šฅ

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

 

Stateless ์‹ค๋ฌด ํ•œ๊ณ„

- ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด์ƒํƒœ๋กœ ์„ค๊ณ„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

- ๋ฌด์ƒํƒœ        ์˜ˆ) ๋กœ๊ทธ์ธ์ด ํ•„์š”์—†๋Š” ๋‹จ์ˆœํ•œ ์„œ๋น„์Šค ์†Œ๊ฐœ ํ™”๋ฉด

- ์ƒํƒœ์œ ์ง€    ์˜ˆ ) ๋กœ๊ทธ์ธ

- ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ํ–ˆ๋‹ค๋Š” ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์— ์œ ์ง€

- ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค์™€ ์„œ๋ฒ„ ์„ธ์…˜๋“ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ ์œ ์ง€

- ์ƒํƒœ ์œ ์ง€๋Š” ์ตœ์†Œํ•œ๋งŒ ์‚ฌ์šฉ


4. ๋น„ ์—ฐ๊ฒฐ์„ฑ (Connectionelss)

[HTTP๋Š” ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ ์ง€ํ–ฅ]

 

1) ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๋ชจ๋ธ (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ)

- ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ ์œ ์ง€ (์š”์ฒญ-์‘๋‹ต)

- ํด๋ผ์ด์–ธํŠธ 3์ด ์—ฐ๊ฒฐ ์š”์ฒญํ•˜๋Š”๋™์•ˆ ํด๋ผ์ด์–ธํŠธ1,2๋Š” ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๊ณ  ์žˆ์Œ

   -> ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ์„œ๋ฒ„์˜ ์ž์› ์†Œ๋ชจ

 

2) ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ)

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์€ ํ›„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง

 

๋น„ ์—ฐ๊ฒฐ์„ฑ

- HTTP๋Š” ๊ธฐ๋ณธ์ด ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ

- ์ผ๋ฐ˜์ ์œผ๋กœ ์ดˆ ๋‹จ์œ„ ์ดํ•˜์˜ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ต

- 1์‹œ๊ฐ„ ๋™์•ˆ ์ˆ˜์ฒœ๋ช…์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์€ ์ˆ˜์‹ญ๊ฐœ ์ดํ•˜๋กœ ๋งค์šฐ ์ž‘์Œ

  ex) ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ณ„์† ์—ฐ์†ํ•ด์„œ ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์ง€ ์•Š๋Š”๋‹ค

- ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๋น„ ์—ฐ๊ฒฐ์„ฑ ํ•œ๊ณ„์™€ ๊ทน๋ณต

- TCP/IP ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•จ - 3way handshake ์‹œ๊ฐ„ ์ถ”๊ฐ€

- ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๋ฉด HTML ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, JS/css/์ถ”๊ฐ€์ด๋ฏธ์ง€ ๋“ฑ ์ˆ˜ ๋งŽ์€ ์ž์›์ด ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ

- ์ง€๊ธˆ์€ HTTP ์ง€์† ์—ฐ๊ฒฐ (Persistent Connections)๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ

- HTTP/2, HTTP/3์—์„œ ๋” ๋งŽ์€ ์ตœ์ ํ™”

 

HTTP ์ดˆ๊ธฐ - ์—ฐ๊ฒฐ, ์ข…๋ฃŒ ๋‚ญ๋น„

HTTP ์ง€์†์—ฐ๊ฒฐ(Persistent Connections) - ์—ฐ๊ฒฐ-> ์š”์ฒญ/HTML์‘๋‹ต -> ์š”์ฒญ/JS์‘๋‹ต -> ์š”์ฒญ/์ด๋ฏธ์ง€์‘๋‹ต -> ์ข…๋ฃŒ

 

Stateless ๊ธฐ์–ตํ•˜์ž

- ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ์–ด๋ ค์›Œํ•˜๋Š” ์—…๋ฌด

- ๊ฐ™์€ ์‹œ๊ฐ„์— ๋”ฑ ๋งž์ถ”์–ด ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ
ex) ์„ ์ฐฉ์ˆœ ์ด๋ฒคํŠธ, ๋ช…์ ˆ KTX, ์ˆ˜๊ฐ• ์‹ ์ฒญ

5. HTTP ๋ฉ”์‹œ์ง€

[HTTP ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ]

[HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€]

- ์š”์ฒญ ๋ฉ”์‹œ์ง€๋„ body ๋ณธ๋ฌธ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

 

[HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€]

 1) ์‹œ์ž‘๋ผ์ธ (start-line)

[์š”์ฒญ๋ฉ”์‹œ์ง€]

- ๊ตฌ์„ฑ : request-line / status-line

- request-line = <1> method SP(๊ณต๋ฐฑ) <2> request-target SP <3> HTTP-version CRLF(์—”ํ„ฐ)

 

<1> HTTP ๋ฉ”์„œ๋“œ

- ์ข…๋ฅ˜ : GET, POST, PUT, DELETE

- ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋™์ž‘ ์ง€์ •

   > GET    : ๋ฆฌ์†Œ์Šค ์กฐํšŒ

   > POST : ์š”์ฒญ ๋‚ด์—ญ ์ฒ˜๋ฆฌ

 

<2> ์š”์ฒญ ๋Œ€์ƒ

- absolute-path[?query] (์ ˆ๋Œ€๊ฒฝ๋กœ[?์ฟผ๋ฆฌ])

* ์ ˆ๋Œ€๊ฒฝ๋กœ = "/"๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ๋กœ

 

<3> HTTP ๋ฒ„์ „

 

[์‘๋‹ต๋ฉ”์‹œ์ง€]

- ๊ตฌ์„ฑ : request-line / status-line

- status-line = HTTP-version SP status-code SP reason-phrase CRLF

 

<1> HTTP ๋ฒ„์ „

- HTTP ์ƒํƒœ ์ฝ”๋“œ : ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋ƒ„

- 200 : ์„ฑ๊ณต
- 400 : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์˜ค๋ฅ˜
- 500  : ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜

- ์ด์œ  ๋ฌธ๊ตฌ : ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์งง์€ ์ƒํƒœ ์ฝ”๋“œ ์„ค๋ช… ๊ธ€

 

2) HTTP ํ—ค๋”

- header-field = field-name ":" OWS field-value OWS (OWS : ๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)

- filed-name์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์Œ

 

์šฉ๋„

- HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด

- ex) ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ,  ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €) ์ •๋ณด, ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ ์ •๋ณด ๋“ฑ

- ํ‘œ์ค€ ํ—ค๋”๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Œ

- ํ•„์š”์‹œ ์ž„์˜์˜ ํ—ค๋” ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

 

3) ๋ฉ”์‹œ์ง€ ๋ฐ”๋””

 

์šฉ๋„

- ์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ

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

 


๋‹จ์ˆœํ•จ + ํ™•์žฅ ๊ฐ€๋Šฅ

- HTTP๋Š” ๋‹จ์ˆœํ•˜๋‹ค

- HTTP ๋ฉ”์‹œ์ง€๋„ ๋งค์šฐ ๋‹จ์ˆœ

- ํฌ๊ฒŒ ์„ฑ๊ณตํ•˜๋Š” ํ‘œ์ค€ ๊ธฐ์ˆ ์€ ๋‹จ์ˆœํ•˜์ง€๋งŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ธฐ์ˆ !

  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ