์ธํ๋ฐ ๊ฐ์ ์ค ๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์์ด๋ผ๋ ๊ฐ์์ ๋ํ TIL์ ๋๋ค.
HTTP ๊ธฐ๋ณธ ํน์ง
- ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ
- ๋ฌด์ํ(Stateless) ํ๋กํ ์ฝ
- ๋น์ฐ๊ฒฐ์ฑ(Connectionless)
- HTTP ๋ฉ์์ง
1. ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ
HTTP ํ๋กํ ์ฝ์ ์ฐ๊ธฐ ์ ์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋๋์ง ์์๋ค๊ณ ํ๋ค. HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ฒ ๋จ์ผ๋ก์จ ํด๋ผ์ด์ธํธ์์๋ Request๋ฅผ ์๋ฒ์์๋ ๊ทธ์ ๋ฐ๋ฅธ Response๋ฅผ ๋ณด๋ด๋ ๊ตฌ์กฐ๊ฐ ๋์๋ค๊ณ ํ๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋๋์ด์ง๊ฒ ๋๋ฉด์ ๊ฐ๊ฐ์ ์ญํ ์ ๋์ฑ๋ ์ ํฉํ ๊ธฐ๋ฅ๋ค์ ์ง์คํด์ ๋ฐ์ ์ํฌ ์ ์์๋ค.
2. ๋ฌด์ํ(Stateless) ํ๋กํ ์ฝ
๋ฌด์ํ, ์ฆ Stateless๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ ์ฉ์ด๋ก๋ Stateful, ์ฆ ์ํ ์ ์ง์ด๋ค.
Stateful๊ณผ Stateless์ ์ฐจ์ด๋ฅผ ์๋ ์์๋ฅผ ํตํด์ ์์๋ณด์.
Stateful(์ํ ์ ์ง)
๊ณ ๊ฐ: ์ด ๋ ธํธ๋ถ ์ผ๋ง์ธ๊ฐ์?
์ ์: 100๋ง ์์ ๋๋ค.
๊ณ ๊ฐ: 2๊ฐ ๊ตฌ๋งคํ๊ฒ ์ต๋๋ค.
์ ์: 200๋ง ์์ ๋๋ค. ํ๊ธ, ์นด๋ ์ค ์ด๋ ๊ฑธ๋ก ๊ตฌ๋งคํ์๊ฒ ์ต๋๊น?
๊ณ ๊ฐ: ์นด๋๋ก ๊ตฌ๋งคํ๊ฒ ์ต๋๋ค.
์ ์: 200๋ง ์ ๊ฒฐ์ ์๋ฃ๋์์ต๋๋ค.
์ ์์ ๊ณ ๊ฐ์ ์ด์ ๋ง๋ค์ ๊ธฐ์ตํ๊ณ ์์ด์ผ์ง๋ง ํด๋น ๋ํ๊ฐ ๊ฐ๋ฅํ๋ค. ์ฝ๊ฒ ๋งํด, 2๊ฐ ๊ตฌ๋งคํ๊ฒ ๋ค๋ ๊ณ ๊ฐ์ ๋ง์ ์ดํดํ๋ ค๋ฉด ์ด์ ์ ๋
ธํธ๋ถ์ ๊ตฌ๋งคํ๊ฒ ๋ค๋ ๊ณ ๊ฐ์ ๋ง์ ๊ธฐ์ตํ๊ณ ์์ด์ผ ํ๋ค๋ ๋ง์ด๋ค. ๋ํ, ์นด๋๋ก ๊ตฌ๋งคํ๊ฒ ๋ค๋ ๊ณ ๊ฐ์ ๋ง์ ์ดํดํ๋ ค๋ฉด ์ด์ ์ ๋
ธํธ๋ถ 2๊ฐ๋ฅผ ๊ตฌ๋งคํ๊ฒ ๋ค๋ ๊ณ ๊ฐ์ ๋ง์ ๊ธฐ์ต, ์ฆ ์ ์ ์ชฝ์์ ๊ณ ๊ฐ์ ์ํ๋ฅผ ์ ์งํ๊ณ ์์ด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
Stateless(๋ฌด์ํ)
๊ณ ๊ฐ: ์ด ๋ ธํธ๋ถ ์ผ๋ง์ธ๊ฐ์?
์ ์: 100๋ง ์์ ๋๋ค.
๊ณ ๊ฐ: ๋ ธํธ๋ถ 2๊ฐ ๊ตฌ๋งคํ๊ฒ ์ต๋๋ค.
์ ์: 200๋ง ์์ ๋๋ค. ํ๊ธ, ์นด๋ ์ค ์ด๋ ๊ฑธ๋ก ๊ตฌ๋งคํ์๊ฒ ์ต๋๊น?
๊ณ ๊ฐ: ๋ ธํธ๋ถ 2๊ฐ๋ฅผ ์นด๋๋ก ๊ตฌ๋งคํ๊ฒ ์ต๋๋ค.
์ ์: 200๋ง ์ ๊ฒฐ์ ์๋ฃ๋์์ต๋๋ค.
์ด๋ฒ์๋ ๊ตณ์ด ์ ์ ์ชฝ์์ ๊ณ ๊ฐ์ ๋ง์ ๊ธฐ์ตํ์ง ์์๋ ๋ํ๊ฐ ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด, ๊ณ ๊ฐ์ ๋ง์ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฌํ ์ํ๋ฅผ ๋ฌด์ํ, ์ฆ Stateless๋ผ๊ณ ํ๋ค.
Stateful๊ณผ Stateless์ ์ฐจ์ด์ ์ ๋ค์ ์ ๋ฆฌํด๋ณด์๋ฉด, Stateful์ ์ค๊ฐ์ ๋ค๋ฅธ ์ ์์ผ๋ก ๋ฐ๋๋ฉด ์ ๋๊ณ , ํน์ฌ ๋ฐ๋๋๋ผ๋ ๋ค๋ฅธ ์ ์์๊ฒ ์ํ ์ ๋ณด๋ฅผ ๋๊ฒจ์ค์ผ ํ๋ค. Stateless๋ ์ค๊ฐ์ ๋ค๋ฅธ ์ ์์ผ๋ก ๋ฐ๋์ด๋ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์๊ธฐ ๊ณ ๊ฐ์ด ์ฆ๊ฐํด๋ ์ ์์ ๋๊ฑฐ ํฌ์
ํ ์ ์๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๊ฐ์๊ธฐ ์ฆ๊ฐํด๋ ์๋ฒ๋ฅผ ๋๊ฑฐ ํฌ์
ํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ผ์ Stateless๋ ์๋ต ์๋ฒ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ค.
๋ง์ฝ, ์ค๊ฐ์ ์๋ฒ๊ฐ ์ฅ์ ๊ฐ ๋๋ค๋ฉด ๋ ๊ฐ์ง ํ๋กํ ์ฝ์ ์ด๋ป๊ฒ ๋์๋ ๊น?
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Stateful ํ๋กํ ์ฝ์ ์ ๋๋ก ๋ ํต์ ์ ํ ์ ์๋ค.
๋ฐ๋ฉด์ Stateless ํ๋กํ ์ฝ์ ๋ค๋ฅธ ์๋ต ์๋ฒ๋ฅผ ์ด์ฉํด์ ํต์ ์ ์ด์ด๊ฐ ์ ์๋ค.
์ด๋ฌํ Stateless ํ๋กํ ์ฝ์๋ ํ๊ณ์ ์ด ์กด์ฌํ๋ค. ์น ์๋น์ค๋ฅผ ์ค๊ณํ ๋ ๋ฌด์ํ๋ก ์ค๊ณํ ์ ์์ ์๋น์ค๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ก๊ทธ์ธ์ด ํ์ ์๋ ๋จ์ํ ์๋น์ค ์๊ฐ ํ๋ฉด์ด๋ผ๋ฉด ๋ฌด์ํ๋ก ์ค๊ณํ ์ ์์ง๋ง, ๋ก๊ทธ์ธ์ ์ ๊ณตํ๋ ์๋น์ค๋ผ๋ฉด ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ค๋ ์ํ๋ฅผ ์๋ฒ์ ์ ์งํด์ผ๋ง ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค์ ์๋ฒ์ ์ธ์
๋ฑ์ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ๋ค๊ณ ํ๋ค. ์ด์ฒ๋ผ ๋ถ๊ฐํผํ๊ฒ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๋ฉด ์ํ ์ ์ง, ์ฆ Stateful์ ์ต์ํ๋ง ์ฌ์ฉ๋๋ ๊ฒ์ด ์ข๋ค.
3. ๋น์ฐ๊ฒฐ์ฑ(Connectionless)
HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ์ง ์์ ๋คํธ์ํฌ ๋ชจ๋ธ์ด๋ค. ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ชจ๋ธ์ ํต์ ์ ์ํด์ ํ ๋ฒ ์์ฒญ์ ๋ณด๋ด๋ฉด ํ์ ์์ฒญ์ ๋ณด๋ด์ง ์์๋ ๊ณ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ๋์ด์๋ค. ๊ณ์ ์ฐ๊ฒฐ๋์ด์๋ค๋ ๊ฒ์ ์๋ฒ์ ์์์ ๊ณ์ ์๋ชจํ๋ฉด์ ์ฐ๊ฒฐ์ ์ ์งํ๊ณ ์๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ฉด์, HTTP ํ๋กํ ์ฝ ๊ฐ์ด ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ์ ํ ๋ฒ์ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ ๋๋๋ค. ๋ฐ๋ผ์, ์๋ฒ๋ ์ต์ํ์ ์์๋ง ์ฌ์ฉ๋๊ธฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ด ๋จ์ ์ดํ์ ๋น ๋ฅธ ์๋๋ก ์๋ตํ ์ ์๋ค. ๋ํ, 1์๊ฐ ๋์ ์์ฒ ๋ช
์ด ์๋น์ค๋ฅผ ์ด์ฉํด๋ ์ค์ ์๋ฒ์์ ๋์์ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ์์ญ ๊ฐ ์ดํ๋ก ๋งค์ฐ ์๋ค. ์ฝ๊ฒ ๋งํด, ์น ๋ธ๋ผ์ฐ์ ์ ๊ฒ์ ๋ฒํผ์ ์๋ฒ์์ ์ฒ๋ฆฌํ๋ค๊ณ ํ์ ๋, ๊ฒ์ ๋ฒํผ์ด ์ฌ์ฉ์๋ค์ ์ํด ๋๋ฌ์ง๊ธฐ ์ ๊น์ง๋ ์๋ฒ์ ์์์ด ์๋ชจ๋์ง ์๊ณ , ์์ฒ ๋ช
์ด ๋์์ ๊ฒ์ ๋ฒํผ์ ๋๋ฅด๋ ์ผ์ ํํ์ง ์์ ์ผ์ด๋ค.
ํ์ง๋ง, ํ๊ณ๋ ๋ถ๋ช
ํ ์กด์ฌํ๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ฐ๊ฒฐ์ด๋ผ๊ณ ํ๋ ๊ฒ์ ๋ณดํต TCP/IP ์ฐ๊ฒฐ์ ์๋ฏธํ๋๋ฐ TCP/IP ์ฐ๊ฒฐ์ 3 way Handshake ๋ฐฉ์ ๋๋ฌธ์ ์๋์ ์ผ๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ฐ๊ฒฐ์ด๋ค. ์ด๋ฌํ ์ฐ๊ฒฐ์ ์์ฒญ์ด ๋ฐ์ํ ๋๋ง๋ค ์๋ก ํด์ค์ผ ํ๋ ๊ฒ์ ๋นํจ์จ์ ์ผ ์๋ฐ์ ์๋ค. ๋ํ, ์น ๋ธ๋ผ์ฐ์ ์์ ์น ์ฌ์ดํธ๋ฅผ ํ๋ ์์ฒญํ๋ฉด HTML ๋ฟ๋ง ์๋๋ผ, CSS, JavaScript, ์ถ๊ฐ ์ด๋ฏธ์ง ๋ฑ ์๋ง์ ์์์ด ํจ๊ป ๋ค์ด๋ก๋๋๋๋ฐ ์ด๋ ํ ๋ฒ ์ฌ์ดํธ๋ฅผ ์์ฒญํ ๋ ๊ฐ๊ฐ์ ์์์ ๋ฐ๋ก๋ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค. ์๋์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ฝ๊ฒ ์ดํด๋๋ค.
๋ฐ๋ผ์, ์ด๋ฌํ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด์ HTTP ์ง์ ์ฐ๊ฒฐ(Persistent Connections)์ด ๋์
๋์๋ค.
๋ชจ๋ ์์์ ๋ค ์๋ต๋ฐ์ ๋๊น์ง ์ฐ๊ฒฐ์ ์ ์งํจ์ผ๋ก์จ ์๊ฐ์ ์ค์ผ ์ ์๋ค.
4. HTTP ๋ฉ์์ง
HTTP ๋ฉ์์ง๋ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์์ ๋ผ์ธ(start-line)
๐ก ์์ฒญ ๋ฉ์์ง
HTTP ์์ฒญ ๋ฉ์์ง์์์ ์์ ๋ผ์ธ์ request-line์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. request-line์ ์๋์ ๊ฐ๋ค.
method SP(๊ณต๋ฐฑ) request-target SP HTTP-version CRLF(๊ฐํ)
method
HTTP ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค. ์ข
๋ฅ๋ก๋ GET, POST, PUT, DELETE ๋ฑ์ด ์๋ค. HTTP ๋ฉ์๋๋ ์๋ฒ๊ฐ ์ํํด์ผ ํ๋ ๋์์ ์ง์ ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์๋ฅผ ๋ค์ด, GET์ ๋ฆฌ์์ค ์กฐํ, POST๋ ์์ฒญ ๋ด์ญ์ ์ฒ๋ฆฌํ๋ ๋์์ ์๋ฏธํ๋ค.
request-target
์์ฒญ ๋์์ด๋ผ๊ณ ํ๋ ๊ฒ์ absolute-path[?query]์ด๋ค. ๋ฆฌ์์ค์ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํ๋ ๊ฒ ๊ฐ๋ค.
HTTP-version
HTTP ๋ฒ์ ์ ์๋ฏธํ๋ค.
๐ก ์๋ต ๋ฉ์์ง
HTTP ์๋ต ๋ฉ์์ง์์์ ์์ ๋ผ์ธ์ status-line์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. status-line์ ์๋์ ๊ฐ๋ค.
HTTP-version SP status-code SP reason-phrase CRLF
status-code
HTTP ์ํ ์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ์์ฒญ์ ๋ํ ์ฑ๊ณต, ์คํจ๋ฅผ ๋ํ๋ธ๋ค. ์๋ฅผ ๋ค์ด 200์ ์ฑ๊ณต, 400์ ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ, 500์ ์๋ฒ ๋ด๋ถ ์ค๋ฅ๋ฅผ ์๋ฏธํ๋ค.
reason-phrase
์ฌ๋์ด ์ดํดํ ์ ์๋ ์งง์ ์ํ ์ฝ๋ ์ค๋ช
๊ธ์ด๋ค.
HTTP ๋ฉ์์ง ํค๋
HTTP ํค๋ ๋ถ๋ถ์๋ header-field๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. header-field๋ ์๋์ ๊ฐ๋ค.
field-name ":" OWS(๋์ด์ฐ๊ธฐ ํ์ฉ) field-value OWS
์ด๋, field-name์ ๋์๋ฌธ์์ ๋ํ ๊ตฌ๋ถ์ด ์๋ค. ํค๋์๋ HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ ์ ๋ณด๋ค์ด ๋ด๊ฒจ์๋ค. ์๋ฅผ ๋ค์ด, HTTP ๋ฉ์์ง ๋ฐ๋์ ๋ด์ฉ๊ณผ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ ๋ณด ๋ฑ์ด ๋ด๊ฒจ ์๋ค. ํ์ค ํค๋๊ฐ ์กด์ฌํด์ ํ์ค ํค๋ ๋ฆฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ ์ ์๋ค. ํ์์ ์์์ ํค๋๋ ์ถ๊ฐํ ์ ์๋ค.
HTTP ๋ฉ์์ง ๋ฐ๋
์ค์ ์ ์กํ ๋ฐ์ดํฐ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. HTML ๋ฌธ์, ์ด๋ฏธ์ง, ์์, JSON ๋ฑ๋ฑ byte๋ก ํํํ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ค์ด ๋ด๊ธธ ์ ์๋ค.
'CS > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] - HTTP ๋ฉ์๋์ ํ์ฉ (2) | 2024.11.20 |
---|---|
[HTTP] - HTTP ํค๋ (0) | 2024.11.13 |
[HTTP] - HTTP ๋ฉ์๋ (0) | 2024.11.08 |
[HTTP] - URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ (1) | 2024.11.04 |
[HTTP] - ์ธํฐ๋ท ๋คํธ์ํฌ (0) | 2024.11.03 |
๋๊ธ