HTTP ๊ธฐ์ด [URL/Stateless/๋น์ฐ๊ฒฐ์ฑ]
HTTP๋ฅผ ๋ณด๊ธฐ ์ ์ ๋จผ์ ๊ฐ๋จํ URL์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
โURL์ ๋ฌธ๋ฒ
scheme://[userinfo@]host[:port][/path][?query/[#fragment]
ex ) https://www.google.com:433/search?q=hello&hl=ko
ํ๋กํ ์ฝ, ํธ์คํธ๋ช , ํฌํธ๋ฒํธ, ํจ์ค, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ
[ scheme ]
- ์ฃผ๋ก ํ๋กํ ์ฝ ์ฌ์ฉ (http, https ...)
- http๋ 80ํฌํธ, https๋ 433 ํฌํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, http์ https๋ ๋์ค์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ต๊ฐ๋ฅํ๋ค.
โ https๋ http์ ๋ณด์์ด ์ถ๊ฐ๋ ๊ฒ์ด๋ค.
โ ํ๋กํ ์ฝ์ด๋? ์ด๋ค ๋ฐฉ์์ผ๋ก ์์์ ์ ๊ทผํ ๊ฒ์ธ๊ฐ ํ๋ ์ฝ์ ๊ท์น์ด๋ค.
[ userinfo ]
- URL์ ์ฌ์ฉ์์ ๋ณด๋ฅผ ํฌํจํด์ ์ธ์ฆ
- ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
[ host ]
- ํธ์คํธ๋ช
- ๋๋ฉ์ธ๋ช ๋๋ IP ์ฃผ์๋ฅผ ์ง์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. (www.google.com)
[ PORT ]
- ์ผ๋ฐ์ ์ผ๋ก๋ ์๋ตํ๊ณ , ์๋ต์ http๋ 80, https๋ 433์ด๋ค.
[ path ]
- ๋ฆฌ์์ค ๊ฒฝ๋ก, ๊ณ์ธต์ ๊ตฌ์กฐ
ex ) /items/iphone8
[ query ]
- key = value ํํ
- ?๋ก ์์ํ๋ฉฐ, &๋ก ์ฌ๋ฌ๊ฐ ์ถ๊ฐํ ์ ์๋ค.
- query parameter, query string ์ผ๋ก ๋ถ๋ฆฐ๋ค. ( ๋ค ๋ฌธ์๋ก ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ )
[ fragment ]
- html ๋ด๋ถ ๋ถ๋งํฌ ๋ฑ์ ์ฌ์ฉ
- ์๋ฒ์ ์ ์ํ๋ ์ ๋ณด๊ฐ ์๋๋ค.
HTTP๋ HyperText Transfer Protocol์ ์ฝ์์ด๋ค.
์ฃผ๋ก HTML๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ์ง๋ง, ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ๋ค.
๐HTTP์ ํน์ง
- ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ
- ๋ฌด์ํ ํ๋กํ ์ฝ(stateless), ๋น์ฐ๊ฒฐ์ฑ
- HTTP ๋ฉ์ธ์ง
- ๋จ์ํจ, ํ์ฅ๊ฐ๋ฅ
[ ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ ]
- Request Response ๊ตฌ์กฐ
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๋๊ธฐํ๋ฉด ์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋ตํ๋ค.
- ํด๋ผ์ด์ธํธ๋ ui/ux๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ ์ง์คํ๋ค.
- ์๋ฒ๋ ๋ณต์กํ ๋น์ง๋์ค๋ก์ง๋ง ๊ตฌํํ๋ค.
์ด๋ ๊ฒ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ๋๋๊ฒ ๋ ๊ฒฝ์ฐ์๋ ์์ชฝ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์งํํ ์ ์๋ค.
[ ๋ฌด์ํ ํ๋กํ ์ฝ (Stateless) ]
๋ฌด์ํ ํ๋กํ ์ฝ์ด๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋ ๊ฒ์ด๋ค.
Stateful ๐ Stateless
๐Stateful๐
๋ง์ฝ ๊ฐ๊ฒ์ ๊ฐ๋ค๊ณ ์๊ฐํด๋ณด์
์๋ : ์ฌ๊ณผ ์ฃผ์ธ์.
A : ๋ช ๊ฐ ๋๋ฆด๊น์?
์๋ : 2๊ฐ ์ฃผ์ธ์
A : 2์ฒ์์ ๋๋ค.
์ค๊ฐ์ ์ ์์ด ๋ฐ๋๋ค๋ฉด?
์๋ : ์ฌ๊ณผ ์ฃผ์ธ์.
A : ๋ช ๊ฐ ๋๋ฆด๊น์?
์๋ : 2๊ฐ ์ฃผ์ธ์.
B : ๋ฌด์์ 2๊ฐ ๋๋ฆด๊น์?
์ํ๋ฅผ ์ ์งํ์ ๊ฒฝ์ฐ์๋ ์ค๊ฐ์ ์ ์์ด ๋ฐ๋๋ฉด ์์ฌ์ํต์ด ๋์ง ์๋๋ค.
๐Stateless๐
๋ฐ๋๋ก ๋ฌด์ํ๋ก ์ ์งํ์ ๊ฒฝ์ฐ์๋ ์ค๊ฐ์ ์ ์์ด ๋ฐ๊ปด๋ ์์ฌ์ํต์ด ๊ฐ๋ฅํ๋ค.
์๋ : ์ฌ๊ณผ ์ฃผ์ธ์.
A : ๋ช ๊ฐ๋๋ฆด๊น์?
์๋ : ์ฌ๊ณผ 2๊ฐ ์ฃผ์ธ์.
B : 2์ฒ์ ์ ๋๋ค.
์ํ๋ฅผ ์ ์งํ์ ๊ฒฝ์ฐ์๋ ์ค๊ฐ์ ์๋ฒ๊ฐ ๋ฐ๋๋ฉด ์ ๋ณด๊ฐ ์ ๋๋ก ์ ๋ฌ๋์ง ์๋๋ค.
๋ฐ๋๋ก ๋ฌด์ํ๋ ์๋ฒ๊ฐ ์ค๊ฐ์ ๋ฐ๋์ด๋ ๊ด์ฐฎ๋ค ๐ ๋ฌดํํ ์๋ฒ ์ฆ์ค ๊ฐ๋ฅ
โ ํ๊ณ
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ก๊ทธ์ธํ๋ค๋ ์ํ๋ฅผ ์๋ฒ์ ์ ์งํด์ผํ๋ค.
์ด๋ด๊ฒฝ์ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ฟ ํค์ ์๋ฒ ์ธ์ ๋ฑ์ ์ด์ฉํด์ ์ํ๋ฅผ ์ ์งํ๋ค.
์ด๋ฐ๊ฒ๋ค์ ์ ์ธํ๊ณ ๋ ์ต๋ํ ๋ฌด์ํ๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ข๋ค.
โ ์ค๋ฌด์์ ์ฌ์ฉํ๋ stateless
00์ ์ ์ฐฉ์ ์ด๋ฒคํธ๋ฅผ ํ ๊ฒฝ์ฐ์๋ ์๋ง๋ช ์ด ๋์์ ์์ฒญํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
์ด๋ด ๊ฒฝ์ฐ ์์ ํ ์๋ฒ์ ๋์์ ์ ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ง ์ํด์, ์ด๊ธฐ ํ์ด์ง๋ ์ ์ HTML ํ์ด์ง๋ฅผ ๋ง๋ ๋ค.
์ ์ ํ์ด์ง์ ์ ์ํ๋ ๋ฒํผ์ ๋ง๋ ๋ค๋ฉด, ๊ทธ ๋ง์ ์ฌ๋๋ค์ด ์์ ํ ๋์์ ์๋ฒ์ ์ ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
[ ๋น์ฐ๊ฒฐ์ฑ (connectionless) ]
๐ค ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ชจ๋ธ ๐ค
๐ค์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ ๐ค
- HTTP๋ ๊ธฐ๋ณธ์ด ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ด ๋จ์ ์ดํ์ ๋น ๋ฅธ ์๋๋ก ์๋ตํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ๋ง์ ์ฌ๋์ด ์์ ํ ๋์๊ฐ๋์ ์ ์ํ๋ ๊ฒฝ์ฐ๋ ๊ทนํ ๋๋ฌผ๋ค.
- ์๋ฒ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๐ ํ๊ณ
- TCP/IP ์ฐ๊ฒฐ์ ์๋ก ๋งบ์ด์ผํ๋ค. (3 way handshake ์๊ฐ์ด ๋งค์ฐ ๋ง์ด ๋ฆ)
- HTML๋ฟ๋ง ์๋๋ผ CSS, ์ด๋ฏธ์ง, ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฑ ๋ถ๋ฌ์ฌ ๊ฒ์ด ๋ง๋ค.
์ด ๋ฌธ์ ๋ฅผ HTTP์ง์ ์ฐ๊ฒฐ(Persistent Connections)๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
http ์ง์ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ฉด ์๋ ์ด๋ฌ๋ ๊ณผ์ ์ด,
์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๋ณ๊ฒฝ๋๋ค.
[ HTTP ๋ฉ์ธ์ง ]
๊ธฐ๋ณธ์ ์ธ HTTP ๋ฉ์ธ์ง ๊ตฌ์กฐ๋ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ๋ค.
ํด๋ผ์ด์ธํธ๋ HTTP ์์ฒญ๋ฉ์ธ์ง๋ฅผ ์๋ฒ์๊ฒ, ์๋ฒ๋ HTTP ์๋ต ๋ฉ์ธ์ง๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
์ด๋ฐ HTTP ๋ฉ์ธ์ง๋ TCP/IP ํจํท์ผ๋ก ๊ฐ์ธ์ ธ์ ๋ณด๋ธ๋ค.
๊ตฌ๊ธ ์๋ฒ์ ๋์ฐฉํ๋ฉด, ํจํท์ TCP/IP ํจํท์ ๋ค ๊น์ ๋ฒ๋ฆฌ๊ณ HTTP๋ฅผ ํ์ธํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , ์๋ฒ์์ HTTP์๋ต ๋ฉ์ธ์ง๋ฅผ ํจํท์ ์ธ์ ๋ณด๋ธ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋ฉ์ธ์ง๋ฅผ ๋ต์ ๋ฐ์ผ๋ฉด ๋ง๋ค์ด๋ธ ์๋ต๋ฉ์ธ์ง๋ฅผ ๋ ๋๋งํด์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
๐ ์์ฒญ ๋ฉ์ธ์ง ๐
GET/search?q=hello@hl=ko HTTP/1.1
Host: www.google.com
HTTP ๋ฉ์๋
์ข ๋ฅ
- GET : ๋ฆฌ์์ค ์กฐํ
- POST : ์์ฒญ ๋ด์ญ ์ฒ๋ฆฌ
- PUT
- DELETE
์์ฒญ๋์
- ์ ๋๊ฒฝ๋ก ="/"๋ก ์์ํ๋ ๊ฒฝ๋ก
HTTP ๋ฒ์
๐ ์๋ต๋ฉ์ธ์ง ๐
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
HTTP ๋ฒ์
HTTP ์ํ ์ฝ๋ : ์์ฒญ ์ฑ๊ณต, ์คํจ๋ฅผ ํ์ํจ
- 200 : ์ฑ๊ณต
- 400 : ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ
- 500: ์๋ฒ ๋ด๋ถ ์ค๋ฅ
์ด์ ๋ฌธ๊ตฌ : ์ซ์๋ง ์์ผ๋ฉด ํท๊ฐ๋ฆด๊น๋ด ์งง์ ์ํ ์ฝ๋ ์ค๋ช ๋ฌธ๊ตฌ
HTTP ํค๋
- HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด
- ๋ฉ์ธ์ง body ๋นผ๊ณ ํ์ํ ๋ฉํ๋ฐ์ดํฐ๋ ๋ค ๋ค์ด์๋ค. ( ex) ๋ฉ์ธ์ง ๋ฐ๋ ๋ด์ฉ, ๋ฐ๋ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ...)
HTTP ๋ฉ์ธ์ง ๋ฐ๋
- ์ค์ ์ ์กํ ๋ฐ์ดํฐ
- HTML ๋ฌธ์, ์ด๋ฏธ์ง, ์์, JSON ๋ฑ๋ฑ byte๋ก ํํํ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
- ์์ถํด์ ๋ณด๋ด๋ฉด ์์ถ๋ ๋ด์ฉ์ด ๋ค์ด์๋ค.
์ด ํฌ์คํ ์ ์ธํ๋ฐ ๊น์ํ๋์ ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์์ ๋ฃ๊ณ ์์ฑ๋ ํฌ์คํ ์ ๋๋ค.