๐Ÿ’ป Computer Science

03. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ๋ชจ๋“ ๊ฒƒ์ด HTTP

์• ์ •์“ฐ 2021. 5. 3. 13:52

2021.05.03 - [BASIC] - 01. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ

2021.05.03 - [๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ] - 02. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - URI

 

HTTP - HyperText Transfer Protocol

HTML, TEXT, IMAGE, ์Œ์„ฑ, ์˜์ƒ, ํŒŒ์ผ, JSON, XML ๋“ฑ๋“ฑ ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

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

 

HTTP์˜ ๋ฐœ์ „

 

HTTP/0.9(GET๋งŒ ์ง€์› HTTP ํ—ค๋” X)

-> HTTP/1.0 (๋ฉ”์„œ๋“œ, ํ—ค๋” ์ถ”๊ฐ€)

-> HTTP/1.1 (๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฒ„์ „)   -> TCP๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ

-> HTTP/2 (์„ฑ๋Šฅ๊ฐœ์„ )  -> TCP๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ

-> HTTP/3 (์ง„ํ–‰์ค‘: TCP ๋Œ€์‹ ์— UDP์‚ฌ์šฉ, ์„ฑ๋Šฅ ๊ฐœ์„ )  -> UDP๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ

 

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

Request / Response๊ตฌ์กฐ

 

1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์ด ์˜ฌ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ

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

 

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•˜๋‚˜๋กœ ๋˜์–ด์žˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋˜์—ˆ๋‹ค. 

-> ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„๊ฐ€ ์ง‘์ค‘, ์‚ฌ์šฉ์„ฑ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง‘์ค‘ํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ์ง‘์ค‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ ) ์„œ๋น„์Šค ํŠธ๋ž˜ํ”ฝ์ด ๊ฐ‘์ž๊ธฐ ํŠˆ ๋•Œ ํด๋ผ์ด์–ธํŠธ ์ˆ˜์ • ํ•„์š” ์—†์ด ์„œ๋ฒ„์—์„œ ์•„ํ‚คํ…์ณ ๋ณ€๊ฒฝ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

1. ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ 

 

๋ฌด์ƒํƒœ๋Š” ๋ฌด์Šจ๋œป์ผ๊นŒ?

Stateful๊ณผ Stateless์˜ ์ฐจ์ด

Stateful -> ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์—ฌ ๋‹ค์Œ ์š”์ฒญ์ด ๋“ค์–ด์™€๋„ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Stateless -> ์‘๋‹ต ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 

                -> ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—  ๋ฌดํ•œ ์„œ๋ฒ„ ์ฆ์„ค์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

                -> ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์•„ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ง€์•Š์œผ๋ฉด ๋ชจ๋ฅธ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด session ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์„œ๋ฒ„์—์„œ session์„ ์ €์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ token์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Request ๋งˆ๋‹ค token์„ ํ™•์ธํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.

 

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

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

- ํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผํ•œ๋‹ค. ( ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์•ผ ํ•จ )

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

   -> ๋ธŒ๋ผ์šฐ์ €์˜ ์ฟ ํ‚ค์™€ ์„œ๋ฒ„์˜ ์„ธ์…˜์„ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. -> ์ƒํƒœ ์œ ์ง€๋Š” ์ตœ์†Œํ•œ๋งŒ ์‚ฌ์šฉ

 

   -> ๋ฌด์Šจ๋œป์ผ๊นŒ?

์‚ฌ์šฉ์ž๊ฐ€ ์›น์„œ๋ฒ„์— ์ ‘๊ทผ ํ• ๋•Œ ๋ณด๋‚ด๋Š” Request Header ์ฟ ํ‚ค์— ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ์…˜ID๊ฐ’์„ ์ง‘์–ด ๋„ฃ์–ด ์ด ID์˜ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์‹๋ณ„ ๋ฐ ์ƒํƒœ ์œ ์ง€๋ฅผ ๋„์™€์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์„ธ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค.

์„ธ์…˜ID๋Š” ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์˜๋ฏธ์—†๋Š” ๋ฌธ์ž๋งŒ๋“ค๋กœ ๋งŒ๋“ค์–ด์ ธ ์ฟ ํ‚ค์™€ ์„œ๋ฒ„ ์ €์žฅ์†Œ์— ๋™์‹œ์—์ €์žฅ๋˜๊ณ , ํด๋ผ์ด์–ธํŠธ์˜ Request๋งˆ๋‹ค ์„ธ์…˜ID๋ฅผ ์„œ๋ฒ„์ธก์— ์ €์žฅ๋œ ์„ธ์…˜ID์™€ ๋น„๊ตํ•˜์—ฌ ์‹๋ณ„๋œ๋‹ค.

์ถœ์ฒ˜ medium.com/@ddinggu/session์„-ํ™œ์šฉํ•œ-๋กœ๊ทธ์ธ-์ƒํƒœ์œ ์ง€-df31db7f1089

 

๋ฌธ์ œ์ ์€ ์„œ๋ฒ„์—์„œ ๋งŽ์€ ์„ธ์…˜์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ธ์…˜์„ ์ €์žฅํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๋‘๊ฑฐ๋‚˜, ํ† ํฐ ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ) jwt

 

 

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

 

์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๋ชจ๋ธ์ผ ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ž์›์ด ๊ณ„์† ์†Œ๋ชจํ•˜์ง€๋งŒ

์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋น„ ์—ฐ๊ฒฐ์„ฑ ๋ชจ๋ธ์€ ์ตœ์†Œํ•œ์˜ ์ž์›์„ ์œ ์ง€ํ•˜๊ณ  ์š”์ฒญํ•  ๋•Œ๋งŒ ์—ฐ๊ฒฐํ•œ๋‹ค.

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

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

- 1์‹œ๊ฐ„ ๋™์•ˆ ์ˆ˜์ฒœ๋ช…์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์€ ์ˆ˜์‹ญ๊ฐœ ์ดํ•˜๋กœ ๋งค์šฐ ์ ๋‹ค. -> ํ•œ ์š”์ฒญ์„ ์—ฐ์†ํ•ด์„œ ๋ณด๋‚ด์ง€ ์•Š๋Š” ์ด์ƒ

- ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ๋งˆ๋‹ค 

TCP/IP ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•œ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๋ฉด HTML, javascript, css, img  ๋“ฑ ์ˆ˜๋งŽ์€ ์ž์›์ด ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ ๋œ๋‹ค. -> HTTP ์ง€์† ์—ฐ๊ฒฐ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ

 

HTTP ์ดˆ๊ธฐ - ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ž์›๋‚ญ๋น„

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

 

HTTP ํ˜„์žฌ - ์ง€์† ์—ฐ๊ฒฐ

HTML ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ฐ›์„ ๋•Œ ๊นŒ์ง€ ์ง€์† ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

 

 

HTTP ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์กฐ

 

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

start-line ์‹œ์ž‘๋ผ์ธ                  GET /search?q=heelo&hl=ko HTTP/1.1     HTTP ๋ฉ”์„œ๋“œ, ์š”์ฒญ๋Œ€์ƒ, HTTP Version

header ํ—ค๋”                            Host: www.google.com

empty line ๊ณต๋ฐฑ๋ผ์ธ(crlf)

message body                        POST์ผ ๊ฒฝ์šฐ BODY, ๋ฌผ๋ก  GET๋„ ๋˜์ง€๋งŒ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ.

 

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

start-line ์‹œ์ž‘๋ผ์ธ                  HTTP/1.1 200 OK                                     HTTP Version, HTTP ์ƒํƒœ์ฝ”๋“œ, ์ด์œ  ๋ฌธ๊ตฌ

header ํ—ค๋”                            Content-Type: text/html;charset=UTF-8

                                               Content-Length: 3423

empty line ๊ณต๋ฐฑ๋ผ์ธ(crlf)

message body                        <html> <body>...</body></html>

 

 

header์˜ ์šฉ๋„

HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ, ๋ฐ”๋””์˜ ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ, ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ ์ •๋ณด ๋“ฑ๋“ฑ.. ํ•„์š”์‹œ ์ž„์˜์˜ ํ—ค๋” ์ถ”๊ฐ€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

body์˜ ์šฉ๋„

์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค. HTML ๋ฌธ์„œ, ์ด๋ฏธ์ง€, ์˜์ƒ, JSON ๋“ฑ๋“ฑ ...

๋‹จ์ˆœํ•˜๋ฉฐ ํ™•์žฅ๊ฐ€๋Šฅํ•˜๋‹ค 

 

๋ฐ˜์‘ํ˜•