๐ค๋ฐฐ์ ์์ฝํ๊ธฐ
HTTP๊ฐ ๋ฌด์์ธ๊ฐ์?
HTTP๋ HTML์ด๋ ๋ฆฌ์์ค๋ฅผ ์ ์กํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ ๋๋ค.
HTTP์ ํน์ง๊ณผ ์ฅ์ ์ ๋ฌด์์ธ๊ฐ์?
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด๊ดํ์ง ์๋ statelessํ๋ค๋ ํน์ง์์ ์๋ฒ์ ํ์ฅ์ฑ์ ๋์ผ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋น์ฐ๊ฒฐ์ฑ์ด๋ผ๋ ํน์ง์์ ์๋ฒ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
HTTP ๋ฉ์ธ์ง ๊ตฌ์กฐ์ ๋ํด์ ์๋ ค์ฃผ์ธ์.
HTTP๋ ์์๋ผ์ธ, ํค๋, ๊ณต๋ฐฑ, ๋ฉ์ธ์ง ๋ฐ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
request์ ์์๋ผ์ธ์๋ HTTP ๋ฉ์๋, ์์ฒญ๋์, HTTP Version์ด ๋ค์ด์๊ณ , response์ ์์๋ผ์ธ์๋ HTTP Version๊ณผ ์๋ต์ฝ๋๊ฐ ๋ค์ด์์ต๋๋ค.
ํค๋์๋ HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๊ฐ ๋ค์ด์์ต๋๋ค.
๋ฉ์ธ์ง ๋ฐ๋๋ ์ค์ ์ ์กํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ต๋๋ค.
โ๏ธ HTTP๋?
HTTP(HyperText Transfer Protocol)๋ HTML์ด๋ Text๋ฅผ ๋ฌธ์ ๊ฐ์ ๋งํฌ๋ฅผ ํตํด์ ์ฐ๊ฒฐํ ์ ์๋ ํ๋กํ ์ฝ
- ์ง๊ธ์ ๋ชจ๋ ๊ฒ์ ์ด HTTP ํ๋กํ ์ฝ์ ๋ด์์ ์ ์กํ๋ค.
- HTML, Text ๋ฟ๋ง ์๋๋ผ ์ด๋ฏธ์ง, ์์ฑ, ์์, ํ์ผ, JSON, XML(์๋ฒ๋ผ๋ฆฌ ํต์ ํ ๋ ์ฌ์ฉ) ๋ฑ๋ฑ ๊ฑฐ์ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
- ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋์ค ๋๋ถ๋ถ HTTP๋ฅผ ์ฌ์ฉํ๋ค
์ง๊ธ์ HTTP ์๋!
โ๏ธ HTTP ์ญ์ฌ
- HTTP/0.9 1991๋ : GET ๋ฉ์๋๋ง ์ง์, HTTP ํค๋X
- HTTP/1.0 1996๋ : ๋ฉ์๋, ํค๋ ์ถ๊ฐ
- HTTP/1.1 1997๋ : ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ, ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ค์ํ ๋ฒ์ (๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ด ๋ค์ด์์)
- HTTP/2 2005๋ : ์ฑ๋ฅ ๊ฐ์
- HTTP/3 ์งํ์ค : TCP ๋์ UDP ์ฌ์ฉ, ์ฑ๋ฅ ๊ฐ์
โ๏ธ ๊ธฐ๋ฐ ํ๋กํ ์ฝ
- TCP : HTTP/1.1, HTTP/2๋ TCP์์ ๋์ํ๋ค.
- UDP : HTTP/3๋ UDP ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋์ด์๋ค. (TCP๋ 3way-handshake, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ด์ฅ๋์ด์๋ ๋ฐ์ดํฐ ๋ง์, ์์ฒด๊ฐ ์๋๊ฐ ๋น ๋ฅธ ๋ฉ์ปค๋์ฆ์ด ์๋ ) => UDP ํ๋กํ ์ฝ ์์ ๊ทธ๋ฅ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํด์ ๋์จ ๊ฒ์ด HTTP/3์ด๋ค.
โ๏ธ HTTP์ ํน์ง
1. ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ตฌ์กฐ
ํด๋ผ์ด์ธํธ๊ฐ HTTP ๋ฉ์ธ์ง๋ฅผ ํตํด ์๋ฒ์ ์์ฒญํ๊ณ , ์๋ต์ด ์ฌ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋ต์ ํ๋ฉด ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๋์ํ๋ค.
ํด๋ผ์ด์ธํธ๊ณผ ์๋ฒ๋ฅผ ๊ฐ๋ ์ ์ผ๋ก ๋ถ๋ฆฌ์ํค๋ ๊ฒ์ด ์ค์ํ๋ค!
๋น์ง๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ ๊ฐ์ ๊ฒ๋ค์ ๋ชจ๋ ์๋ฒ์ ๋ฐ์ด๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๋ UI์ ์ฌ์ฉ์ฑ์ ์ง์คํ๋ค.
๐ ์ด๋ ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์งํํ ์ ์๋ค.
ํด๋ผ์ด์ธํธ๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ํ์๊ฐ ์๊ณ ๊ทธ๋ฅ UI๋ฅผ ์ด๋ป๊ฒ ๊ทธ๋ฆด์ง์ ์ง์คํ ์ ์๊ณ ,
์๋ฒ๋ ํธ๋ํฝ์ด ์ด๊ณผ๊ฐ ๋๋ฉด ํด๋ผ์ด์ธํธ๋ ์๊ด์์ด ์๋ฒ์ ์ํคํ ์ฒ๋ฅผ ์ด๋ป๊ฒ ํ ์ง, ๋ฐฑ์๋ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๊ณ ๋ํํ ์ง ๋ง์ ๊ณ ๋ฏผํ๋ฉด ๋๋ค.
2. ๋ฌด์ํ ํ๋กํ ์ฝ(stateless)
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋๋ค.
โ ์ฅ์
์๋ฒ์ ํ์ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ฌดํํ ์๋ฒ ์ฆ์ค์ด ๊ฐ๋ฅํ๋ค. (์ค์ผ์ผ ์์)
โ ์ค๋ฌด ํ๊ณ & ๋จ์
1. ํด๋ผ์ด์ธํธ๊ฐ ์ถ๊ฐ ๋ฐ์ดํฐ ์ ์ก
2. ๋ชจ๋ ๊ฒ์ ๋ฌด์ํ๋ก ์ค๊ณ ํ ์ ์๋ ๊ฒฝ์ฐ๋ ์๊ณ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
ex)
๋ก๊ทธ์ธ์ด ํ์์๋ ๋จ์ํ ์๋น์ค ์๊ฐ ํ๋ฉด ๐ ๋ฌด์ํ
๋ก๊ทธ์ธ ๐ ์ํ ์ ์ง
๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ํ๋ค๋ ์ํ๋ฅผ ์๋ฒ์ ์ ์งํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ฟ ํค์ ์๋ฒ ์ธ์ ๋ฑ์ ์ฌ์ฉํด์ ์ํ๋ฅผ ์ ์งํ๋ค.
์ํ ์ ์ง๋ ์ต์ํ๋ง ์ฌ์ฉํ๋ค.
3. ๋น์ฐ๊ฒฐ์ฑ
case1. ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋ชจ๋ธ
์ง๊ธ ๋น์ฅ ์ฌ์ฉํ์ง ์์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ฐ๊ฒฐ์ ์ ์งํ๊ณ ์๋ค. ๊ทธ๋์ ์๋ฒ์ ์์์ด ๊ณ์ ์๋ชจ๋๋ค๋ ๋จ์ ์ด ์๋ค.
case2. ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ
์์ฒญํ๊ณ ์๋ต๋ฐ์ผ๋ฉด ๋ณผ์ผ ๋๋ฌ์ผ๋๊น ์ฐ๊ฒฐ์ ๋๋๋ค. ๊ทธ๋์ ์๋ฒ๋ ์ ์งํ๋ ์์์ ์ต์ํ์ผ๋ก ์ค์ผ ์ ์๋ค.
- HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ด ๋จ์ ์ดํ์ ๋น ๋ฅธ ์๋๋ก ์๋ตํ ์ ์๋ค.
- 1์๊ฐ ๋์ ์์ฒ๋ช ์ด ์๋น์ค๋ฅผ ์ฌ์ฉํด๋ ์ค์ ์๋ฒ์์ ๋์์ ์ฒ๋ฆฌํ๋ ์์ฒญ์ ์์ญ๊ฐ ์ดํ๋ก ๋งค์ฐ ์๋ค. (์์ฒ๊ฐ์ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ๋์ด ์๋๊ฒ ์๋๋๊น)
ex) ์น ๋ธ๋ผ์ฐ์ ์์ ๊ณ์ ์ฐ์ํด์ ๊ฒ์ ๋ฒํผ์ ๋๋ฅด์ง๋ ์๋๋ค.
- ์ฅ์ : ์๋ฒ ์์์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
โ ์ค๋ฌด ํ๊ณ & ๋จ์
- TCP/IP ์ฐ๊ฒฐ์ ์๋ก ๋งบ์ด์ผ ํ๋ค. (3 way handshake ์๊ฐ์ด ์ถ๊ฐ๋์ ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋จ์ .)
- ์น ๋ธ๋ผ์ฐ์ ๋ก ์ฌ์ดํธ๋ฅผ ์์ฒญํ๋ฉด HTML ๋ฟ๋ง ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ, css, ์ถ๊ฐ ์ด๋ฏธ์ง ๋ฑ๋ฑ ์๋ง์ ์์์ด ํจ๊ป ๋ค์ด๋ก๋๋๋๋ฐ ์ด๋๋ง๋ค 3 way handshake ์๊ฐ์ด ์ถ๊ฐ๋๋ค.
- ์ง๊ธ์ HTTP ์ง์ ์ฐ๊ฒฐ(persistent connections)๋ก ๋ฌธ์ ํด๊ฒฐํ๊ณ ์๋ค.
- HTTP/2, HTTP/3์์ ๋ ๋ง์ ์ต์ ํ๊ฐ ๋์๋ค.
4. HTTP ๋ฉ์์ง
๊ณต์ ์คํ
HTTP-message = start-line
*(header-field CRLF)
CRLF
[message-body]
โ ์์ ๋ผ์ธ (์์ฒญ ๋ฉ์ธ์ง)
start-line = request-line / status-line
request-line = method SP(๊ณต๋ฐฑ) request-target SP HTTP-version CRLF(์ํฐ)
- HTTP ๋ฉ์๋ = ์๋ฒ๊ฐ ์ํํด์ผํ ๋์์ ์ง์ ํ๋ค.
(GET: ๋ฆฌ์์ค ์กฐํ / POST: ์์ฒญ ๋ด์ญ์ฒ๋ฆฌ /PUT: ์ ์ฒด ์์ / PATCH: ๋ถ๋ถ ์์ / DELETE: ์ญ์ )
- ์์ฒญ๋์ (/search?q=hello&hl=ko) = absolute-path๋ผ๊ณ ํ๋ ์ ๋๊ฒฝ๋ก๋ก ์์ํ๋ค. (์ ๋๊ฒฝ๋ก๋ '/'๋ก ์์ํ๋ ๊ฒฝ๋ก์)
- HTTP Version
โ ์์ ๋ผ์ธ (์๋ต ๋ฉ์ธ์ง)
start-line = request-line / status-line
status-line = HTTP-version SP(๊ณต๋ฐฑ) status-code SP reason-phrase CRLF
- HTTP ๋ฒ์
- HTTP ์ํ ์ฝ๋ : ์์ฒญ ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๋ํ๋
200: ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ด ์ฑ๊ณต
400: ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ ์ค๋ฅ
500: ์๋ฒ ๋ด๋ถ ์ค๋ฅ
- ์ด์ ๋ฌธ๊ตฌ : ์ฌ๋์ด ์ดํดํ ์ ์๋ ์งง์ ์ํ ์ฝ๋, ์ค๋ช ๊ธ
โ HTTP ํค๋
- header-field = field-name ":" OWS field-value OWS (OWS: ๋์ด์ฐ๊ธฐ ํ์ฉ)
- field-name์ ๋์๋ฌธ์ ๊ตฌ๋ฌธ ์์
โฒ HTTP ํค๋์ ์ฉ๋
- HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๊ฐ ๋ค์ด์๋ค. (๋ฉ์ธ์ง ๋ฐ๋ ๋นผ๊ณ ํ์ํ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ๋ค ๋ค์ด์๋ค๊ณ ์๊ฐํ์!)
ex) ๋ฉ์ธ์ง ๋ฐ๋์ ๋ด์ฉ, ๋ฉ์ธ์ง ๋ฐ๋์ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ ๋ณด, ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด, ์บ์ ๊ด๋ฆฌ ์ ๋ณด ๋ฑ๋ฑ...
- ํ์ค ํค๋๊ฐ ๋๋ฌด ๋ง๋ค.
- ํ์์ ์์์ ํค๋ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค. (์ฝ์ํ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ง ์ดํดํ ์ ์๊ฒ ๋๋ค. )
โ HTTP ๋ฐ๋
- ์ค์ ์ ์กํ ๋ฐ์ดํฐ
- HTML ๋ฌธ์, ์ด๋ฏธ์ง, ์์, JSON ๋ฑ๋ฑ byte๋ก ํํํ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
5. ๋จ์ํจ, ํ์ฅ ๊ฐ๋ฅ
- HTTP๋ ๋จ์ํ๋ค.
- HTTP ๋ฉ์ธ์ง๋ ๋งค์ฐ ๋จ์ํ๋ค.
- ํฌ๊ฒ ์ฑ๊ณตํ๋ ํ์ค ๊ธฐ์ ์ ๋จ์ํ์ง๋ง ํ์ฅ ๊ฐ๋ฅํ ๊ธฐ์ ์ด๋ค.
๐ ์๋ชป๋ ๊ฐ๋ ์ ๋ฌ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค. ์ ์ ์ฑ์ฅ์ ํฐ ๋์์ด ๋ฉ๋๋ค๐ค
'๐ฌComputer Science > ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก (0) | 2023.01.10 |
---|---|
[TIL] HTTP ๋ฉ์๋ ์ข ๋ฅ์ ์์ฑ (0) | 2023.01.07 |
[TIL] ์น ๋ธ๋ผ์ฐ์ ์ ์์ฒญ ํ๋ฆ (0) | 2023.01.04 |
[TIL] URI ์ ์ฒด ๋ฌธ๋ฒ, URI vs URL vs URN (0) | 2023.01.04 |
[TIL] DNS๋? ์ธํฐ๋ท ๋คํธ์ํฌ ์ ๋ฆฌ (0) | 2023.01.03 |