[TIL] Day56 #TCP/IP #OSI7Layer #HTTP #Cache

Beanxxยท2022๋…„ 7์›” 15์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
56/120
post-thumbnail

2022.07.13(Wed)

[TIL] Day56
[SEB FE] Day55

์ด์ œ์•ผ ์˜ฌ๋ฆฌ๋Š” ์ˆ˜์šœ TIL,, ๋„คํŠธ์›Œํฌ ๋„˜ ์–ด๋ ค์›Œ์„œ ๋จธ๋ฆฌ์— ์•ˆ ๋“ค์–ด์˜จ๋‹ค ๐Ÿฅฒ

โ˜‘๏ธย TCP/IP

๐Ÿ“Žย Start Network

โžฐย ํšŒ์„ ๊ตํ™˜ ๋ฐฉ์‹
: ๋ฐœ์‹ ์ž์™€ ์ˆ˜์‹ ์ž ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ „์šฉ์„ ์„ ๋ฏธ๋ฆฌ ํ• ๋‹นํ•˜๊ณ  ์—ฐ๊ฒฐ

  • ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒ๋Œ€๊ฐ€ ๋‹ค๋ฅธ ์ƒ๋Œ€์™€ ์—ฐ๊ฒฐ ์ค‘์ด๋ผ๋ฉด, ํ•ด๋‹น ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ์•ผ ์ƒ๋Œ€๋ฐฉ๊ณผ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ โญ•๏ธ
  • ํŠน์ • ํšŒ์„ ์ด ๋Š์–ด์ง€๋Š” ๊ฒฝ์šฐ์—” ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ์—ฐ๊ฒฐ ํ•„์š”

    ๐Ÿ‘Ž ๋‹จ์ : ์ฆ‰์‹œ์„ฑ ๋–จ์–ด์ง

โžฐย ํŒจํ‚ท๊ตํ™˜ ๋ฐฉ์‹
: ํŒจํ‚ท ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์ „์†กํ•˜๋Š” ๋ฐฉ์‹

  • ๊ฐ ํŒจํ‚ท์—” ์ถœ๋ฐœ์ง€์™€ ๋ชฉ์ ์ง€ ์ •๋ณด๊ฐ€ ์žˆ๊ณ , ํŒจํ‚ท์ด ๋ชฉ์ ์ง€๋ฅผ ํ–ฅํ•ด ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅ
  • ํŠน์ • ํšŒ์„ ์ด ์ „์šฉ์„ ์œผ๋กœ ํ• ๋‹น๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ โญ•๏ธ

๐Ÿ“Žย IP / IP Packet

๐Ÿ‘‰ย IP(์ธํ„ฐ๋„ท ํ”„๋กœํ† ์ฝœ): ์ถœ๋ฐœ์ง€์™€ ๋ชฉ์ ์ง€ ์ •๋ณด๋ฅผ IP์ฃผ์†Œ๋กœ ํ‘œ๊ธฐํ•˜๊ณ , ์ง€์ •ํ•œ IP์ฃผ์†Œ์— ํŒจํ‚ท(packet) ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก

โžฐย IP ํŒจํ‚ท: ์ „์†ก ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌด์‚ฌํžˆ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์ถœ๋ฐœ์ง€ IP, ๋ชฉ์ ์ง€ IP์™€ ๊ฐ™์€ ์ •๋ณด ํฌํ•จ

  1. IP ์ฃผ์†Œ ๋ถ€์—ฌ
  2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ํŒจํ‚ท ์ „๋‹ฌ
  3. IF ์„œ๋ฒ„๊ฐ€ ๋ฌด์‚ฌํžˆ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ›์œผ๋ฉด, ํด๋ผ์ด์–ธํŠธ์— IP ํŒจํ‚ท์„ ์ด์šฉํ•ด ์‘๋‹ต ์ „๋‹ฌ

๐Ÿฅฒย IP ํ”„๋กœํ† ์ฝœ ํ•œ๊ณ„

โŒ˜ ๋น„์—ฐ๊ฒฐ์„ฑ

  • ํŒจํ‚ท์„ ๋ฐ›์„ ๋Œ€์ƒ์ด ์—†๊ฑฐ๋‚˜ ์„œ๋น„์Šค ๋ถˆ๋Šฅ ์ƒํƒœ์—ฌ๋„ ๊ทธ๋Œ€๋กœ ํŒจํ‚ท ์ „์†ก

โŒ˜ ๋น„์‹ ๋ขฐ์„ฑ

  • ์ค‘๊ฐ„์— ํŒจํ‚ท์ด ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
  • ํŒจํ‚ท์ด ์ˆœ์„œ๋Œ€๋กœ ๋„์ฐฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

๐Ÿ“Žย TCP / UDP

โžฐย Network Socket
: ํ”„๋กœ๊ทธ๋žจ์ด ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์—ฐ๊ฒฐ๋ถ€

  1. ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ
  2. Socket ์„ ํ†ตํ•ด HTTP ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
  3. TCP ์ •๋ณด ์ƒ์„ฑ (๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ ํฌํ•จ)
  4. IP ํŒจํ‚ท ์ƒ์„ฑ ์ „, TCP ์„ธ๊ทธ๋จผํŠธ ์ƒ์„ฑ
    โ†’ ์ด๋”๋„ท ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌํ•จ๋˜์–ด ์„œ๋ฒ„๋กœ ์ „์†ก๋จ
  5. IP ํŒจํ‚ท ์ƒ์„ฑ (TCP ๋ฐ์ดํ„ฐ ํฌํ•จ)

โžฐย TCP/IP ์„ธ๊ทธ๋จผํŠธ
: IP ํŒจํ‚ท์˜ ์ถœ๋ฐœ์ง€ IP์™€ ๋ชฉ์ ์ง€ IP ์ •๋ณด๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ์ถœ๋ฐœ์ง€ PORT, ๋ชฉ์ ์ง€ PORT, ์ „์†ก ์ œ์–ด, ์ˆœ์„œ, ๊ฒ€์ฆ ์ •๋ณด ๋“ฑ ํฌํ•จ

โžฐย TCP(Transmission Control Protocol): ์ „์†ก ์ œ์–ด ํ”„๋กœํ† ์ฝœ
: ์žฅ์น˜๋“ค ์‚ฌ์ด์— ๋…ผ๋ฆฌ์ ์ธ ์ ‘์†์„ ์„ฑ๋ฆฝํ•˜๊ธฐ ์œ„ํ•˜์—ฌ 3way handshake๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ๊ฒฐ์ง€ํ–ฅํ˜• ํ”„๋กœํ† ์ฝœ

  • ์—ฐ๊ฒฐ ์ง€ํ–ฅ (TCP 3way handshake; ๊ฐ€์ƒ ์—ฐ๊ฒฐ)
  • ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์ฆ
  • ์ˆœ์„œ ๋ณด์žฅ
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ

โžฐย TCP 3 way handshake

  1. ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„์— ์ ‘์†์„ ์š”์ฒญํ•˜๋Š” SYN ํŒจํ‚ท์„ ๋ณด๋ƒ„
  2. ์„œ๋ฒ„ โ†’ SYN ์š”์ฒญ์„ ๋ฐ›๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•œ๋‹ค๋Š” ACK & SYN ๊ฐ€ ์„ค์ •๋œ ํŒจํ‚ท ๋ฐœ์†ก
  3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ACK์œผ๋กœ ์‘๋‹ตํ•˜๊ธฐ๋ฅผ wait
  4. ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„์—๊ฒŒ ACK์„ ๋ณด๋‚ด๋ฉด, ์ด ์ดํ›„๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ ์„ฑ๋ฆฝ
    โ‡’ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ
  5. (IF ์„œ๋ฒ„ OFF, ํด๋ผ์ด์–ธํŠธ๋Š” SYN์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ์—†์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก โŒ)
    โœš SYN(Synchronize), ACK(Acknowledgment)

โœ‹ย TCP๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด ์‘๋‹ต์„ ๋Œ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— IPํŒจํ‚ท ํ•œ๊ณ„์ธ ๋น„์—ฐ๊ฒฐ์„ฑ ๋ณด์™„ ๊ฐ€๋Šฅ!

โœ‹ย IF ํŒจํ‚ท์ด ์ˆœ์„œ๋Œ€๋กœ ๋„์ฐฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, TCP ์„ธ๊ทธ๋จผํŠธ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ํŒจํ‚ท ์žฌ์ „์†ก ์š”์ฒญ ๊ฐ€๋Šฅ โ‡’ IPํŒจํ‚ท ํ•œ๊ณ„์ธ ๋น„์‹ ๋ขฐ์„ฑ ๋ณด์™„ ๊ฐ€๋Šฅ

โžฐย UDP(User Datagram Protocol): ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ทธ๋žจ ํ”„๋กœํ† ์ฝœ
: IP ํ”„๋กœํ† ์ฝœ + PORT, ์ฒดํฌ์„ฌ ํ•„๋“œ ์ •๋ณด๋งŒ ์ถ”๊ฐ€๋œ ๋‹จ์ˆœํ•œ ํ”„๋กœํ† ์ฝœ

  • ๋น„ ์—ฐ๊ฒฐ์ง€ํ–ฅ (TCP 3way handshake โŒ)
  • ๊ธฐ๋Šฅ ๊ฑฐ์˜ ์—†์Œ
  • ์‹ ๋ขฐ์„ฑ โฌ‡๏ธ
  • ๋‹จ์ˆœํ•˜๋ฉฐ, ๋น ๋ฅธ ์†๋„ ๋ณด์žฅ (๐Ÿคทโ€โ™€๏ธย why? 3 way handshake ๋ฐฉ์‹ โŒ)
  • ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ณด์ฆ โŒ
  • ์ˆœ์„œ ๋ณด์žฅ โŒ
  • ์—ฐ์†์„ฑ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค์— ์ž์ฃผ ์‚ฌ์šฉ

โœš HTTP3: UDP ์‚ฌ์šฉ โ†’ย ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ ๐Ÿ‘

โœš CheckSum: ์ค‘๋ณต ๊ฒ€์‚ฌ์˜ ํ˜•ํƒœ๋กœ, ์˜ค๋ฅ˜ ์ •์ •์„ ํ†ตํ•ด ๊ณต๊ฐ„์ด๋‚˜ ์‹œ๊ฐ„ ์†์—์„œ ์†ก์‹ ๋œ ์ž๋ฃŒ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•

TCPUDP
์—ฐ๊ฒฐ์ง€ํ–ฅ ์—ฌ๋ถ€์—ฐ๊ฒฐ์ง€ํ–ฅํ˜• ํ”„๋กœํ† ์ฝœ๋น„์—ฐ๊ฒฐ์ง€ํ–ฅํ˜• ํ”„๋กœํ† ์ฝœ
์ „์†ก ์ˆœ์„œ ๋ณด์žฅโญ•๏ธโŒ
๋ฐ์ดํ„ฐ ์ˆ˜์‹  ์—ฌ๋ถ€ ํ™•์ธโญ•๏ธโŒ
์‹ ๋ขฐ์„ฑ & ์†๋„์‹ ๋ขฐ์„ฑ โฌ†๏ธ, ์†๋„ โฌ‡๏ธ์‹ ๋ขฐ์„ฑ โฌ‡๏ธ, ์†๋„ โฌ†๏ธ
ํ•œ๋งˆ๋””๋กœ..?์ข‹์€ ๊ธฐ๋Šฅ ๋‹ค ๋“ค์–ด์žˆ๋Š” ๋ฌด๊ฑฐ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํ•„์š” ๊ธฐ๋Šฅ๋งŒ ๋“ค์–ด์žˆ๋Š” ๊ฐ€๋ฒผ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


โ˜‘๏ธย ๋„คํŠธ์›Œํฌ ๊ณ„์ธต ๋ชจ๋ธ

OSI 7๊ณ„์ธตTCP/IP 4๊ณ„์ธต
์‘์šฉ(Application Layer)

ex. HTTP, DNS, SSL, SMTP, FIP
- ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณ„์ธต
- ์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
ํ‘œํ˜„(Presentation Layer)

ex. GIF, JPEG, MPEG, MIME, ZIP, ASCLL
- ์‘์šฉ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ณ„์ธต
- ๋ฒˆ์—ญ๊ธฐ ์—ญํ•  ์ˆ˜ํ–‰
ex. ๋ฌธ์ž์ฝ”๋“œ, ์••์ถ•, ์•”ํ˜ธํ™” ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
์„ธ์…˜(Session Layer)

ex. RPC, SQL, NETBOIS, Sockets
- ์„ธ์…˜ ์—ฐ๊ฒฐ ์„ค์ •&ํ•ด์ œ, ์„ธ์…˜ ๋ฉ”์‹œ์ง€ ์ „์†ก ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ ๊ณ„์ธต
- ์ปดํ“จํ„ฐ๊ฐ„์˜ ํ†ต์‹  ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฒฐ์ •ํ•˜๋Š” ๊ณ„์ธต
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
์ „์†ก(Transport Layer)

ex. TCP, UDP, NETBEUI
- ์ปดํ“จํ„ฐ๊ฐ„ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณ„์ธต
- ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋“ค์ด ์‹ค์ œ๋กœ ์ •์ƒ์ ์œผ๋กœ ๋ณด๋‚ด์ง€๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์—ญํ• 
ex. TCP/UDP ์—ฐ๊ฒฐ
์ „์†ก
๋„คํŠธ์›Œํฌ(Network Layer)

ex. IP, ICMP
- ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋ฐ์ดํ„ฐ ๋ผ์šฐํŒ… ๋‹ด๋‹น
โœŽ ๋ผ์šฐํŒ…: ์–ด๋–ค ๋„คํŠธ์›Œํฌ ์•ˆ์—์„œ ํ†ต์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์งœ์—ฌ์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋ณด๋‚ผ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •
ex. IP ํŒจํ‚ท ์ „์†ก
์ธํ„ฐ๋„ท
๋ฐ์ดํ„ฐ ๋งํฌ(Data Link Layer)

ex. FDDI, Ethernet, PPP
- ๋„คํŠธ์›Œํฌ ๊ธฐ๊ธฐ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ๋ฌผ๋ฆฌ์ฃผ์†Œ ๊ฒฐ์ • ๊ณ„์ธต
- ๋ฌผ๋ฆฌ ๊ณ„์ธต์—์„œ ๋“ค์–ด์˜จ ์ „๊ธฐ ์‹ ํ˜ธ๋ฅผ ๋ชจ์•„ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌ
ex. ๋ธŒ๋ฆฌ์ง€, ์Šค์œ„์น˜, MAC ์ฃผ์†Œ
๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค
๋ฌผ๋ฆฌ(Physical Layer)

ex. CDMA, GSM, NICs, CSMA/CD, Fiber
- ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ฌผ๋ฆฌ์  ์—ฐ๊ฒฐ๊ณผ ์ „๊ธฐ ์‹ ํ˜ธ๋ฅผ ๋ณ€ํ™˜ ๋ฐ ์ œ์–ดํ•˜๋Š” ๊ณ„์ธต
- ์ฃผ๋กœ ๋ฌผ๋ฆฌ์  ์—ฐ๊ฒฐ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด ์ •์˜
- ๋“ค์–ด์˜จ ์ „๊ธฐ ์‹ ํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ์ž˜ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ 
ex. ๋””์ง€ํ„ธ/์•„๋‚ ๋กœ๊ทธ๋กœ ์‹ ํ˜ธ ๋ณ€๊ฒฝ
๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค

๐Ÿ“Žย OSI 7๊ณ„์ธต ๋ชจ๋ธ

Header: ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋ณด๋‚ผ ๋•Œ ๊ฐ ๊ณ„์ธต์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ ๋ฐ์ดํ„ฐ
๐Ÿ‘‰ย ์ฆ‰, ์ด๋ ‡๊ฒŒ ํ—ค๋”๋ฅผ ๋ถ™์—ฌ๋‚˜๊ฐ€๋Š” ๊ฒƒ โ‡’ ์บก์Šํ™”

โžฐย ๋ฐ์ดํ„ฐ ์บก์Šํ™”

  • ๊ฐ ๊ณ„์ธต์€ ๋…๋ฆฝ์  โ†’ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๋™์•ˆ์— ๋‹ค๋ฅธ ๊ณ„์ธต ์˜ํ–ฅ โŒ
  • ๋ฐ์ดํ„ฐ ์ „์†ก์ธก: ์ƒ์œ„ โ†’ ํ•˜์œ„ ๊ณ„์ธต์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

โžฐย ์—ญ์บก์Šํ™”: ์ƒ์œ„ ๊ณ„์ธต์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์—์„œ ํ—ค๋”๋ฅผ ์ œ๊ฑฐํ•ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ


๐Ÿ“Žย TCP/IP 4๊ณ„์ธต ๋ชจ๋ธ

: ์‹ค์šฉ์„ฑ์— ๊ธฐ๋ฐ˜์„ ๋‘” ํ˜„๋Œ€์˜ ์ธํ„ฐ๋„ท ํ‘œ์ค€

4๏ธโƒฃย ๊ณ„์ธต์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต- TCP/UDP๊ธฐ๋ฐ˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ
ex. FTP, HTTP, SSH
3๏ธโƒฃย ๊ณ„์ธต์ „์†ก ๊ณ„์ธต- ํ†ต์‹  ๋…ธ๋“œ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ œ์–ดํ•˜๊ณ , ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋‹ด๋‹น
ex. TCP/UDP
2๏ธโƒฃย ๊ณ„์ธต์ธํ„ฐ๋„ท ๊ณ„์ธต- ํ†ต์‹  ๋…ธ๋“œ ๊ฐ„์˜ IP ํŒจํ‚ท์„ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ ๋ฐ ๋ผ์šฐํŒ… ๋‹ด๋‹น
ex. IP, ARP, RARP
1๏ธโƒฃย ๊ณ„์ธต๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต- ๋ฌผ๋ฆฌ์ ์ธ ์ฃผ์†Œ๋กœ MAC ์‚ฌ์šฉ
ex. LAN, ํŒจํ‚ท๋ง

โžฐย Client: ์„œ๋น„์Šค ์š”์ฒญ์ธก
โžฐย Server: ์„œ๋น„์Šค ์ œ๊ณต์ธก



โ˜‘๏ธย HTTP

HTTP/1.1, HTTP/2 ๐Ÿ‘‰ย TCP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ
HTTP/3 ๐Ÿ‘‰ย UDP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ

๐Ÿ“Žย HTTP ํŠน์ง•

  1. ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๊ตฌ์กฐ

    • Request-Response ๊ตฌ์กฐ
    • ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต ๋Œ€๊ธฐ
    • ์„œ๋ฒ„ โ†’ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ์‘๋‹ต
  2. ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ (Stateless)

    • ๋น„์—ฐ๊ฒฐ์„ฑ์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๋Š” ์†์„ฑ
    • ์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๋ณด์กด โŒ
      • ๐Ÿ‘ย ์„œ๋ฒ„ ํ™•์žฅ์„ฑ โฌ†๏ธย (์Šค์ผ€์ผ ์•„์›ƒ - ์ˆ˜ํ‰ ํ™•์žฅ ์œ ๋ฆฌ)
      • ๐Ÿ‘Žย ํด๋ผ์ด์–ธํŠธ โ†’ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก

    โžฐย Stateful vs Stateless

    • Stateful(์ƒํƒœ์œ ์ง€)
      • ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค!!
      • IF ์„œ๋ฒ„ ์žฅ์•  ๋ฐœ์ƒ โ†’ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ์‘๋‹ต ์ „๋‹ฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์‹œ ์š”์ฒญํ•  ํ•„์š” โŒ
      • ex. Login โ†’ ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค, ์„œ๋ฒ„ ์„ธ์…˜, ํ† ํฐ ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ƒํƒœ ์œ ์ง€
    • Stateless(๋ฌด์ƒํƒœ)
      • ์•„๋ฌด ์„œ๋ฒ„๋‚˜ ํ˜ธ์ถœํ•ด๋„ ๋œ๋‹ค!! (์š”์ฒญ์‹œ ์ด๋ฏธ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋‹ด์•„์„œ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ)
      • IF ์„œ๋ฒ„ ์žฅ์•  ๋ฐœ์ƒ โ†’ ์œ ์ง€๋˜๋˜ ์ƒํƒœ ์ •๋ณด ๋‹ค ์ฆ๋ฐœ โ†’ ์ฒจ๋ถ€ํ„ฐ ๋‹ค์‹œ ์„œ๋ฒ„์— ์š”์ฒญ ๐Ÿ˜ญ
      • ๊ฐ‘์ž๊ธฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฆ๊ฐ€ โ†’ ์„œ๋ฒ„ ๋Œ€๊ฑฐ ํˆฌ์ž… ๊ฐ€๋Šฅ โญ•๏ธ
      • ์‘๋‹ต ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ โ†’ ๋ฌดํ•œํ•œ ์„œ๋ฒ„ ์ฆ์„ค ๊ฐ€๋Šฅ โญ•๏ธ
      • ex. Login์ด ํ•„์š”์—†๋Š” ๋‹จ์ˆœ ์„œ๋น„์Šค ์†Œ๊ฐœ ํ™”๋ฉด
  3. ๋น„์—ฐ๊ฒฐ์„ฑ (Connectionless)

    • ์‘๋‹ต์ด ์™„๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ์†์„ฑ
    • HTTP๋Š” ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ดˆ ๋‹จ์œ„ ์ดํ•˜์˜ ๋น ๋ฅธ ์†๋„๋กœ ์‘๋‹ต
    • ์ˆ˜์ฒœ๋ช…์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์‹ค์ œ ์„œ๋ฒ„์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ์€ ์ˆ˜์‹ญ๊ฐœ ์ดํ•˜๋กœ ๋งค์šฐ ์ž‘์Œ
      (ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์ง€ ์•Š๊ณ , ๋น ๋ฅธ ์‘๋‹ต์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ)

    โžฐย Connection Oriented (์—ฐ๊ฒฐ ์œ ์ง€ ๋ชจ๋ธ)
    : TCP/IP์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์œ ์ง€ โญ•๏ธ
    โ†’ ์„œ๋ฒ„ ์ž์› ๊ณ„์† ์†Œ๋ชจ

    โžฐย Connectionless (์—ฐ๊ฒฐ์„ ์š”์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ - ๋น„์—ฐ๊ฒฐ์„ฑ)
    : HTTP์—์„  ์‹ค์ œ๋กœ ์š”์ฒญ์„ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ๋งŒ ์—ฐ๊ฒฐ ์œ ์ง€ํ•˜๊ณ , ์‘๋‹ต์„ ์ฃผ๊ณ  ๋‚˜๋ฉด TCP/IP ์—ฐ๊ฒฐ ๋Š์Œ
    โ†’ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์œ ์ง€ โŒ, ์ตœ์†Œํ•œ์˜ ์ž์› ์‚ฌ์šฉ

    โžฐย ๋น„์—ฐ๊ฒฐ์„ฑ ํ•œ๊ณ„ ๊ทน๋ณต

    • TCP/IP ์—ฐ๊ฒฐ์„ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•จ (3way handshake ์‹œ๊ฐ„ ์ถ”๊ฐ€)
    • ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์‚ฌ์ดํŠธ ์š”์ฒญ โ†’ HTML, JS, CSS, ์ถ”๊ฐ€ ์ด๋ฏธ์ง€ ๋“ฑ ๋งŽ์€ ์ž์› ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ
    • ์ง€๊ธˆ์€ HTTP ์ง€์† ์—ฐ๊ฒฐ(Persistent Connections)๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
      • ์—ฐ๊ฒฐ ์ดํ›„, ๊ฐ ์ž์›๋“ค์„ ์š”์ฒญํ•˜๊ณ  ๋ชจ๋“  ์ž์›์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋Œ์•„์˜จ ํ›„ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    • HTTP/2, HTTP/3์—์„œ ๋” ๋งŽ์€ ์ตœ์ ํ™”
  4. HTTP ๋ฉ”์„ธ์ง€

  5. ๋‹จ์ˆœํ•˜๋ฉฐ, ํ™•์žฅ ๊ฐ€๋Šฅ


๐Ÿ“Žย HTTP ํ—ค๋”

โœŽ HTTP ๋ฉ”์‹œ์ง€ - Header & Body๋กœ ๊ตฌ๋ถ„

โžฐย HTTP Body
: ๋ฐ์ดํ„ฐ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(Message body)์„ ํ†ตํ•ด์„œ ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

โœš Payload: Message body
โœš ํ‘œํ˜„(Representation): ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ
โœš ํ‘œํ˜„ ํ—ค๋”: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ œ๊ณต

โžฐย HTTP Header
: HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

โœŽ Header ํ˜•์‹
<field-name>: <field-value>
โœ‹ย field-name์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ โŒ

โžฐย ํ‘œํ˜„ ํ—ค๋”

  • Content-Type: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ํ˜•์‹
    • ex. ๋ฏธ๋””์–ด ํƒ€์ž…, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
      • Text/html; charset-utf-8
      • application/json
  • Content-Encoding: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์••์ถ• ๋ฐฉ์‹
    • ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๋Š” ๊ณณ์—์„œ ์••์ถ• ํ›„ โ†’ ์ธ์ฝ”๋”ฉ ํ—ค๋” ์ถ”๊ฐ€
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ชฝ์—์„œ ์ธ์ฝ”๋”ฉ ํ—ค๋” ์ •๋ณด๋กœ ์••์ถ• ํ•ด์ œ
  • Content-Language: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด
    • ko, en, en-US
  • Content-Length: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ๊ธธ์ด
    • Byte ๋‹จ์œ„
    • Transfer-Encoding(์ „์†ก์‹œ ์–ด๋–ค ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ• ์‚ฌ์šฉํ•  ๊ฒƒ์ธ์ง€)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ โŒ

ย  โœ‹ย ํ‘œํ˜„ ํ—ค๋”๋Š” ์š”์ฒญ, ์‘๋‹ต ๋‘˜ ๋‹ค ์‚ฌ์šฉ


โžฐย ์š”์ฒญ(Request)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”

  1. From: User Agent์˜ email ์ •๋ณด

  2. Referer: ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ (์œ ์ž… ๊ฒฝ๋กœ ์ˆ˜์ง‘ ๊ฐ€๋Šฅ)

  3. User-Agent: User Agent Application ์ •๋ณด

  4. Host: ์š”์ฒญํ•œ Host ์ •๋ณด (Domain)

  5. Origin: ์„œ๋ฒ„๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, ์š”์ฒญ์„ ์‹œ์ž‘ํ•œ ์ฃผ์†Œ

    โœ‹ย ์š”์ฒญ ๋ณด๋‚ธ ์ฃผ์†Œ & ๋ฐ›๋Š” ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๋ฉด CORS error ๋ฐœ์ƒ

  6. Authorization: ์ธ์ฆ ํ† ํฐ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ—ค๋”

    • ํ† ํฐ ์ข…๋ฅ˜ + ์‹ค์ œ ํ† ํฐ ๋ฌธ์ž ์ „์†ก

โžฐย ์‘๋‹ต(Response)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”

  1. Server: ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ORIGIN ์„œ๋ฒ„์˜ SW ์ •๋ณด
  2. Date: ๋ฉ”์‹œ์ง€ ๋ฐœ์ƒ ๋‚ ์งœ&์‹œ๊ฐ„
  3. Location: Page Redirection
    • 201(created): Location ๊ฐ’์€ ์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ Resource URI
    • 3xx(Redirection): Location ๊ฐ’์€ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค
  4. Allow: ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œ
    • 405(Method Not Allowed)์—์„œ ์‘๋‹ต์— ํฌํ•จ
  5. Retry-After: User Agent๊ฐ€ ๋‹ค์Œ ์š”์ฒญ์„ ํ•˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์‹œ๊ฐ„
    • 503(Service Unavailable): ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ถˆ๋Šฅ์ธ์ง€ ์•Œ๋ฆผ ๊ฐ€๋Šฅ

โžฐย ์ฝ˜๋ด์ธ  ํ˜‘์ƒ ํ—ค๋”
: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„ ์š”์ฒญ

  • Accept: ํด๋ผ์ด์–ธํŠธ ์„ ํ˜ธ ๋ฏธ๋””์–ด ํƒ€์ž… ์ „๋‹ฌ
  • Accept-Charset: ํด๋ผ์ด์–ธํŠธ ์„ ํ˜ธ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
  • Accept-Encoding: ํด๋ผ์ด์–ธํŠธ ์„ ํ˜ธ ์••์ถ• ์ธ์ฝ”๋”ฉ
  • Accept-Language: ํด๋ผ์ด์–ธํŠธ ์„ ํ˜ธ ์ž์—ฐ ์–ธ์–ด
    • ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ๊ฐ€๋Šฅ (1~0)
    • Accept-Language: ko-KR, ko;q=0.9, en-US;q=0.8, en;q=0.7

ย โœ‹ย ํ˜‘์ƒ ํ—ค๋”๋Š” ์š”์ฒญ์‹œ์—๋งŒ ์‚ฌ์šฉ



โ˜‘๏ธย Web Cache

โžฐย ์บ์‹œ(Cache): ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๋Š” ์ž„์‹œ ์žฅ์†Œ
๐Ÿ‘‰ย ์บ์‹œ์— ๋ฐ์ดํ„ฐ ๋ฏธ๋ฆฌ ๋ณต์‚ฌ์‹œ, ๋” ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ

โŒ˜ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์ €์žฅ์‹œ ํ—ค๋”์— cache-control ์†์„ฑ์„ ์ด์šฉํ•ด ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„ ์ง€์ • ๊ฐ€๋Šฅ
๐Ÿ‘‰ย Cache-Control: max-age=60 (60์ดˆ ๋™์•ˆ ํ•ด๋‹น ์บ์‹œ ์œ ํšจ)


๐Ÿฅฒย ์บ์‹œ๊ฐ€ ์—†์„ ๋•Œ

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„๋„ ๊ณ„์† ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผํ•จ
  • ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ๋Š” ๋งค์šฐ ๋Š๋ฆฌ๊ณ  ๋น„์Œˆ
  • ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ์†๋„ ๋Š๋ฆผ
  • ๋Š๋ฆฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต

๐Ÿ™‚ย ์บ์‹œ ์ ์šฉ

  • ์บ์‹œ ๊ฐ€๋Šฅ ์‹œ๊ฐ„๋™์•ˆ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ
  • ๋น„์‹ผ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ์†๋„ ๋งค์šฐ ๋น ๋ฆ„
  • ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต

โฐย IF ์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ฒฝ์šฐ
: ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋‹ค์‹œ ์กฐํšŒ โ†’ ์บ์‹œ ๊ฐฑ์‹  โ†’ ๋‹ค์‹œ ๋„คํŠธ์›Œํฌ ๋‹ค์šด๋กœ๋“œ ๋ฐœ์ƒ โ†’ ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”

๐Ÿ“Žย ์บ์‹œ ๊ฒ€์ฆ ํ—ค๋”

โžฐย ๊ฒ€์ฆ ํ—ค๋”(Validator) - Last Modified

  • ์บ์‹œ ์ˆ˜์ •์‹œ๊ฐ„ ์•Œ ์ˆ˜ ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ํ—ค๋”์— ํฌํ•จ
    โ‡’ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•  ๋•Œ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ๋„ ์ €์žฅ

    โœš ์บ์‹œ ์œ ํšจ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋”๋ผ๋„ If-Modified-Since ํ—ค๋”๋ฅผ ์ด์šฉํ•ด ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ๊ฐ€๋Šฅ โญ•๏ธ
  1. ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆ
  2. IF ์ˆ˜์ • โŒย โ†’ Body ์ œ์™ธํ•œ HTTP ํ—ค๋”๋งŒ ์ „์†ก
  3. ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์—์„œ ์‘๋‹ต ๊ฒฐ๊ณผ ์žฌ์‚ฌ์šฉ & ํ—ค๋” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 
  4. ๋ธŒ๋ผ์šฐ์ € โ†’ ์บ์‹œ์—์„œ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง

โœ…ย Last-Modified & If-Modified-Since Summary

  • IF ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„ ์ดˆ๊ณผ But, ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  โŒ
    โ‡’ 304 Not Modified + ํ—ค๋” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์‘๋‹ต (Body โŒ)
  • [Client] ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ์‘๋‹ต ํ—ค๋” ์ •๋ณด๋กœ ์บ์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 
  • [Client] ์บ์‹œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์žฌํ™œ์šฉ
  • ๋„คํŠธ์›Œํฌ ๋‹ค์šด๋กœ๋“œ๋Š” ๋ฐœ์ƒ But, ์šฉ๋Ÿ‰์ด ์ ์€ ํ—ค๋” ์ •๋ณด๋งŒ ๋‹ค์šด๋กœ๋“œ
  • Very ์‹ค์šฉ์ ์ธ ํ•ด๊ฒฐ์ฑ…!!

๐Ÿ‘Žย Last-Modified & If-Modified-Since ๋‹จ์ 

  • 1์ดˆ ๋ฏธ๋งŒ ๋‹จ์œ„๋กœ ์บ์‹œ ์กฐ์ • ๋ถˆ๊ฐ€๋Šฅ โŒ
  • ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋กœ์ง ์‚ฌ์šฉ
  • ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋‚ ์งœ๋Š” ๋‹ค๋ฅด์ง€๋งŒ, ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
  • ์„œ๋ฒ„์—์„œ ๋ณ„๋„ ์บ์‹œ ๋กœ์ง ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

โžฐย ETag(Entity Tag) & If-None-Match

  • ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ์บ์‹œ ์ปจํŠธ๋กคํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ โ†’ ETag ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์บ์‹œ์šฉ ๋ฐ์ดํ„ฐ์— ์ž„์˜์˜ ๊ณ ์œ  ๋ฒ„์ „ ์ด๋ฆ„ ๋‹ฌ์•„๋‘ 
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‹œ ์ด๋ฆ„ ๋ณ€๊ฒฝ โ†’ Hash ๋‹ค์‹œ ์ƒ์„ฑ
  • ๋‹จ์ˆœํžˆ ETag๋งŒ ๋ณด๋‚ด์„œ ๊ฐ™์œผ๋ฉด ์œ ์ง€, ๋‹ค๋ฅด๋ฉด ๋‹ค์‹œ ๋ฐ›๋Š” ๋ฐฉ์‹์ž„
  • ์บ์‹œ ์ œ์–ด ๋กœ์ง์„ ์„œ๋ฒ„์—์„œ ์™„์ „ํžˆ ๊ด€๋ฆฌ

โœ‹ย ์„œ๋ฒ„์—์„œ ๋ณ„๋„ ์บ์‹œ ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ โ†’ ETag ์‚ฌ์šฉ

  1. [Server] ํ—ค๋”์— ETag๋ฅผ ์ž‘์„ฑํ•ด ์‘๋‹ต
  2. ํด๋ผ์ด์–ธํŠธ์˜ ์บ์‹œ์—์„œ ํ•ด๋‹น ETag ๊ฐ’ ์ €์žฅ
  3. IF ์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์žฌ์š”์ฒญ โ†’ ETag ๊ฐ’์„ ๊ฒ€์ฆํ•˜๋Š” If-None-Match๋ฅผ ์š”์ฒญ ํ—ค๋”์— ์ž‘์„ฑํ•ด์„œ ๋ณด๋ƒ„
  4. ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ โŒย โ†’ ETag ๋™์ผ โ†’ If-None-Match ๊ฑฐ์ง“
  5. [Server] 304 Not Modified ์‘๋‹ต โ†’ HTTP Body โŒ
  6. ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์—์„  ์‘๋‹ต ๊ฒฐ๊ณผ ์žฌ์‚ฌ์šฉ & ํ—ค๋” ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 

ย โœ‹ย ์บ์‹œ ์œ ํšจ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋”๋ผ๋„ If-None-Match ํ—ค๋”๋ฅผ ์ด์šฉํ•ด ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ๊ฐ€๋Šฅ


โžฐย Cache-Control (์บ์‹œ ์ง€์‹œ์–ด)

  • Cache-Control: max-age: ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„ (์ดˆ ๋‹จ์œ„)
  • Cache-Control: no-cache: ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ Origin ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ
  • Cache-Control: no-store: ๋ฐ์ดํ„ฐ์— ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ €์žฅ โŒ

โžฐ Expires (์บ์‹œ ๋งŒ๋ฃŒ์ผ ์ง€์ •)

  • ์บ์‹œ ๋งŒ๋ฃŒ์ผ์„ ์ •ํ™•ํ•œ ๋‚ ์งœ๋กœ ์ง€์ •
  • HTTP 1.0๋ถ€ํ„ฐ ์‚ฌ์šฉ
  • ํ˜„์žฌ๋Š” Cache-Control: max-age ๊ถŒ์žฅ
  • max-age์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์‹œ Expires ๋ฌด์‹œ๋จ

๊ฒ€์ฆํ—ค๋”(Validator)์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”
ETagIf-Match, If-None-Match
Last-ModifiedIf-Modified-Since, If-Unmodified-Since

๐Ÿ“Žย ํ”„๋ก์‹œ ์บ์‹œ

โžฐย ํ”„๋ก์‹œ(Proxy): ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ๋Œ€๋ฆฌ๋กœ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
โžฐย ํ”„๋ก์‹œ ์„œ๋ฒ„: ๊ทธ ์ค‘๊ณ„ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์„œ๋ฒ„

๐Ÿ‘‰ย ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์— ๊ฐ„์ ‘์  ์ ‘์† ๊ฐ€๋Šฅ โ†’
๐Ÿ‘ย ๋ณด์•ˆ, ์บ์‹ฑ์„ ํ†ตํ•œ ์„ฑ๋Šฅ, ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ์žฅ์ 

  • ํด๋ผ์ด์–ธํŠธ์™€ ์› ์„œ๋ฒ„ ์‚ฌ์ด์— ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„๋ฅผ ๋„์ž…ํ•˜๋ฉด ๋น ๋ฅธ ์†๋„๋กœ ์ž๋ฃŒ ๊ฐ€์ ธ์˜ด

โžฐย private ์บ์‹œ: ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ์บ์‹œ (default)
โžฐย public ์บ์‹œ: ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„์˜ ์บ์‹œ

โžฐย ํ”„๋ก์‹œ ์บ์‹œ ๊ด€๋ จ Header

  • Cache-Control: public - ์‘๋‹ต์ด public ์บ์‹œ๋กœ ์ €์žฅ
  • Cache-Control: private - ์‘๋‹ต์ด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋งŒ์„ ์œ„ํ•จ, private ์บ์‹œ์— ์ €์žฅ
  • Cache-Control: s-maxage - ํ”„๋ก์‹œ ์บ์‹œ์—๋งŒ ์ ์šฉ๋˜๋Š” max-age
  • Age: 60 (HTTP ํ—ค๋”) - ์› ์„œ๋ฒ„์—์„œ ์‘๋‹ต ํ›„ ํ”„๋ก์‹œ ์บ์‹œ ๋‚ด์— ๋จธ๋ฌธ ์‹œ๊ฐ„(์ดˆ)

โžฐย ์บ์‹œ ๋ฌดํšจํ™” ๊ฐ€๋Šฅ Header

  • Cache-Control: no-cache: ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ Origin ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ โ†’ ๊ฒ€์ฆ ํ›„ 304 ์‘๋‹ต
  • Cache-Control: no-store: ๋ฐ์ดํ„ฐ์— ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ €์žฅ โŒ
  • Cache-Control: must-revalidate
    • ์บ์‹œ ๋งŒ๋ฃŒ ํ›„ ์ตœ์ดˆ ์กฐํšŒ์‹œ ์›์„œ๋ฒ„์— ๊ฒ€์ฆ
    • ์›์„œ๋ฒ„ ์ ‘๊ทผ ์‹คํŒจ์‹œ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒํ•ด์•ผํ•จ โ†’ 504(Gateway Timeout)
  • Pragma: no-cache: HTTP 1.0 ํ•˜์œ„ ํ˜ธํ™˜

๐Ÿค”ย IF ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„ & ์› ์„œ๋ฒ„ ๊ฐ„ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋‹จ์ ˆ โ†’ ์›์„œ๋ฒ„ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ,

  • [no-cache] ์‘๋‹ต์œผ๋กœ ์˜ค๋ฅ˜ ๋Œ€์‹  ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ผ๋„ ๋ณด์—ฌ์ฃผ์ž!! โ†’ ์บ์‹œ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ โ†’ 200 OK
  • [must-revalidate] ์‘๋‹ต์œผ๋กœ 504 Gateway Timeout Error
profile
FE developer

0๊ฐœ์˜ ๋Œ“๊ธ€