HTTP #4 ํน์ง๊ณผ ๋ฉ์์ง ๊ตฌ์กฐ
by JiwonDevHypertext Transfer Protocol, ํ์ดํผ ํ ์คํธ ๋ฌธ์(HTML)์ ์ ์กํ๋ ํต์ ๊ท์ฝ
์น ๋ธ๋ผ์ฐ์ ๋ HTTP ์คํ(ํ์ค ์ธํฐํ์ด์ค)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ง๋ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ด๋ค.
์ฆ, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋๋๋ผ๋ HTTP ์คํ์ ์ด์ฉํ๋ฉด ๋ค๋ฅธ ๊ณณ๊ณผ ํต์ ๋ ๊ฐ๋ฅํ๋ค.
# HTTP์ ์๋
์ธํฐ๋ท์ ๋ฐ์์๋๊ฐ ์ ๋ง ์ค์ํ ์ผ๋ถ ์๋ฒ(ex ์จ๋ผ์ธ PC๊ฒ์)๋ฅผ ์ ์ธํ๊ณ ๋ ํ๋์ ๋๋ถ๋ถ์ ์๋น์ค๋ HTTP๋ฅผ ์ด์ฉํด ๋คํธ์ํฌ ํต์ ์ ํ๋ค. ์น์ ์ฌ์ฉ๋๋ [HTML, ์ด๋ฏธ์ง, ์์]์ ๊ธฐ๋ณธ์ด๊ณ [Json, XML] ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ์ ์ ์กํ๊ณ , ์ฌ๋ฌ ์๋ฒ๊ฐ์ ํต์ ์ ํ ๋๋ HTTP ๋ฅผ ์ฌ์ฉํ๋ค.
HTTP๋ ๋น์ฐ๊ฒฐ์ฑ, ๋ฌด์ํ์ฑ, ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ์ด๋ฅผ ํ๋์ฉ ์์๋ณด์.
# ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ตฌ์กฐ
HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๊ณ ์ค๊ณ๋์๋ค. ์ฆ, ์๋ฒ, ํด๋ผ ์์ชฝ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ค๊ณ๋๋ค. ๋น์ฐํ ๊ฒ ๊ฐ์ง๋ง ๊ณผ๊ฑฐ์๋ ์ธํฐ๋ท์ ๋ง์ด ์ฌ์ฉํ๊ธฐ ์ ์๋ ๊ตณ์ด ์๋ฒ ๋ก์ง๊ณผ ํด๋ผ์ด์ธํธ ๋ก์ง์ ๊ตฌ๋ถ์ง์ด ๋ถ๋ฆฌํ ํ์๊ฐ ์์๋ค.
# ์ํ์ ์ง, ๋ฌด์ํ์ฑ(Stateful, Stateless)
HTTP๋ ๋ฌด์ํ ํ๋กํ ์ฝ(Stateless)๋ฅผ ์งํฅํ๋ค. ์ฆ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ชฐ๋ผ๋ ์ฌ์ฉํ ์ ์๊ฒ ์ค๊ณํ๋ค.
- Stateful, ์ํ์ ์ง
์๋ฒ์์ ์ธ์ ์ํ๋ฅผ ์ ์งํ๋ค. ์ฆ ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ํด์ ํต์ ํ๋ค. - Stateless, ๋ฌด์ํ
์๋ฒ์์ ํด๋ผ์ด์ธํธ์ ์ด์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ๊ฐ๊ฐ์ HTTP ์์ฒญ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ค.
์ฐ๋ฆฌ์ ์ผ์์ ์ ๋ถ Statefulํ๊ฒ ์งํ๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ฐ ๊ฐ๊ฒ์ ๋ฐฉ๋ฌธํ์ฌ ์ํ๋ ์ ๋ฐ์ ์ฐ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ : ๊ฐ์ ์ ๋ฐ์ 2์ผค๋ ๊ตฌ๋งคํ๊ณ ์ถ์๋ฐ..
A : ์ด๋ค ์ ๋ฐ์ ์ํ์ธ์? ๋นจ๊ฐ๊ณผ ๊ฐ์์ด ์์ต๋๋ค. (์ธ์ ์ํ : ์ ๋ฐ 2)
๋: (5๋ถ ๋ค) ๋นจ๊ฐ์์ผ๋ก ์ฌ์ด์ฆ 270์ ์ํด์
A : ๋นจ๊ฐ์ ์ ๋ฐ๋ 5๋ง์์ ๋๋ค. ๊ฒฐ์ ๋ ์ด๋ป๊ฒ ํ์๊ฒ ์ด์? (์ธ์ ์ํ : ์ ๋ฐ 2, ๋นจ๊ฐ์, 270)
๋: 5๋ง์์ ์ ์ฉ์นด๋๋ก ๊ฒฐ์ ํ ๊ฒ์!
A : 10๋ง์ ๊ฒฐ์ ์๋ฃ๋์์ต๋๋ค. (์ธ์ ์ํ : ์ ๋ฐ 2, ๋นจ๊ฐ์, 270, ์ ์ฉ์นด๋)
์ด๋ ๊ฒ ํ๋ฉด ๊ณ ๊ฐ์ ์ฅ์์๋ ํธํ ์ ์์ง๋ง, ์ด๋ฅผ ์ ๊ณตํ๋ ํ๋งค์(์๋ฒ)์ ์ ์ฅ์์๋ ๊ณ ๊ฐ๋น ๋ณ๋์ ์ธ์ ์ํ์ ์ ์งํด์ผํ๊ณ ์์ฒญ์ ๋ถ์ฐ์ฒ๋ฆฌ(์ฌ๋ฌ ์ ์์ด ๋์์ฃผ๊ธฐ)๊ฐ ์ด๋ ค์ ์๋ฒ์ ํ์ฅ์ด ์ด๋ ต๋ค. ๊ทธ๋์ ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ์๋ฒ ํ์ฅ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ์น ์๋น์ค๋ Stateless ํ๊ฒ ๋ง๋ ๋ค.
๋ : ๊ฐ์ ์ ๋ฐ๋ฅผ 2์ผค๋ ๊ตฌ๋งคํ๊ณ ์ถ์ต๋๋ค.
A : ์ด๋ค ์ ๋ฐ์ ์ํ์ธ์? ๋นจ๊ฐ๊ณผ ๊ฐ์์ด ์์ต๋๋ค.
๋ : (5๋ถ ๋ค) ๊ฐ์ ์ ๋ฐ์ 2์ผค๋ , ๋นจ๊ฐ์์ผ๋ก ์ฌ์ด์ฆ 270์ผ๋ก ๊ตฌ๋งคํ๊ณ ์ถ์ด์.
B : ๋นจ๊ฐ์ ์ ๋ฐ์ 5๋ง์์ ๋๋ค. ๊ฒฐ์ ๋ ์ด๋ป๊ฒ ํ์๊ฒ ์ด์? (์ธ์ ์์. ๋ค๋ฅธ ์ ์ B๊ฐ ๋์ ์ฒ๋ฆฌ๊ฐ๋ฅ)
๋: ๊ฐ์ ์ ๋ฐ์ 2์ผค๋ , ๋นจ๊ฐ์์ผ๋ก ์ฌ์ด์ฆ270์ผ๋ก ํด์ ์ ์ฉ์นด๋๋ก ๊ตฌ๋งคํ๊ฒ ์ต๋๋ค.
C : 10๋ง์ ๊ฒฐ์ ์๋ฃ๋์์ต๋๋ค. (์ธ์ ์์. ๋ค๋ฅธ ์ ์ C๊ฐ ๋์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
์ด๋ฅผ ์ ์์ด ์๋ ์๋ฒ๋ก ๋ง์ ๋ฐ๊พธ๋ฉด, ์๋์ ๊ฐ์ ํน์ง์ ์ง๋๋ค.
- stateful ๋ฐฉ์์ ๊ธฐ๋ฅ ๊ตฌํ์ ํธํ์ง๋ง ์ํ๋ฅผ ๊ณ์ํด์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์บ์์ ํ์ฉ๋๊ฐ ๋จ์ด์ง๊ณ ์ํ ์ ์ง๋ ์๋ฒ์ ๋ถ๋ด์ ์ค ์ ์๋ค. (๋ํ ์ธ์ ๋๋ฌธ์ ์๊ธฐ๋ ๋ณด์ ์ทจ์ฝ์ ๋ ์กด์ฌํ๋ค.)
- ๋๋ถ๋ถ์ ์น ์๋ฒ๋ ์น ์๋ฒ๋ ๋คํธ์ํฌ ๋น์ฉ์ ๊ณ ๋ คํ Stateless๊ฐ ์ ํฉํ๋ค. ํ์ง๋ง MMOPRG์ ๊ฐ์ด ๋๊ท๋ชจ ์ฌ์ฉ์๊ฐ ์ค์๊ฐ์ผ๋ก ์ ํฌํ ๋ ๊ณ ์ฑ๋ฅ์ ์ฒ๋ฆฌ๋ฅ๋ ฅ๊ณผ ์ํ ์์ ์ฑ์ด ๋ณด์ฅ๋์ด์ผ ํ๋๊ฒฝ์ฐ Stateful Server๊ฐ ์ ํฉํ๋ค.
- stateless ๋ฐฉ์์ ๋งค ์์ฒญ ์๋ง๋ค ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ๋ฆฌ์์ค๋ฅผ ์๋ฒ ์ชฝ์์ ์๋ชจํด์ผ ํ๊ณ ์ํ ๊ฐ ์ ์ฅ ๊ธฐ๋ฅ์ ์ํ ์ฌ์ ์์ ์ด ํ์ํ์ง๋ง [์๋ฒ ์ฅ์ ๋์, ์บ์ฑ, ๋ก๋๋ฐธ๋ฐ์ฑ, ์๋ฒ ํ์ฅ]์ ์ฉ์ดํ๋ค.
@ ์ํ๊ฐ ์ด์ฉ์์์ด ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค.
๊ทธ๋ ๋ค๊ณ Stateless๊ฐ ๋ง๋ฅ์ธ๊ฑด ์๋๋ค.
- ๋จ์ ์๊ฐํ๋ฉด์ฒ๋ผ ๋ฌด์ํ๊ฐ ๋ฑํ ํ์์๋ ๊ฒฝ์ฐ๋ ์๋ค.
- HTTP ์์ ์ฌ๋ฌํ์ด์ง์ ๋ก๊ทธ์ธ ์ํ ์ ์ง์ฒ๋ผ ์ธ์
์ํ์ ์ง๊ฐ ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค.
โก ์ด ๊ฒฝ์ฐ์๋ ์ฟ ํค์ ์ธ์ , ๊ทธ๋ฆฌ๊ณ ํ ํฐ์ ์ด์ฉํ์ฌ ์ํ๋ฅผ ์ ์งํ๋ค. - ๋ค๋ง ์ด๋ฐ ํน์ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋๋ถ๋ถ ๋ฆฌ์์ค ์์ฒญ์ ์ต๋ํ Stateless๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๋ง๋ค.
# ๋น์ฐ๊ฒฐ์ฑ(connectionless)
HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ์ด๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, ํด๋น ์์ฒญ์ ๋น ๋ฅด๊ฒ ์๋ตํ๊ณ ๋ฐ๋ก ์๋ฒ์์๋ ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฐ๋ค.
- HTTP๋ ์ธํฐ๋ท ์์์ ๋ถํน์ ๋ค์์ ํต์ ํ๊ฒฝ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์๋ค.
โก ์ ์ด์ ์น ์๋น์ค์์๋ ํ ์ฌ๋์ด ๋์์ ์ฒ๋ฆฌํ๋ ์์ฒญ์ด ๋ง์ง๊ฐ ์๋ค. (ex. ๊ฒ์๋ฒํผ์ ์ด๋น 10๋ฒ์ฉ ์์ฒญ)
ํ์ง๋ง ์ด๋ ๊ฒ ์ฐ๊ฒฐ์ ๋น ๋ฅด๊ฒ ๋์ด๋ฒ๋ฆฌ๋ฉด, ์์ฒญ์ด ๋ค์ด ์ฌ ๋๋ง๋ค TCP/IP์ฐ๊ฒฐ์ ์๋ก ๋งบ์ด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- HTTP ์ง์ ์ฐ๊ฒฐ(Persistent Connections)๋ผ๋ ๊ฐ๋
์ ๋์
ํ๋ค.
โก ์น ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ดํธ๋ฅผ ์์ฒญํ๋ฉด ์ ํด์ง ์๊ฐ๋์ (HTML, JS, CSS๋ฑ) ์ฐ๊ฒฐ์ ๋์ง ์๊ณ ์๋ต์ ๋ฐ๋๋ค. - ์ด ๋ถ๋ถ์ HTTP2, HTTP3๋ก ๋์ด์ค๋ฉฐ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ด์ฉํด ์ฑ๋ฅ์ ์ต์ ํ ์ํค๊ณ ์๋ค.
# HTTP ๋ฉ์์ง
HTTP์์๋ ๊ฑฐ์ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก ํ ์ ์๋ค๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด ์ ์กํ ๊น?
# 1. Start-line (ํ๋ผ๋ฉํ, ์ํ์ฝ๋)
Requset ๋ฉ์์ง : HTTP ๋ฉ์๋, host(์: naver.com)์ ๋ณด๋ผ ๊ฒฝ๋ก์ ์ฟผ๋ฆฌ๋ฌธ, HTTP ๋ฒ์ ๋ฑ์ ํ๊ธฐํ๋ค.
GET /search?q=hello&hl=ko HTTP/1.1
Respone ๋ฉ์์ง : HTTP ๋ฒ์ , HTTP ์ํ์ฝ๋๋ฑ์ ํ๊ธฐํ๋ค.
HTTP/1.1 200 OK
# 2. Header
ํค๋์๋ [ key: value ]๋ก HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๋ฅผ ์ ์กํ๋ค.
- ํ key์ ์ฌ๋ฌ value๋ฅผ ๋ฃ์ด ๋ฆฌ์คํธ๋ก ๋ฐ์์ฌ ์ ์๋ค. ๋ค๋ง ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋๋ค.
- ๊ธฐ๋ณธ์ ๊ณต ํค๋์๋ ๋ค์ํ ์ข
๋ฅ๊ฐ ์์ผ๋ฉฐ, ํ์ํ๋ค๋ฉด ์์์ ํค๋๊ฐ์ ์ถ๊ฐํด์ ์ฌ์ฉํ ์ ์๋ค.
โก Body ํ์ , ๋ฐํ๋ฐ์ ํ์ (Accpet), ๋ฉ์์ง ํฌ๊ธฐ, ์์ถ์ฌ๋ถ, ์บ์ ์ ๋ณด, ์ฟ ํค ๋ฑ..
Requset ๋ฉ์์ง
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
<ํ์ค ๋์ฐ๊ณ Body ์์, Body๊ฐ ์์ด๋ ํ์ค์ ๋ฐ๋์ ๋์์ผํจ.>
Respone ๋ฉ์์ง
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length:3423
<ํ์ค ๋์ฐ๊ณ Body ์์>
# 3. Body
ํค๋ ์ ๋ ฅ์ด ๋๋๋ฉด, ํ์ค ๊ณต๋ฐฑ์ ๋์ฐ๊ณ ๋ฐ๋ก Body์ ๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ค.
- GET ์ฒ๋ผ ๋จ์ ๋ฆฌ์์ค ์์ฒญ์๋ Body๋ฅผ ์ ์ง ์๋๋ค. ์ต์ HTTP ์คํ์๋ ์ ์ ์ ์๊ธดํ๋, ์ ์ฌ์ฉ์ํ๋ค.
- ๋ง์ฝ Body๊ฐ ์๋ค๋ฉด, ํค๋ ๋ง์ง๋ง์ ๊ณต๋ฐฑ ํ์ค๋ง ๋ฃ๊ณ ๋น์์ ๋ณด๋ธ๋ค.
- Body๋ Text, ์ด์ง๋ฐ์ดํฐ, HTML, JSON๋ฑ ๊ฑฐ์ ๋ชจ๋ ํ์ ์ ์ง์ํ๋ฉฐ, ํค๋์ Content-type์ ๋ช ์ํด์ ์ฌ์ฉํ๋ค.
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length:3423
<html>
<body>
...์ค์ ์ ์กํ ๋ฐ์ดํฐ, ๋ฐ์ดํธ๋ก ํํ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐ์ดํฐ
์์ถํด์ ์ ์กํ๊ธฐ๋ ํ๋ค.
</body>
</html/>
'๐๊ธฐ๋ณธ ์ง์ > ์น ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP #6 ๊ธฐ๋ณธ์ ์ธ API ์ค๊ณ (0) | 2021.09.06 |
---|---|
HTTP #5 ์์ฒญ ๋ฉ์๋ (0) | 2021.09.06 |
HTTP #3 URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญํ๋ฆ (0) | 2021.07.17 |
HTTP #2 ์ธํฐ๋ท ๋คํธ์ํฌ์ ์ดํด (0) | 2021.07.17 |
์น ํ๋ก ํธ์๋์ ๋ฐฑ์๋ (0) | 2021.03.22 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev