# ๋คํธ์ํฌ
# OSI 7๊ณ์ธต์ ์ค๋ช ํ์์ค
OSI 7๊ณ์ธต์ด๋, ํต์ ์ ์์์ ์๋ฃ๊น์ง์ ๊ณผ์ ์ 7๋จ๊ณ๋ก ์ ์ํ ๊ตญ์ ํต์ ํ์ค ๊ท์ฝ
๋ฌผ๋ฆฌ : ์ ์กํ๋๋ฐ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณต ( ํต์ ์ผ์ด๋ธ, ํ๋ธ )
๋ฐ์ดํฐ๋งํฌ : ์ก/์์ ํ์ธ. MAC ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ํต์ ํจ ( ๋ธ๋ฆฟ์ง, ์ค์์น )
๋คํธ์ํฌ : ํจํท์ ๋คํธ์ํฌ ๊ฐ์ IP๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ๋ฌ ( ๋ผ์ฐํ )
์ ์ก : ๋ host ์์คํ ์ผ๋ก๋ถํฐ ๋ฐ์ํ๋ ๋ฐ์ดํฐ ํ๋ฆ ์ ๊ณต
์ธ์ : ํต์ ์์คํ ์ฌ์ฉ์๊ฐ์ ์ฐ๊ฒฐ์ ์ ์ง ๋ฐ ์ค์ ํจ
ํํ : ์ธ์ ๊ณ์ธต ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ์ผ๊ด์ฑ์๊ฒ ์ ๊ณต
์์ฉ : ์ฌ์ฉ์๊ฐ ๋คํธ์ํฌ์ ์ ๊ทผํ ์ ์๋๋ก ์๋น์ค ์ ๊ณต
# TCP/IP ํ๋กํ ์ฝ์ ์คํ 4๊ณ์ธต์ผ๋ก ์ง๊ณ ์ค๋ช ํ์์ค
# LINK ๊ณ์ธต
๋ฌผ๋ฆฌ์ ์ธ ์์ญ์ ํ์คํ์ ๋ํ ๊ฒฐ๊ณผ
๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ์์ญ์ผ๋ก LAN, WAN๊ณผ ๊ฐ์ ๋คํธ์ํฌ ํ์ค๊ณผ ๊ด๋ จ๋ ํ๋กํ ์ฝ์ ์ ์ํ๋ ์์ญ์ด๋ค
# IP ๊ณ์ธต
๊ฒฝ๋ก ๊ฒ์์ ํด์ฃผ๋ ๊ณ์ธต์
IP ์์ฒด๋ ๋น์ฐ๊ฒฐ์งํฅ์ ์ด๋ฉฐ, ์ ๋ขฐํ ์ ์๋ ํ๋กํ ์ฝ์ด๋ค
๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋๋ง๋ค ๊ฑฐ์ณ์ผํ ๊ฒฝ๋ก๋ฅผ ์ ํํด์ฃผ์ง๋ง, ๊ฒฝ๋ก๊ฐ ์ผ์ ํ์ง ์์. ๋ํ ๋ฐ์ดํฐ ์ ์ก ์ค์ ๊ฒฝ๋ก์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ ๋ฐ์ดํฐ๊ฐ ์์ค๋๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์. ๋ฐ๋ผ์ IP ๊ณ์ธต์ ์ค๋ฅ ๋ฐ์์ ๋ํ ๋๋น๊ฐ ๋์ด์์ง ์์ ํ๋กํ ์ฝ์
# TCP/UDP (์ ์ก) ๊ณ์ธต
๋ฐ์ดํฐ์ ์ค์ ์ก์์ ์ ๋ด๋นํจ
UDP๋ TCP์ ๋นํด ์๋์ ์ผ๋ก ๊ฐ๋จํ๊ณ , TCP๋ ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ด๋นํจ
TCP๋ ๋ฐ์ดํฐ ์ ์ก ์, IP ํ๋กํ ์ฝ์ด ๊ธฐ๋ฐ์ (IP๋ ๋ฌธ์ ํด๊ฒฐ์ ๋ฌธ์ ๊ฐ ์๋๋ฐ TCP๊ฐ ์ ๋ขฐ๋ผ๊ณ ?)
โ IP์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๋ ๊ฒ์ด TCP์ธ ๊ฒ. ๋ฐ์ดํฐ์ ์์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ก ๊ฐ๋์ง ํ์ธํด์ฃผ๋ฉฐ ๋ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์. ์ด์ฒ๋ผ ํ์ธ ์ ์ฐจ๋ฅผ ๊ฑธ์น๋ฉฐ ์ ๋ขฐ์ฑ ์๋ IP์ ์ ๋ขฐ์ฑ์ ๋ถ์ฌํ ํ๋กํ ์ฝ์ด TCP์ด๋ค
# ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต
์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋๋ ๊ณผ์ ์์ ํ๋ก๊ทธ๋จ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ก์์ ์ ๋ํ ์ฝ์๋ค์ด ์ ํด์ง๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ด๋ค
# TCP๋?
์๋ฒ์ ํด๋ผ์ด์ธํธ์ ํจ์ ํธ์ถ ์์๊ฐ ์ค์ํ๋ค
์๋ฒ : socket() ์์ฑ โ bind() ์์ผ ์ฃผ์ํ ๋น โ listen() ์ฐ๊ฒฐ์์ฒญ ๋๊ธฐ์ํ โ accept() ์ฐ๊ฒฐํ์ฉ โ read/write() ๋ฐ์ดํฐ ์ก์์ โ close() ์ฐ๊ฒฐ์ข ๋ฃ
ํด๋ผ์ด์ธํธ : socket() ์์ฑ โ connect() ์ฐ๊ฒฐ์์ฒญ โ read/write() ๋ฐ์ดํฐ ์ก์์ โ close() ์ฐ๊ฒฐ์ข ๋ฃ
# ๋์ ์ฐจ์ด๋?
ํด๋ผ์ด์ธํธ ์์ผ์ ์์ฑํ ํ, ์๋ฒ๋ก ์ฐ๊ฒฐ์ ์์ฒญํ๋ ๊ณผ์ ์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
์๋ฒ๋ listen() ํธ์ถ ์ดํ๋ถํฐ ์ฐ๊ฒฐ์์ฒญ ๋๊ธฐ ํ๋ฅผ ๋ง๋ค์ด ๋๊ณ , ๊ทธ ์ดํ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ ์์ฒญ์ ํ ์ ์๋ค. ์ด๋ ์๋ฒ๊ฐ ๋ฐ๋ก accept()๋ฅผ ํธ์ถํ ์ ์๋๋ฐ, ์ฐ๊ฒฐ๋๊ธฐ ์ ๊น์ง ํธ์ถ๋ ์์น์์ ๋ธ๋กํน ์ํ์ ๋์ด๊ฒ ๋๋ค.
์ด์ฒ๋ผ ์ฐ๊ฒฐ์งํฅ์ ์ธ TCP๋ ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํจ (3-way handshaking)
ํ๋ฆ์ ์ด์ ํผ์ก์ ์ด๋ฅผ ์ง์ํด์ ๋ฐ์ดํฐ ์์๋ฅผ ๋ณด์ฅํด์ค
ํ๋ฆ์ ์ด : ์ก์ ์ธก๊ณผ ์์ ์ธก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋ ์ฐจ์ด๋ฅผ ์กฐ์ ํด์ฃผ๋ ๊ฒ
ํผ์ก ์ ์ด : ๋คํธ์ํฌ ๋ด์ ํจํท ์๊ฐ ๋์น๊ฒ ์ฆ๊ฐํ์ง ์๋๋ก ๋ฐฉ์งํ๋ ๊ฒ
์ ํ์ฑ ๋์ ์ ์ก์ ํ๊ธฐ ์ํด ์๋๊ฐ ๋๋ฆฐ ๋จ์ ์ด ์๊ณ , ์ฃผ๋ก ์น HTTP ํต์ , ์ด๋ฉ์ผ, ํ์ผ ์ ์ก์ ์ฌ์ฉ๋จ
# 3-way handshaking์ด๋?
TCP ์์ผ์ ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์ค์ ์ด 3๋ฒ์ ๋ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
(SYN : ์ฐ๊ฒฐ ์์ฒญ ํ๋๊ทธ / ACK : ์๋ต)
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ์ ์์ฒญํ๋ SYN(M) ํจํท์ ๋ณด๋
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ธ SYN(M)์ ๋ฐ๊ณ , ํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญ์ ์๋ฝํ๋ค๋ ACK(M+1)์ SYN(N)์ด ์ค์ ๋ ํจํท์ ๋ฐ์กํจ
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์๋ฝ ์๋ต์ธ ACK(M+1)์ SYN(N) ํจํท์ ๋ฐ๊ณ , ACK(N+1)๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๋ฉด ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋จ
- ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ ์ข ๋ฃํ๊ฒ ๋ค๋ FIN ํ๋๊ทธ๋ฅผ ์ ์กํจ
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ(FIN)์ ๋ฐ๊ณ , ์๊ฒ ๋ค๋ ํ์ธ ๋ฉ์์ง๋ก ACK๋ฅผ ๋ณด๋. ๊ทธ ์ดํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณด๋ผ ๋๊น์ง ์ ๊น TIME_OUT์ด ๋จ
- ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณด๋ด๊ณ ํต์ ์ด ๋๋ฌ์ผ๋ฉด ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋์๋ค๊ณ ํด๋ผ์ด์ธํธ์๊ฒ FINํ๋๊ทธ๋ฅผ ์ ์กํจ
- ํด๋ผ์ด์ธํธ๋ FIN ๋ฉ์์ง๋ฅผ ํ์ธํ๋ค๋ ACK๋ฅผ ๋ณด๋
- ํด๋ผ์ด์ธํธ์ ACK ๋ฉ์์ง๋ฅผ ๋ฐ์ ์๋ฒ๋ ์์ผ ์ฐ๊ฒฐ์ closeํจ
- ํด๋ผ์ด์ธํธ๋ ์์ง ์๋ฒ๋ก๋ถํฐ ๋ฐ์ง ๋ชปํ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒ์ ๋๋นํด์, ์ผ์ ์๊ฐ๋์ ์ธ์ ์ ๋จ๊ฒจ๋๊ณ ์์ฌ ํจํท์ ๊ธฐ๋ค๋ฆฌ๋ ๊ณผ์ ์ ๊ฑฐ์นจ ( TIME_WAIT )
# UDP๋?
TCP์ ๋์์ผ๋ก, IP์ ๊ฐ์ด ์ฐ์ผ ๋ UDP/IP๋ผ๊ณ ๋ ๋ถ๋ฆ
TCP์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ค์ ๋ฐ์ดํฐ ๋จ์๋ฅผ ๋ฐ๊ธฐ ์ํด IP๋ฅผ ์ฌ์ฉํจ. ๊ทธ๋ฌ๋ TCP์๋ ๋ฌ๋ฆฌ ๋ฉ์์ง๋ฅผ ํจํท์ผ๋ก ๋๋๊ณ , ๋ฐ๋ํธ์์ ์ฌ์กฐ๋ฆฝํ๋ ๋ฑ์ ์๋น์ค๋ฅผ ์ ๊ณตํ์ง ์์ ์ฆ, ์ฌ๋ฌ ์ปดํจํฐ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ปดํจํฐ๋ผ๋ฆฌ ์ง์ ์ฐ๊ฒฐํ ๋ UDP๋ฅผ ์ฌ์ฉํ๋ค.
UDP๋ฅผ ์ฌ์ฉํด ๋ชฉ์ ์ง(IP)๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ผ๋ฉฐ, ์ปดํจํฐ๋ฅผ ๊ฑฐ์ณ ๋ชฉ์ ์ง๊น์ง ๋๋ฌํ ์๋ ์์ (๋์ฐฉํ์ง ์์ ๊ฐ๋ฅ์ฑ๋ ์กด์ฌํจ)
์ ๋ณด๋ฅผ ๋ฐ๋ ์ปดํจํฐ๋ ํฌํธ๋ฅผ ์ด์ด๋๊ณ , ํจํท์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฐ์ดํฐ๊ฐ ์ค๋ฉด ๋ชจ๋ ๋ค ๋ฐ์๋ค์ธ๋ค. ํจํท์ด ๋์ฐฉํ์ ๋ ์ถ๋ฐ์ง์ ๋ํ ์ ๋ณด(IP์ PORT)๋ฅผ ์ ์ ์์
UDP๋ ์ด๋ฐ ํน์ฑ ๋๋ฌธ์ ๋น์ ๋ขฐ์ ์ด๊ณ , ์์ ์ ์ด์ง ์์ ํ๋กํ ์ฝ์. ํ์ง๋ง TCP๋ณด๋ค ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ณ ํธํด์ ๋ฐ์ดํฐ ์ ์ค์ด ์ผ์ด๋๋ ํฐ ์๊ด์ด ์๋ ์คํธ๋ฆฌ๋ฐ์ด๋ ํ๋ฉด ์ ์ก์ ์ฌ์ฉ๋จ
# HTTP์ HTTPS์ ์ฐจ์ด๋?
HTTP ๋์ ์์ : TCP โ HTTP
HTTPS ๋์ ์์ : TCP โ SSL โ HTTP
SSL(Secure Socket Layer)์ ์ฐ๋ ์์ฐ๋์ ์ฐจ์ด๋ค. SSL ํ๋กํ ์ฝ์ ์ ๋ณด๋ฅผ ์ํธํ์ํค๊ณ ์ด๋ ๊ณต๊ฐํค์ ๊ฐ์ธํค ๋๊ฐ์ง๋ฅผ ์ด์ฉํ๋ค.
HTTPS๋ ์ธํฐ๋ท ์์์ ์ ๋ณด๋ฅผ ์ํธํํ๊ธฐ ์ํด SSL ํ๋กํ ์ฝ์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ์๋ค๋ ๊ฒ์ ๋งํ๋ค. ์ฆ, ๋ฌธ์ ์ ์ก์ ์ํธํ ์ฒ๋ฆฌ ์ ๋ฌด์ ๋ฐ๋ผ HTTP์ HTTPS๋ก ๋๋์ด์ง๋ ๊ฒ
๋ชจ๋ ์ฌ์ดํธ๊ฐ HTTPS๋ก ํ์ง ์๋ ์ด์ ๋, ์ํธํ ๊ณผ์ ์ผ๋ก ์ธํ ์๋ ์ ํ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
# GET๊ณผ POST์ ์ฐจ์ด๋?
๋๋ค HTTP ํ๋กํ ์ฝ์ ์ด์ฉํด ์๋ฒ์ ๋ฌด์ธ๊ฐ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
GET ๋ฐฉ์์, URL์ ํตํด ๋ชจ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ฃผ์์ฐฝ์ ์ ๋ฌ ๊ฐ์ด ๋ ธ์ถ๋จ. URL ๊ธธ์ด๊ฐ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ก ๋ฐ์ดํฐ ์์ด ํ์ ๋์ด ์๊ณ , ํ์์ ๋ง์ง ์์ผ๋ฉด ์ธ์ฝ๋ฉํด์ ์ ๋ฌํด์ผ ํจ
POST ๋ฐฉ์์ HTTP BODY์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ ์ ๋ฌํจ. ์น ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์์ ๋์๋ ์ง์ ์ ์ผ๋ก ํ๋ผ๋ฏธํฐ๊ฐ ๋ ธ์ถ๋์ง ์๊ณ ๊ธธ์ด ์ ํ๋ ์์.
๋ณดํต GET์ ๊ฐ์ ธ์ฌ ๋, POST๋ ์ํํ๋ ์ญํ ์ ํ์ฉํ๋ค.
GET์ SELECT ์ฑํฅ์ด ์์ด์ ์๋ฒ์์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ณด์ฌ์ฃผ๋ ์ฉ๋๋ก ํ์ฉ
POST๋ ์๋ฒ์ ๊ฐ์ด๋ ์ํ๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด ํ์ฉ
# IOCP๋ฅผ ์ค๋ช ํ์์ค
IOCP๋ ์ด๋ค I/O ํธ๋ค์ ๋ํด, ๋ธ๋ก ๋์ง ์๊ฒ ๋น๋๊ธฐ ์์ ์ ํ๋ฉด์ ํ๋ก๊ทธ๋จ ๋๊ธฐ์๊ฐ์ ์ค์ด๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
๋๊ธฐํ Object ์ธ๋งํฌ์ด์ ํน์ฑ๊ณผ, ํ๋ฅผ ๊ฐ์ง ์ปค๋ Object๋ค. ๋๋ถ๋ถ ๋ฉํฐ ์ค๋ ๋ ์์์ ์ฌ์ฉ๋๊ณ , ํ๋ ์์ฒด์ ์ผ๋ก ์ด์ํ๋ ํน์ง ๋๋ฌธ์ ์ค๋ ๋ ํ๋ง์ ์ ํฉํจ
๋๊ธฐํ์ ๋์์ ํ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๋ฌ IOCP๋, ์ค๋ ๋ ํ๋ง์ ์ํ ๊ฒ์ด๋ผ๊ณ ํ ์ ์์
# POOLING์ด๋?
์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ ๋๊ธฐ์ํค๊ณ , ํ์ํ ๋ ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ ๋ค์ ๋ค์ ๋ฐ๋ฉํ๋ ๊ณผ์ (์ค๋ ๋์ ์์ฑ๊ณผ ํ๊ดด๋ ์๋นํ ํฐ ์ค๋ฒํค๋๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด ๊ณผ์ ์ ์ด์ฉํ๋ค)
IOCP์ ์ฅ์ ์ ์ฌ์ฉ์๊ฐ ์ค์ ํ ๋ฒํผ๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ํจ์จ์ ์ผ๋ก ์๋์ํฌ ์ ์์. (๊ธฐ์กด์๋ OS๋ฒํผ, ์ฌ์ฉ์ ๋ฒํผ๋ก ๋ฐ๋ก ๋ถ๋ฆฌํด์ ์ด์ํ์)
์ปค๋ ๋ ๋ฒจ์์๋ ๋ชจ๋ I/O๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ธ ์์์ ๋ฐ๋ผ ์ ๊ทผํ ์ ์์
# ๋ผ์ฐํฐ์ ์ค์์น์ ์ฐจ์ด๋?
๋ผ์ฐํฐ๋ 3๊ณ์ธต ์ฅ๋น๋ก, ์์ ํ ํจํท์ ์ ๋ณด๋ฅผ ๋ณด๊ณ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด ํจํท์ ์ ์กํ๋ ์ญํ ์ ์ํํ๋ ์ฅ๋น
์ค์์น๋ ์ฃผ๋ก ๋ด๋ถ ๋คํธ์ํฌ์ ์์นํ๋ฉฐ MAC ์ฃผ์ ํ ์ด๋ธ์ ์ด์ฉํด ํด๋น ํ๋ ์์ ์ ์กํ๋ 2๊ณ์ธต ์ฅ๋น
โ - ๋ฐ์ดํฐ๋ฒ ์ด์ค - ์น โ