HTTP
์น ์์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ํต์ ์ ์ํ ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ
- ํต์ ์ ํ๊ธฐ์ํด์ ์ ์ก๊ณ์ธต์ ๊ฑฐ์ณ์ผ ํ๋ค.
- ์ด๋ก ์ HTTPํ๋กํ ์ฝ์ ์ ๋ขฐ์ฑ๋ง ๋ณด์ฅํด์ฃผ๋ฉด ์ ์ก ๊ณ์ธต์ ํ๋กํ ์ฝ๋ก TCP, UDP๋ฅผ ์ฌ์ฉํ๋ ์๊ด ์๋ค๊ณ ํ๋ค.
๋์ญํญ ๋ณด๋ค๋ ๋ ์ดํด์๋ฅผ ์ค์ด๋ ๋ฐฉํฅ์ด ์ฑ๋ฅํฅ์์ ๋ ์ค์ํ๋ค.
HTTP์ ํน์ฑ์ ์ดํดํ๊ธฐ ์์ ์ ์ก ํ๋กํ ์ฝ์ธ TCP, UDP์ ๋ํด ์ดํด๋ณด์.
TCP
3 way handshake
๋ฅผ ํตํด ์ ๋ขฐ์ฑ์๋ connection์ ์๋ฆฝํ๋ค.
- ๐
3 way handshake
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ํธ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ค๋น๊ฐ ๋์ด์๋ค๋ ํฉ์๋ฅผ ํ๋ ๊ณผ์
3 way handshake
๋ฅผ ํตํด connection์ ์๋ฆฝํ๋ฉด ํด๋ผ์ด์ธํธ๋ data๋ฅผ ์ ์กํ๊ณ ์๋ฒ๋ ์ ๋ฐ์๋ค๋ ์๋ฏธ๋ก ack ํจํท์ ๋ณด๋ธ๋ค.
- ์ ๋ขฐ์ฑ ๊ตฌ์ถ์ ์ ๊ฒฝ์ ๋ง์ด ์ด ํ๋กํ ์ฝ์ด๋ค.
UDP
๋ฐ๋ ์ชฝ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ๋ฐ๊ณ ์๋์ง์กฐ์ฐจ ๊ณ ๋ คํ์ง ์์ ํต์ ํ๋กํ ์ฝ์ด๋ค.
HTTP/0.9 ~ HTTP/2.0์ ์ ์ก ๊ณ์ธต์ TCP๋ฅผ ์ฌ์ฉํ๋ค.
HTTP/0.9
์๋ผ์ธ ํ๋กํ ์ฝ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
- ๋งค์ฐ ๊ฐ๋จํ ํ๋กํ ์ฝ์ด์ง๋ง ํ์ฅํ๊ธฐ ์ด๋ ต๋ค
HTTP/1.0
- ๐ข ํค๋๊ฐ ์๊ฒผ๋ค.
- ์๋ต ๋ฉ์์ง, ์ํ ์ฝ๋
- Content-Type์ด ์๊น ๐ html ์ด์ธ์ ๋ค๋ฅธ ํ์ ์ ํ์ผ๋ ์ ์ก์ด ๊ฐ๋ฅํด์ง
- ๐ข ํ๋์ connection์์ 1๊ฐ์ ์์ฒญ๊ณผ 1๊ฐ์ ์๋ต๋ง ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ธฐ ์ํด์ ์ฌ๋ฌ ๋ฒ์ connection์ ์์ฑํ๊ณ ๋๋ ์์ ์ ๋ฐ๋ณตํด์ผ ํ๋ค.
๐ ์ค๋ณต connection ์๋ฆฝ ๊ณผ์ ์ผ๋ก ์ธํ ๋ ์ดํด์ ๋ฐ์ (์ฑ๋ฅ ์ ํ)
๐ ์๋ฒ ๋ถํ ๋น์ฉ ์ฆ๊ฐ
์ฒ์ ์ฐ๊ฒฐ์ด ์๋ฆฝ๋
tcp connection
์ด ์ ์กํ ์ ์๋ ์ต๋ ๋ฐ์ดํฐ ํฌ๊ธฐ์ ์ ํ์ ๋๊ณ ์ฌ๋ฌ ๋ฒ ๋ฐ์ดํฐ ์ก์์ ํ๋ฉด์ ํ ๋ฒ์ ๋ณด๋ผ ์ ์๋ ๋ฐ์ดํฐ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ด๋ค.
- ํผ์ก(Congestion)์ ํผํ๊ธฐ ์ํ TCP ์๊ณ ๋ฆฌ์ฆ ์ค์ ํ๋์ด๋ค.
Slow Start
์ ํตํด ํผ์กํ ๋คํธ์ํฌ ํ๊ฒฝ์์ ํจํท ์์ค์ ์ต์ํํ๋ฉฐ ์์ ํ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํด์ง.- ๐ข
Slow Start
์ผ๋ก ์ธํด ์ฐ๊ฒฐ ์ด๊ธฐ์ ๋ ์ดํด์๊ฐ ๋ฐ์ํ๋ค.
๐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํดtcp connection
์ ์ฌํ์ฉํ๋keep alive ํค๋
๋ฅผ ์ฌ์ฉ
tcp connection
์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํ๋ฒ๋ง ์ฌ์ฉํ๊ณ ๋์ง ์๊ณ ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
- ์ด๋ฅผ ํตํด
tcp connection
์ฌํ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋์๋ค.
- handshake ๋ฌธ์ , ๋๋ฆฐ ์ฐ๊ฒฐ ๋ฌธ์
- ๐ข ํ์ง๋ง, HTTP/1.0์ ํ์ค์ด ์๋๋ฏ๋ก ํ์ค ๋ฒค๋์ฌ๋ง๋ค ์ง์์ฌ๋ถ๊ฐ ๋ฌ๋๋ค. (์๋ฒฝํ ํด๊ฒฐ๋ฐฉ์์ด ์๋)
๐dumb proxy
๋ฌธ์ ๋ฐ์
HTTP/1.1
HTTP/1.0์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ์ํด์keep alive ํค๋
๋ฅผ ์ฌ์ฉํ์ง ์๊ณPersistent Connection
๊ฐ๋ ์ ๋์ ํ์๋ค.
- ๐
Persistent Connection
- ์ง์ ํ timeout ์๊ฐ๋์ connection์ ๋ซ์ง ์๋ ๋ฐฉ์์ด๋ค.
- ํ๋์ connection์ ์ด์ด ๋๋ฉด, ์ฌ๋ฌ ์์ฒญ์ด ํ๋์ connection ์์์ ์ด๋ค์ง๋ค.
๐tcp connection
์ ์ฌํ์ฉํ๋ ์ด์ ์ ๊ฐ์ง๊ณ 3 way handshake ๋น์ฉ์ ๊ฐ์์์ผ HTTP/1.0๋ฒ์ ๋ณด๋ค ๋คํธ์ํฌ ์ฌ์ฉ์๊ฐ์ด ์ค์ด๋ค์๋ค.
Pipelining
HTTP์ ํน์ฑ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ ์์ฒญ์ FIFO ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ์ฌ (์์๋๋ก ์๋ตํ์ฌ) ๋๊ธฐ ์๊ฐ์ด ๊ธธ์ด์ง๋ ๋จ์ ์ด ์๊ธด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํดPipelining
๊ฐ๋ ์ด ๋์ ๋์๋ค.
- ํด๋ผ์ด์ธํธ์๊ฒ์ ๋ฐ์ ์์ฒญ ์์๋๋ก ์๋ฒ๊ฐ ์๋ตํ๋ค.
(AB ์์๋ก ์์ฒญ์ ๋ณด๋์ ๋, B์ ์์ ์ด ๋จผ์ ์๋ฃ๋์ด๋ ์๋ต ์์๋ฅผ ์งํค๊ธฐ์ํด A์ ์์ ์ด ๋๋๊ธฐ ์ ๊น์ง B์ ์์ ์ ์๋ตํ ์ ์๋ค.)
- ๐
Head of Line Blocking
๋ฌธ์ ์
- 1๋ฒ์งธ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ์๊ฐ์ด ๋งค์ฐ ๊ธธ์ด์ง๋ฉด 2,3๋ฒ์งธ ์์ฒญ์ ๋๊ธฐํด์ผํ๋ค.
- ๐
Header ๊ตฌ์กฐ์ ์ค๋ณต
๋ฌธ์ ์
- ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋ถํ์ํ๊ฒ ์ปค์ก๋ค..
์ด๋ก ์ธํด
Pipelining
์ด ์๋tcp connection
์ ์ฌ๋ฌ๊ฐ(6๊ฐ) ์์ฑํ์ฌMultiplexing
์ ํ๋ด๋ด๋ ๋ฐฉ์์ ๊ณ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ๋ฐ์ ์ ์๊ฒ ๋์๋ค.
- ๐ ํ์ง๋ง ๋ค์์ connection์ ์ฌ์ฉํ๋ฉด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋์๋ค. (๋์ญํญ ๊ฒฝ์ ์ฌํ)
- ๐
Multiplexing
Pipelining
๊ณผ ๋ค๋ฅด๊ฒ ์์ฒญ๊ณผ ์๋ต์ ์์์ ๊ตฌํด๋ฐ์ง ์๊ณ ๋ณ๋ ฌ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋ฐฉ์์ด๋ค.- ๋จ์ผ
tcp connection
์์์ ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ์์ด์ง ์๊ฒ ๋ณด๋ด๋ ๊ธฐ๋ฒ์ด๋ค.
HTTP/2.0
๊ธฐ์กด HTTP/1.X ๋ฒ์ ์ ์ฑ๋ฅ ํฅ์์ ์ด์ ์ ๋ง์ถ ํ๋กํ ์ฝ์ด๋ค.
- ํ์ค์ ๋์ฒด๊ฐ ์๋ ํ์ฅ ๊ฐ๋ ์ด๋ค.
- 2015๋ ๋์ ๋ฑ์ฅํ์ฌ ๋ค์ด๋ฒ, ํ์ด์ค๋ถ, ์ธ์คํ๊ทธ๋จ์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ด๋ค.
โ HTTP/2.0์ ํน์ง
์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋ฐ์ด๋๋ฆฌ ํ๋ ์ด๋ฐ ๊ณ์ธต์ด ์๊น
- ๋ฉ์์ง๋ฅผ
frame
๋จ์๋ก 2๊ฐ ๋ถํ- ์ด 2๊ฐ์
frame
์ ๋ฐ์ด๋๋ฆฌ๋ก ์ธ์ฝ๋ฉํ์ฌ
๋ฐ์ดํฐ ํ์ฑ, ์ ์ก์๋ ํฅ์ ๋ฐ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๊ฒ ๋์๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ์ connection ์์
stream
(๋ฐ์ดํฐ ์๋ฐฉํฅ ํ๋ฆ) ์์frame
๋ค๋ก ์ด๋ค์ง ์์ฒญ, ์๋ต ๋ฉ์์ง๊ฐ ์ ์ก๋๋ค.
- ์ ์ก๋๋ ๋ฐ์ดํฐ์ ํน๋ณํ ์๋ณ์๋ฅผ ๋ถ์ฌ์ฃผ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ์ด๋ฅผ ํตํด HTTP/2.0 ์์ ์ง์ ํ
Multiplexing
์ด ๊ฐ๋ฅํ๊ฒ ๋์๋ค.
๋ฐ์ดํฐ๊ฐ
frame
๋จ์๋ก ์ชผ๊ฐ์ ธ ๋ฉ์์ง๊ฐ์ ์์๊ฐ ์ฌ๋ผ์ง๊ฒ ๋์๋ค.
- ๋จผ์ ๋์ฐฉํ
frame
๋ถํฐ ์กฐ๋ฆฝ๋์ด ์์ฒญ๊ณผ ์๋ต์ ์์๊ฐ ๋ฌด์๋ฏธํด์ก๋ค
๐ ์ด๋ฅผ ํตํดHead of Line Blocking
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค.
๐ TCP Head of Line Blocking ํ์
๋คํธ์ํฌ์์ ๊ฐ์ ํ์ ์๋ ํจํท์ด ์ฒซ๋ฒ์งธ ํจํท์ ์ํด ์ง์ฐ๋ ๋ ๋ฐ์ํ๋ ์ฑ๋ฅ ์ ํ ํ์์ด๋ค.
- tcp ํ๋กํ ์ฝ ์์ฒด์ ์กด์ฌํ๋ ํ์์ด๋ค.
- ๋ฐ์ํ๋ ์ด์
- tcp ๋ ์์ ์ฑ์๋ ๋ฐ์ดํฐ ์ก์์ ์ ์งํฅํ๊ธฐ ๋๋ฌธ์ ์์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ก์ ํด์ผํ๋ค.
ํ์ง๋ง ๊ทธ ๋ค ์์์ ๋ฐ์ดํฐ๋ ์ ๋ฐ์ดํฐ์ ์ฌ์ก์ ์ ๊น์ง ๋๊ธฐํด์ผํ๋ค.
๋จผ์ ์ ์กํ๊ณ ์ถ์ stream์ ๊ฐ์ค์น๋ฅผ ๋์ด ๋ฆฌ์์ค์ ์ ์ก ์ฐ์ ์์๋ฅผ ์ค์ ํ ์ ์๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ์ง ์์ ํ์ผ์ ์์์ ์๋ฒ๊ฐ ์๋ตํด์ค๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ html ํ์ผ๋ง ์์ฒญํ์ง๋ง, ์๋ฒ๋ js, cssํ์ผ๊น์ง ์๋ตํด์ค๋ค.
ํค๋์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ํ์ด์ง ๋ก๋ ์๊ฐ์ด ๊ฐ์ ๋์๋ค.
- ๐
static dynamic table
๊ฐ๋
- ์ค๋ณต๋ ์ ๋ณด๋ table์ index๋ง ๋จ๊ธฐ๊ณ ์ค๋ณต๋์ง ์์ ์ ๋ณด๋ Huffmann ์ธ์ฝ๋ฉ์ ํ์ฌ ํค๋๋ฅผ ์์ถํ์๋ค.
๐ ํค๋ ํฌ๊ธฐ๊ฐ 85% ๊ฐ์ํ๊ณ ํ์ด์ง ๋ก๋์๊ฐ์ด HTTP/1.X๋ฒ์ ๋ณด๋ค ๋์ ๋๊ฒ ๊ฐ์ํ์๋ค.
๊ตฌ๊ธ์์ ๋ง๋ ์ ์ก ๊ณ์ธต ํ๋กํ ์ฝ๋ก udp๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๊ณ ์๋ค.
tcp๋ ์ ๋ขฐ์ฑ์ ํ๋ณดํ์ง๋ง, ๊ธฐ๋ฅ์ด๋ ๊ตฌ์กฐ๊ฐ ์ด๋ฏธ ๊ฐ๋ ์ฐจ์๊ธฐ์, ๊ทธ ์ํ์์ ๋ฐ์ํ๋ ์ง์ฐ์ ์ค์ด๊ธฐ ํ๋ ๊ตฌ์กฐ์ด๋ค.
udp๋ tcp์ ๋นํด ๋ณ๋ ๊ธฐ๋ฅ์ด ์๋ค
- ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ฌ์ง๊ฐ ์ถฉ๋ถํ๋ค.
- ์ด๋ฅผ ๋ฐํ์ผ๋ก tcp์ ์ง์ฐ์ ์ค์ด๋ฉด์ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๋ quic ํ๋กํ ์ฝ์ ๋ง๋ค๊ฒ ๋์๋ค.
- ๊ตฌ๊ธ์ ๋ฐ์ดํฐ ์ ์ก์ ์ ๋ขฐ์ฑ ๊ธฐ๋ฅ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ๊ตฌํํ์๋ค.
์ฒซ connection ์ค์ ์์ ํ์ํ ์ ๋ณด์ ํจ๊ป ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ด ์ ์กํ์ฌ connection ์ฑ๊ณต์, ์ค์ ์ ์บ์ฑํ์ฌ ๋ค์ connection๋ handshake ์์ด ๋ฐ๋ก ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํด์ง๋ค.
- ๐
Connection UUID
- ํด๋ผ์ด์ธํธ๊ฐ Connection UUID๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด connection์ ์ฌ์๋ฆฝํ ํ์๊ฐ ์์ด์ง๋ค.
- ip๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ wifi์์ LTE๋ก ๋ณ๊ฒฝ๋์ด๋ ๊ธฐ์กด์ connection์ด ๊ณ์ ์ ์ง๋๋ค.
TLS
๐ ๋ฐ์ดํฐ ์ํธํ ํ๋กํ ์ฝ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋์ด์๋คSource Address Token
์ ํ์์ ๋ฐ๋ผ ๋ฐ๊ธ
๐ IP Spoofing / Replay Attack์ ๋ฐฉ์ง
- tcp ๋ฅผ ์ด์ฉํ http/2.0 stream์ ํ๋์ tcp chain์์ ๋ฐ์ดํฐ๋ค์ด ์ฎ์ธ ์ํ์์ ์ ์ก์ด ๋๋ค
- quic์ ์ด์ฉํ http/3.0 stream์ ํ๋์ connection ์์ ๋ ๋ฆฝ stream์ผ๋ก ์ธํด Multiplexing์ด ํฅ์๋์๋ค.
๐ ํ๋์ stream์์ ๋ณ๋ชฉํ์์ด ์๊ธฐ๋๋ผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ stream๋ง ๋ฉ์ถ๊ณ ๋ค๋ฅธ stream์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๐์ด๋ฅผ ํตํด head of line blocking ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ ์ดํด์๋ฅผ ์ค์ฌ ์ฑ๋ฅํฅ์์ ์ด๋ค๋ด์๋ค.
๐ HTTP/3.0
2018๋ 10์์ quic ํ๋กํ ์ฝ์ ๋ฐํ์ผ๋ก ํ HTTP/3.0 ๋ฒ์ ์ด ๋์๋ค.
- ๊ตฌ๊ธ, ์ ํฌ๋ธ๋ ์ด๋ฏธ ์ฌ์ฉ์ค์ด๋ค.