TIL 60: [๋คํธ์ํฌ] ์ฌํ
์ค๋ ๋ฐฐ์ด ๋ด์ฉ์ด ๋ง์ ๋ถ๋ ์กฐ์ ์คํจํ์ต๋๋ค..๐
์ธํฐ๋ท ํ๋กํ ์ฝ
IP ์ ์ ๋ฐ ํ๊ณ
๊ณผ๊ฑฐ์๋ ์ ์ฉ์ ์ ํตํด ํ์ ๊ตํ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํ๋ ๋ฐ๋ฉด, ํ์ฌ๋ ํจํท ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋์ด ์ต์ ๊ฒฝ๋ก๋ฅผ ํตํด ์ ๋ฌํ๋ ํจํท ํต์ ๋ฐฉ์์ ์ด์ฉํฉ๋๋ค.
IP ์ฃผ์๋ ๋คํธ์ํฌ์์ ์ฅ์น๋ค์ด ์๋ก๋ฅผ ์ธ์ํ๊ณ ํต์ ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ํน์ํ ๋ฒํธ์ ๋๋ค. IP๋ ์ง์ ํ IP ์ฃผ์์ ํจํท(Packet = Pack + Bucket)์ด๋ผ๋ ํต์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. IP ํจํท์๋ ์ฐ์ฒด๊ตญ ์ก์ฅ์ฒ๋ผ ์ ์ก ๋ฐ์ดํฐ๋ฅผ ๋ฌด์ฌํ ์ ์กํ๊ธฐ ์ํด ์ถ๋ฐ์ง IP, ๋ชฉ์ ์ง IP์ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ํจํท ๋จ์๋ก ์ ์ก์ ํ๋ฉด ๋ ธ๋๋ค์ ๋ชฉ์ ์ง IP์ ๋๋ฌํ๊ธฐ ์ํด ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฒ๋ง ๋ณด๋ฉด IP๋ ์ ์ ํ ํต์ ๋ฐฉ๋ฒ์ผ๋ก ๋ณด์ด์ง๋ง ์๋์ ๊ฐ์ ํ๊ณ๊ฐ ์กด์ฌํฉ๋๋ค.
- ๋น์ฐ๊ฒฐ์ฑ: ํจํท์ ๋ฐ์ ๋์์ด ์๊ฑฐ๋ ์๋น์ค ๋ถ๋ฅ ์ํ์ฌ๋ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ํ๋ฅผ ํ์ ํ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ ํจํท์ ์ ์กํฉ๋๋ค.
- ๋น์ ๋ขฐ์ฑ: ์ค๊ฐ์ ํจํท์ด ์ฌ๋ผ์ ธ๋ ํด๋ผ์ด์ธํธ๋ ํ์ ํ ์ ์์ต๋๋ค. ๋ํ ์ ๋ฌ ๋ฐ์ดํฐ์ ์ฉ๋์ด ํฐ ๊ฒฝ์ฐ ํจํท ๋จ์๋ก ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋๋ฐ ์ด ๋ ํจํท๋ค์ ์ค๊ฐ์ ์๋ก ๋ค๋ฅธ ๋ ธ๋๋ฅผ ํตํด ์ ๋ฌ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ํจํท์ ์์๋ฅผ ๋ณด์ฅํ ์ ์๊ฒ ๋ฉ๋๋ค.
TCP vs UDP
๋คํธ์ํฌ ํ๋กํ ์ฝ ๊ณ์ธต์ OSI 7๊ณ์ธต๊ณผ TCP/IP 4 ๊ณ์ธต์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
IP ํ๋กํ ์ฝ๋ณด๋ค ๋ ๋์ ๊ณ์ธต์ TCP ํ๋กํ ์ฝ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์์ ๋ค๋ฃฌ IP ํ๋กํ ์ฝ์ ํ๊ณ๋ฅผ ๋ณด์ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ผ๋ก ๊ฐ์๋ก ๋์ ๊ณ์ธต์ด๋ฉฐ, ๋คํธ์ํฌ ์ธํฐํ์ด์ค ๊ณ์ธต (๋ฌผ๋ฆฌ ๊ณ์ธต)์ผ๋ก ๊ฐ์๋ก ๋ฎ์ ๊ณ์ธต์ ๋๋ค.
TCP (Transmission Control Protocol)
HTTP ๋ฉ์ธ์ง๊ฐ ์์ฑ๋๋ฉด Socket ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ ์ ์๋๋ก, ๋คํธ์ํฌ ํ๊ฒฝ์ ์ฐ๊ฒฐํ ์ ์๊ฒ ๋ง๋ค์ด์ง ์ฐ๊ฒฐ๋ถ๊ฐ ๋คํธ์ํฌ ์์ผ์ ๋๋ค. IP ํจํท์ ์ถ๋ฐ์ง IP์ ๋ชฉ์ ์ง IP ์ ๋ณด๋ฅผ ๋ณด์ํ ์ ์๋ ์ถ๋ฐ์ง PORT, ๋ชฉ์ ์ง PORT, ์ ์ก ์ ์ด, ์์, ๊ฒ์ฆ ์ ๋ณด ๋ฑ์ ํฌํจํ TCP ์ธ๊ทธ๋จผํธ๋ฅผ ์์ฑํ ํ์ IP ํจํท์ ์์ฑํฉ๋๋ค. ์ด ํจํท์ LAN ์นด๋์ ๊ฐ์ ๋ฌผ๋ฆฌ์ ๊ณ์ธต์ ์ง๋๊ธฐ ์ํด ์ด๋๋ท ํ๋ ์ ์ํฌ์ ํฌํจ๋์ด ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค.
TCP๋ 3 Way Handshake๋ฅผ ์ฌ์ฉํ๋ ์ฐ๊ฒฐ ์งํฅํ ํ๋กํ ์ฝ์ ๋๋ค.
Handshake 1: ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ์์ ์์ฒญํ๋ SYN(Synchronize) ํจํท์ ๋ณด๋ ๋๋ค.
Handshake 2: ์๋ฒ๋ SYN ์์ฒญ์ ๋ฐ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญ์ ์๋ฝํ๋ค๋ ACK(Acknowledge)์ SYN์ด ์ค์ ๋ ํจํท์ ๋ฐ์กํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ACK์ผ๋ก ์๋ตํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
Handshake 3: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ACK๋ฅผ ๋ณด๋ด๋ฉด ์ด ์ดํ๋ก๋ถํฐ ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
์์ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ IP์ ํ๊ณ ์ค ํ๋์ธ ๋น์ฐ๊ฒฐ์ฑ์ ๋ณด์ํ ์ ์์ต๋๋ค.
๋ํ ๋ง์ฝ ํจํท์ด ์์๋๋ก ๋์ฐฉํ์ง ์๋๋ค๋ฉด TCp ์ธ๊ทธ๋จผํธ์ ์๋ ์ ๋ณด๋ฅผ ํ ๋๋ก ์๋ฒ๋ ๋ค์ ํจํท ์ ์ก์ ์์ฒญํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์๋ฅผ ๋ณด์ฅํ์ง ์๋ IP ํจํท์ ํ๊ณ์ธ ์ ๋ขฐ์ฑ์ ๋ณด์ํ ์ ์์ต๋๋ค.
UDP (User Datagram Protocol)
UDP๋ ์ด๋ฏธ ๋ค์ํ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋ TCP์ ๋ฌ๋ฆฌ PORT, ์ฒดํฌ์ฌ ํผ๋ ์ ๋ณด ์ ๋๋ง ์ถ๊ฐ๋ ๋จ์ํ ํ๋กํ ์ฝ์ ๋๋ค. ์ฌ๊ธฐ์ ์ฒดํฌ์ฌ์ ์ค๋ณต ๊ฒ์ฌ์ ํ ํํ๋ก, ์ค๋ฅ ์ ์ ์ ํตํด, ๊ณต๊ฐ์ด๋ ์๊ฐ ์์์ ์ก์ ๋ ์๋ฃ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ๋ ๋จ์ํ ๋ฐฉ๋ฒ์ ๋๋ค.
TCP์ ๋ฌ๋ฆฌ 3 Way Handshake ๋ฐฉ์์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฅํฉ๋๋ค. ๋์ ์ด๋ก ์ธํด ์ผ๋ฐ์ ์ผ๋ก ์ ๋ขฐ์ฑ์ด ๋ฎ์์ง ์ ์๋ค๊ณ ํฉ๋๋ค. ํ์ง๋ง UDP์ ํน์ง ์ค ํ๋์ธ ์ปค์คํฐ๋ง์ด์ง์ ํตํด ์ ๋ขฐ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ HTTP3๋ UDP๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ท ์ฐ๊ฒฐ์ ํ๋ ํ๋กํ ์ฝ์ธ QUIC (Quick UDP Internet Connection)์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ๋ถ๋ถ์ ๊ณต๋ถํ๋ฉด์ 3 Way Handshake ๋ฐฉ์์ ์ฌ์ฉํ์ง ์์๋๋ฐ ๋ณด์์ ์ง์ผ์ง์ง ์๋ฌธ์ด ๋ค์์ต๋๋ค. ์ข ๋ ์์๋ณด๋ ํด๋ผ์ด์ธํธ๊ฐ Handshake ์์ด ๋ฐ๋ก ์๋ฒ๋ก ์ฒซ ์์ฒญ์ ๋ณด๋ผ ๋๋ ์๋ฒ์ ์ธ์ ํค๋ฅผ ๋ชจ๋ฅด๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ชฉ์ ์ง์ธ ์๋ฒ์ Connection ID๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ํน๋ณํ ํค์ธ ์ด๊ธฐํ ํค๋ฅผ ์ด์ฉํ์ฌ ํต์ ์ ์ํธํํ๋ค๊ณ ํฉ๋๋ค.
์ด๋ ๋ณด์์ ๋์ฌ์ค ๋ฟ๋ง ์๋๋ผ ์ ์ ์ ํธ์์ฑ๋ ๋์ฌ์ค๋๋ค.
TCP์ ๊ฒฝ์ฐ ์์ค์ IP ์ฃผ์์ ํฌํธ, ์ฐ๊ฒฐ ๋์์ IP ์ฃผ์์ ํฌํธ๋ก ์ฐ๊ฒฐ์ ์๋ณํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ IP๊ฐ ๋ฐ๋๋ฉด ์ฐ๊ฒฐ์ด ๋๊น๋๋ค. ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ๋ค์ ์ฐ๊ฒฐ์ ์์ฑํ๊ธฐ ์ํด 3 Way Handshake ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. ์ต๊ทผ์๋ ๋ชจ๋ฐ์ผ๋ก ์ธํฐ๋ท์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ Wi-fi์์ ์ ๋ฃฐ๋ฌ๋ก ์ ํ๋๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ, ํน์ ๋ค๋ฅธ Wi-fi๋ก ์ฐ๊ฒฐ๋๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ํด๋ผ์ด์ธํธ์ IP๊ฐ ๋ณ๊ฒฝ๋๋ ์ผ์ด ๊ต์ฅํ ์ฆ์์ง๋ฉฐ ๋ฌธ์ ํด๊ฒฐ์ ํ์์ฑ์ ๋๋์ฑ ์ปค์ก์ต๋๋ค.
์์ ๋งํ๋ ๊ฒ์ฒ๋ผ QUIC์ Connection ID๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์ฐ๊ฒฐ์ ์์ฑํฉ๋๋ค. Connection ID๋ ๋๋คํ ๊ฐ์ผ๋ก, ํด๋ผ์ด์ธํธ์ IP์๋ ์ ํ ๋ฌด๊ดํ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ IP๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ 3 Way Handshake ์์ด ๊ธฐ์กด์ ์ฐ๊ฒฐ์ ๊ณ์ ์ ์งํ ์ ์์ต๋๋ค.
HTTP
์์ ๋ฐฐ์ ๋ ๊ฒ์ฒ๋ผ HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์ํ๋ผ๋ ํน์ง์ ๊ฐ์ง๋๋ค. ๋ฌด์ํ๋ ์๋ต ์๋ฒ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌดํํ ์๋ฒ ์ฆ์ค์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ์ํ ์ ์ง ํ์ ์ ๋ฌด์ ๋ฐ๋ผ ์ฅ์ ์ด์ ๋จ์ ์ด ๋ ์ ์์ต๋๋ค. TCP/IP์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ๊ธฐ ๋๋ฌธ์, ๋น์ฐ๊ฒฐ์ฑ์ ๊ฐ์ง๋ HTTP์์๋ ์ค์ ๋ก ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ๋๋ง ์ฐ๊ฒฐ์ ์ ์งํ๊ณ ์๋ต์ ์ฃผ๊ณ ๋๋ฉด TCP/IP ์ฐ๊ฒฐ์ ๋์ต๋๋ค. ์ด๋ฌํ HTTP์ ๋น์ฐ๊ฒฐ์ฑ์ HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ, ์ถ๊ฐ ์ด๋ฏธ์ง ๋ฑ ๋ง์ ์์๋ค์ ๊ฐ๊ฐ ๋ณด๋ผ ๋๋ง๋ค ์ฐ๊ฒฐ์ ๋๊ณ ๋ค์ ์ฐ๊ฒฐํ๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ ๋นํจ์จ์ฑ์ ์ด๋ํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด HTTP ์ง์ ์ฐ๊ฒฐ(Persistent Connections)๊ฐ ๋์์ต๋๋ค. ๋ชจ๋ ์์๋ค์ ๋ํ ์์ฒญ๊ณผ ์๋ต์ด ์๊ณ ๋์ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค. Keep-Alive๋ฅผ ํตํด HTTP ์ง์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํด์ง๋๋ค. Keep Alive์ ์ ์ง ์๊ฐ์ ์ฐ๊ฒฐ๋ Socket์ I/O Access๊ฐ ๋ง์ง๋ง์ผ๋ก ์ข ๋ฃ๋ ์์ ๋ถํฐ ์ ์๋ ์๊ฐ๊น์ง์ ๋๋ค. Access๊ฐ ์๋๋ผ๋ ์ธ์ ์ ์ ์งํฉ๋๋ค. ์ฆ, ์ ์๋ ์๊ฐ ๋ด์ Access๊ฐ ์ด๋ฃจ์ด์ง๋ค๋ฉด ๊ณ์ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
HTTP ํค๋
ํํ ํค๋ (Representation Headers)
์ฃผ๋ก Content๋ก ์์ํ๋ ํค๋๋ฅผ ํํ ํค๋๋ผ๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ์ ํํ์ ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋งํฉ๋๋ค. ๋ฐ๋ผ์ ํํ ํค๋๋ ์์ฒญ, ์๋ต ๋๋ค ์ฌ์ฉํฉ๋๋ค. HTTP ํค๋์๋ HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ํ์์ ์์์ ํค๋๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. ์๋์ ๊ฐ์ ํํ ํค๋๊ฐ ์์ต๋๋ค.
- Content-Type: ํํ ๋ฐ์ดํฐ์ ํ์ (text/html; charset=UTF-8, application/json, Image/png)
- Content-Encoding: ํํ ๋ฐ์ดํฐ์ ์์ถ ๋ฐฉ์(gzip, deflate, identity)
- Content-Language: ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด (not ํ๋ก๊ทธ๋๋ฐ ์ธ์ด)
- Content-Length: ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด
HTTP ๋ฐ๋์์๋ ๋ฐ์ดํฐ ๋ฉ์ธ์ง ๋ณธ๋ฌธ์ ํตํด์ ํํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ด ๋๋ฅด๋ ๋ถ๋ถ์ ํ์ด๋ก๋๋ผ๊ณ ํฉ๋๋ค.
HTTP ์ฃผ์ ํค๋
์์ฒญ(Request)์์ ์ฌ์ฉ๋๋ ํค๋
- Referer: ํ์ฌ ์์ฒญ๋ ํ์ด์ง์ ์ด์ ์น ํ์ด์ง ์ฃผ์. A์์ B๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ B๋ฅผ ์์ฒญํ ๋
Referer: A
๋ฅผ ํฌํจํด์ ์์ฒญํฉ๋๋ค. - User-Agent: ์ ์ ์์ด์ ํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ก ์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ ํ ์ ์์ต๋๋ค.
- Host: ์์ฒญํ ํธ์คํธ ์ ๋ณด(๋๋ฉ์ธ)์ผ๋ก ํ์ ํค๋์ ๋๋ค.
- Origin: ์๋ฒ๋ก POST ์์ฒญ์ ๋ณด๋ผ ๋, ์์ฒญ์ ์์ํ ์ฃผ์๋ฅผ ๋ํ๋ ๋๋ค. ์ฌ๊ธฐ์ ์์ฒญ์ ๋ณด๋ธ ์ฃผ์์ ๋ฐ๋ ์ฃผ์๊ฐ ๋ค๋ฅด๋ฉด CORS ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
- Authorization: JWT์ ๊ฐ์ ์ธ์ฆ ํ ํฐ์ ์๋ฒ๋ก ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ํค๋์ ๋๋ค. Authorization: Basic(ํ ํฐ์ ์ข ๋ฅ) YWxhZGRpbjpvcGVuc2VzYW1l(์ค์ ํ ํฐ ๋ฌธ์)
- From: ์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด
์๋ต(Response)์์ ์ฌ์ฉ๋๋ ํค๋
- Server: ์์ฒญ์ ์ฒ๋ฆฌํ๋ ORIGIN ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด
Server: Apache/2.2.22 (Debian) - Date: ๋ฉ์ธ์ง๊ฐ ๋ฐ์ํ ๋ ์ง์ ์๊ฐ
- Location: 3xx ์๋ต์ ๊ฒฐ๊ณผ์ ํ์ด์ง ๋ฆฌ๋๋ ์ ํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- Allow: ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋๋ก 405(Method Not Allowed)์์ ์๋ต์ ํฌํจํฉ๋๋ค.
- Retry-After: ์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ผ๋ก 503(Service Unavailable)์์ ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์์ต๋๋ค.
์ฝํ ์ธ ํ์ ํค๋
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ ์์ฒญ์ ๋ณด์ฌ์ฃผ๋ ํ์ ํค๋๋ ์ ์๋๋ก ์์ฒญ ์์๋ง ์ฌ์ฉํฉ๋๋ค. ์ข ๋ฅ๋ ์๋์ ๊ฐ์ด ์์ต๋๋ค.
- Accept: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
- Accept-Charset: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
- Accept-Encoding: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
- Accept-Language: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด. 1๋ถํฐ 0๊น์ง ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ ์ ์์ต๋๋ค
Accept-Language: ko-KR(๊ธฐ๋ณธ 1), ko;q=0.9, en-US;q=0.8, en;q=0.7
์น ์บ์
์บ์์ ๊ธฐ๋ณธ ์๋ฆฌ ๋ฐ ์ ์ฉ
์ด์ ์ ๋ฐฐ์ ๋ ๊ฒ์ฒ๋ผ ์บ์๋ ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋๋ ์์ ์ฅ์๋ฅผ ๋งํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ์บ์๋ฅผ ์ ์ฅํ ๋ cache-control ์์ฑ์ ํตํด ์บ์๊ฐ ์ ํจํ ์๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
Cache-Control: max-age = 60
์ด๋ ๊ฒ ํ๋ฉด 60์ด ๋์ ํด๋น ์บ์๊ฐ ์ ํจํ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ง์ฝ ์บ์์ ์ ํจ์๊ฐ์ด ์ด๊ณผํ๋ค๋ฉด ๋ค์ ์๋ฒ์ ์์ฒญ์ ํ๊ณ 60์ด๊ฐ ์ ํจํ ๋ฆฌ์์ค๋ฅผ ์๋ต๋ฐ์ต๋๋ค. ์ด๋ ๋ค์ ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ ๋๋ง ํ๋ฉด ๋ธ๋ผ์ฐ์ ์บ์๋ ๊ธฐ์กด ์บ์๋ฅผ ์ง์ฐ๊ณ ์ ์บ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์บ์ ์ ํจ ์๊ฐ์ด ๋ค์ ์ด๊ธฐํ๋ฉ๋๋ค.
์บ์ ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ
์บ์ ์ ํจ์๊ฐ์ด ์ง๋ฌ์ง๋ง ๋ณ๊ฒฝ์ด ์์ด์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์จ๋ ๋๋ ์ํฉ์ผ ๋, ๋ค์ ๋ค์ด๋ก๋๋ฅผ ํ์ง ์๊ณ ๊ฒ์ฆ๋ง์ผ๋ก ๋๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
Last-Modified์ If-Modified-Since
Last Modified๋ ๋ฐ์ดํฐ๊ฐ ๋ง์ง๋ง์ผ๋ก ์์ ๋ ์๊ฐ ์ ๋ณด๋ฅผ ํค๋์ ํฌํจํฉ๋๋ค. ์บ์ ์ ํจ์๊ฐ์ด ์ด๊ณผ๋๋๋ผ๋ If Modified Since ํค๋๋ฅผ ์ด์ฉํด ์กฐ๊ฑด๋ถ ์์ฒญ์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ์์ ์ด ์๋์์ ๊ฒฝ์ฐ ์๋ต ๋ฉ์์ง์ ๋ฐ์ดํฐ๋ ์๊ณ (๋นํจ์จ์ฑ ๊ฐ์) ์ํ ์ฝ๋ 304 Not Modified๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
ETag์ If-None-Match
์๋ฒ์์ ํค๋์ ETag๋ฅผ ์์ฑํด ์๋ตํ๊ณ , ํด๋ผ์ด์ธํธ์ ์บ์์ ํด๋น ETag ๊ฐ์ ์ ์ฅํฉ๋๋ค. ์บ์ ์ ํจ์๊ฐ์ด ์ด๊ณผ๋์ด์ ๋ค์ ์์ฒญํด์ผ ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด๋ ETag ๊ฐ์ ๊ฒ์ฆํ๋ If None Match๋ฅผ ์์ฒญ ํค๋์ ์์ฑํด์ ๋ณด๋ ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๊ฒฝ์ฐ If None Match๊ฐ ๊ฑฐ์ง์ด ๋๋ฉฐ ๋ฐ๋ ์์ด 304 Not Modified ์ํ ์ฝ๋๊ฐ ์ ์ก๋ฉ๋๋ค.
Cache-Control
- Cache-Control: max-age
์บ์ ์ ํจ ์๊ฐ์ผ๋ก ์ด ๋จ์๋ก ์ค์ ํฉ๋๋ค. - Cache-Control: no-cache
๋ฐ์ดํฐ๋ ์บ์ ํด๋ ๋์ง๋ง, ํญ์ Origin ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ. ๋ง์ฝ Origin ์๋ฒ ์ ๊ทผ ์คํจ ์ 200OK๋ฅผ ์๋ตํ๋ฉฐ ์ค๋๋ ๋ฐ์ดํฐ๋ผ๋ ๋ณด์ฌ์ค๋๋ค. - Cache-Control: no-store
๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ์ ์ฅํ๋ฉด ์ ๋๋ค๋ ์๋ฏธ์ ๋๋ค. - Cache-Control: must-revalidate
์บ์ ๋ง๋ฃ ํ, ํญ์ Origin ์๋ฒ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ. ๋ง์ฝ Origin ์๋ฒ ์ ๊ทผ ์คํจ ์ ๋ฐ๋์ 504(Gateway Timeout) ์ค๋ฅ ๋ฐ์์์ผ์ผ ํ๋ฉฐ, ์ด์ ์ ๋ฐ์ดํฐ์กฐ์ฐจ๋ ์ ์กํ์ง ์์ต๋๋ค. - Pragma: no-cache
HTTP 1.0 ํ์ ํธํ
์บ์ ๋ฌดํจํ๋ฅผ ํ์คํ๊ฒ ํ๊ณ ์ถ์ผ๋ฉด Cache-Control: no-cache, no-store, must-revalidate / Pragma: no-cache ๋ชจ๋ ์ ์ฉํด์ผ ํฉ๋๋ค.
ํ๋ก์ ์บ์ (Proxy Cache)
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ๋๋ฆฌ๋ก ํต์ ์ ์ํํ๋ ์๋ฒ๋ฅผ ํ๋ก์ ์๋ฒ๋ผ๊ณ ํฉ๋๋ค. ๋ค๋ฅธ ๋คํธ์ํฌ์ ๊ฐ์ ์ ์ผ๋ก ์ ์ํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ณด์, ์บ์ฑ์ ํตํ ์ฑ๋ฅ, ํธ๋ํฝ ๋ถ์ฐ ๋ฑ์ ์ฅ์ ์ ๊ฐ์ง๋๋ค. ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๊ณ ์ ์ฅํ๋ ์บ์๋ฅผ private ์บ์๋ผ๊ณ ํฉ๋๋ค. ํ๋ก์ ์บ์ ์๋ฒ์ ์บ์๋ฅผ public ์บ์๋ผ๊ณ ํฉ๋๋ค.