TIL

TIL 60: [๋„คํŠธ์›Œํฌ] ์‹ฌํ™”

Deviloper๐Ÿ˜ˆ 2021. 10. 27. 22:17

์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์ด ๋งŽ์•„ ๋ถ„๋Ÿ‰ ์กฐ์ ˆ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค..๐Ÿ˜‚

 

์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ

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๋ฅผ ๋ณด๋‚ด๋ฉด ์ด ์ดํ›„๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ์ด ์„ฑ๋ฆฝ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Wireshark๋ฅผ ํ†ตํ•ด ๋ณธ 3 Way Handshake

์œ„์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— 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 ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

ํ† ์Šค ํŽ˜์ด์ง€ ์ƒํƒœ์ฝ”๋“œ 200๊ณผ 304

 

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 ์บ์‹œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.