03
29

์ œ๊ฐ€ ๋ณด๋ ค๊ณ  ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค

TCP์™€ UDP์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋ง์”€ํ•ด์ฃผ์„ธ์š”

# TCP, UDP

TCP๋Š” ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ์—ฐ๊ฒฐ์ง€ํ–ฅ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ์ดํ„ฐ ํŒจํ‚ท์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ฉฐ ์—๋Ÿฌ ์ œ์–ด, ํ˜ผ์žก ์ œ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ฐ˜๋ฉด UDP๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋„์ฐฉํ–ˆ๋Š”์ง€(ํŒจํ‚ท๋ˆ„๋ฝ์€ ๊ณ ๋ คํ•˜์ง€์•Š๋Š”๋‹ค)์— ๋Œ€ํ•œ ์ฒดํฌ์„ฌ๋งŒ ์žˆ์„ ๋ฟ ํŒจํ‚ท์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€์•Š๊ณ , ์—๋Ÿฌ์ œ์–ด, ํ˜ผ์žก ์ œ์–ด๊ฐ™์€ ์ถ”๊ฐ€๊ธฐ๋Šฅ์ด ์—†๋‹ค.

๊ทธ ๋Œ€์‹  ์ด๋Ÿฐ ํ™•์ธ๊ณผ์ •์ด ์—†์œผ๋ฏ€๋กœ TCP๋ณด๋‹ค UDP๋Š” ๋น ๋ฅธ ์†๋„๊ฐ€ ์žฅ์ ์ด๋‹ค. TCP๋Š” ์—ฐ๊ฒฐ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค, ์˜ˆ๋ฅผ ๋“ค์–ด ์นœ๊ตฌ์™€ ์ฑ„ํŒ…์„ ํ•˜๊ฑฐ๋‚˜, ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ์˜จ๋ผ์ธ ๋™์˜์ƒ์„ ๋ณด๊ฑฐ๋‚˜, ์›น์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์— ์‚ฌ์šฉํ•˜๊ณ , UDP๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋‚˜ ๊ฒŒ์ž„๊ณผ ๊ฐ™์ด ๋น ๋ฅธ ์ „์†ก์†๋„๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค์— ์‚ฌ์šฉํ•œ๋‹ค. 

nordvpn ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

์ฟ ํ‚ค์™€ ์„ธ์…˜์— ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

# ์ฟ ํ‚ค, ์„ธ์…˜

์ƒํƒœ๋ฅผ ์ €์žฅ ์šฉ๋„๋กœ ์ฟ ํ‚ค, ์„ธ์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค. 

 

์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ ๋กœ์ปฌ(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋˜๋Š” ํŒŒ์ผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๊ฑฐ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ request header์— ๋„ฃ์–ด์„œ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค. ์ด๋•Œ ์ฟ ํ‚ค ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์ด์šฉํ•ด์„œ ์„œ๋ฒ„์™€ ์ฟ ํ‚ค ์œ ํšจ์„ฑ์„ ์ ๊ฐํ•˜๊ณ , ์ƒํƒœ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด ์„œ๋ฒ„์—์„œ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. 

์„ธ์…˜์€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๋‘”๋‹ค. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์„ธ์…˜ ID๋ฅผ ๋ถ€์—ฌํ•ด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์„ ๋•Œ ์ธ์ฆ์ƒํƒœ๋ฅผ ์œ ์ง€์‹œํ‚จ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋งŽ์•„์ง„๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. 

 

๋ณด์•ˆ ์ƒ ์žฅ์ ์ด ์„ธ์…˜์— ์žˆ๋‹ค. ๊ทธ๋Ÿผ ์™œ ์ฟ ํ‚ค๋ฅผ ์“ธ๊นŒ? 

1. ์ฟ ํ‚ค์— ์ •๋ณด๊ฐ€ ์žˆ์–ด์„œ ์„œ๋ฒ„ ์š”์ฒญ์‹œ์— ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณ„๋‹ค๋ฅธ ์ธ์ฆ์ ˆ์ฐจ ์—†์ด ๊ฐ€๋Šฅํ•˜๋‹ค. -> ๋น ๋ฅด๋‹ค.

2. ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์ฟ ํ‚ค์— ์กด์žฌํ•ด์„œ, ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ฟ ํ‚ค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ธฐ๋„ ํ•˜๋‹ค.

๋ฒ ์Šคํ•€ ๊ธ€๋กœ๋ฒŒ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

HTTP์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋„คํŠธ์›Œํฌ ์žฅ์น˜ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์‘์šฉ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์ด๋‹ค. HTTP๋ฒ„์ „, hostname, method, ์š”์ฒญํ—ค๋”, content ๋ณธ๋ฌธ์œผ๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ  ์ด๊ฑธ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. ๋˜ ์ƒํƒœ ๋น„์ €์žฅ ํ”„๋กœํ† ์ฝœ์ด๋ผ ๊ฐ ๋ช…๋ น์€ ๋‹ค๋ฅธ ๋ช…๋ น๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. TCP ์ปค๋„ฅ์…˜์„ ์—ด์–ด์„œ ๊ทธ ์ปค๋„ฅ์…˜์— ์—ฌ๋Ÿฌ HTTP ์š”์ฒญ/์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.

 

cloudflare ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

OSI 7๊ณ„์ธต์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด์•ผ๊ธฐ ํ•ด์ฃผ์„ธ์š” & ๊ฐ ๊ณ„์ธต์ด ํ•˜๋Š” ์ผ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ƒ์ดํ•œ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ ๋ชจ๋ธ์ด๊ณ  ๊ณ„์ธต๊ฐ„ encapsulation, decapsulation์ด ์ด๋ค„์ง„๋‹ค.

  • 7๊ณ„์ธต์€ ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์œ ์ผํ•œ ๊ณ„์ธต์ด๋‹ค. ์„œ๋น„์Šค ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋ชจ๋‘ 7๊ณ„์ธต์— ์˜์กดํ•œ๋‹ค.
  • 6๊ณ„์ธต์€ 7๊ณ„์ธต์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ์ค€๋น„ํ•ด์ฃผ๋Š” ๊ณ„์ธต์œผ๋กœ, ์•”ํ˜ธํ™”, ์••์ถ•, ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋Š” ๊ณ„์ธต์ด๋‹ค. ์ˆ˜์‹ ์ž์—๊ฒŒ ์ค„ ๋•Œ decodingํ•ด์„œ ์ฃผ๊ฑฐ๋‚˜, ์†ก์‹ ์ž์—๊ฒŒ ๋ฐ›์•„ encodingํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • 5๊ณ„์ธต์€ ํ†ต์‹ ์˜ ์‹œ์ž‘, ์ข…๋ฃŒ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ๋ณดํ†ต ํ†ต์‹ ์ด ์‹œ์ž‘๋˜๊ณ  ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์„ธ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • 4๊ณ„์ธต์€ ๋‘ ๊ธฐ๊ธฐ ๊ฐ„ End to End ํ†ต์‹ ์„ ๋‹ด๋‹นํ•œ๋‹ค. ์„ธ์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋‚˜๋ˆˆ๋‹ค. TCP, UDP๊ฐ€ ์—ฌ๊ธฐ ์†ํ•œ๋‹ค.
  • 3๊ณ„์ธต์€ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์œผ๋กœ ๋™์ผ ๋„คํŠธ์›Œํฌ์ผ ๋•Œ๋Š” ํ•„์š”์—†๊ณ , ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฐ›์•„ ํŒจํ‚ท์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ๋ผ์šฐํŒ…์ด ์—ฌ๊ธฐ์„œ ์ด๋ค„์ง„๋‹ค.
  • 2๊ณ„์ธต์€ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ๊ณ„์ธต์œผ๋กœ ๋™์ผ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ๋‘ ์žฅ์น˜๊ฐ„ ํ†ต์‹ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค. ๋‹จ์œ„๋Š” ํ”„๋ ˆ์ž„์ด๊ณ  ์ธํŠธ๋ผ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์—์„œ ํ๋ฆ„์ œ์–ด, ์˜ค๋ฅ˜์ œ์–ด๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. 4๊ณ„์ธต์—์„œ๋„ ํ๋ฆ„์ œ์–ด, ์˜ค๋ฅ˜์ œ์–ด๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฑด ๋„คํŠธ์›Œํฌ ๊ฐ„ ํ†ต์‹ ์—์„œ ๋ณด์žฅ๋œ๋‹ค.
  • 1๊ณ„์ธต์€ ๋ฌผ๋ฆฌ ์žฅ๋น„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹จ์œ„๋Š” ๋น„ํŠธ ์ŠคํŠธ๋ฆผ์ด๋‹ค.

cloud flare ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ

DNS๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

HTTP ํ†ต์‹ ์—์„œ๋Š” IP์ฃผ์†Œ๋ฅผ ์ฐพ์•„์„œ ํ†ต์‹ ํ•ด์•ผ๋˜๋Š”๋ฐ, IP์ฃผ์†Œ๋ฅผ ๋ชจ๋‘ ๊ธฐ์–ตํ•  ํ•„์š”์—†์ด ์›น ์ฃผ์†Œ(domain name)๋งŒ ๊ฐ€์ง€๊ณ  ์ด๊ฑธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๊ฒŒ DNS ์‹œ์Šคํ…œ์ด๋‹ค. ๋„๋ฉ”์ธ ๋„ค์ž„์„ IP์ฃผ์†Œ์™€ ๋งคํ•‘์‹œ์ผœ ๋„๋ฉ”์ธ ๋„ค์ž„์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ๋ฐ›์œผ๋ฉด ์‘๋‹ตํ•  ๋•Œ ๋ณ€ํ™˜๋œ IP์ฃผ์†Œ์— ์š”์ฒญํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

์•„๋งˆ์กด ๋ฌธ์„œ

3-Way Handshake ์™€ 4-Way Handshake์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

# 3-Way Handshake ์™€ 4-Way Handshake

TCP connection์„ ์—ด๊ณ  ๋‹ซ์„๋•Œ์˜ ํ†ต์‹  ๋™์ž‘ ๋ฐฉ์‹์ด๋‹ค.

์™ผ์ชฝ์ด 3-way,  ์˜ค๋ฅธ์ชฝ์ด 4-way๋‹ค. 3-way๋Š” ์„ธ์…˜ ์ปค๋„ฅ์…˜์„ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , 4-way๋Š” ์„ธ์…˜ ์ข…๋ฃŒ๋ฅผ ์œ„ํ•œ handshake๋‹ค.

ํ”Œ๋ž˜๊ทธ ์ •๋ณด๋ฅผ ๋จผ์ € ๋ณด์ž

  • SYN(Synchronize ์ˆœ์„œ๋ฒˆํ˜ธ)
    • ์ˆœ์„œ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ด์„œ ์„ธ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” flag
  • ACK
    • ์‘๋‹ตํ™•์ธ์œผ๋กœ, ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , ์ž˜ ๋ฐ›์•˜๋‹ค๊ณ  ๋ถ™์—ฌ ๋ณด๋‚ด๋Š” flag๋‹ค. 3-way ๊ธฐ์ค€ ์†ก์‹ ์ž๋Š” ์„œ๋ฒ„์˜ SYN+ACK๋ฅผ ๋ฐ›์•„์•ผ ์ปค๋„ฅ์…˜์ด ์œ ํšจํ•œ ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๋Š” SYN+ACK๋ฅผ ๋ณด๋‚ด๊ณ , ACK๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    • SYN+ACK๋ฅผ ๋ฐ›์€ ์†ก์‹ ์ž๋Š” ์„œ๋ฒ„ํ•œํ…Œ ACK๋ฅผ ๋ณด๋‚ด๊ณ , ์ด๋Ÿฌ๋ฉด ์ปค๋„ฅ์…˜์ด ์—ฐ๊ฒฐ๋œ๋‹ค.
  • FIN
    • ์—ฐ๊ฒฐํ•ด์ œํ•˜๋Š” flag๋กœ ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ๋Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 3-way์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€์•Š๋Š”๋‹ค.

์„ธ์…˜์„ ์ข…๋ฃŒํ•  ๋•Œ๋Š” FIN์„ ๋จผ์ € ๋ณด๋‚ธ๋‹ค.

  1. ์†ก์‹ ์ž๋Š” ์—ฐ๊ฒฐ์„ ๋Š๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ FIN์„ ๋ณด๋‚ด๊ณ , FIN-WAIT-1์ƒํƒœ๋กœ ๋จธ๋ฌด๋ฅธ๋‹ค.
  2. ์„œ๋ฒ„๋Š” FIN์„ ๋ฐ›์œผ๋ฉด ACK๋ฅผ ๋ณด๋‚ธ๋‹ค์Œ CLOSE-WAIT์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€๊ณ ,
  3. CLOSE ์ค€๋น„๊ฐ€ ๋œ ๋’ค ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ACK๋ฅผ ์†ก์‹ ์ž๊ฐ€ ๋ฐ›์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ๋๋‚œ๊ฑธ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด FIN-WAIT-2์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.  ์„œ๋ฒ„๋Š” FIN์„ ๋ณด๋‚ด๊ณ  LAST-ACK์ƒํƒœ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  4. ์†ก์‹ ์ž๊ฐ€ FIN์„ ๋ฐ›๊ณ  ์„œ๋ฒ„๊ฐ€ ๋๋‚˜๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค๊ณ  ACK๋ฅผ ๋ณด๋‚ธ๋‹ค. ACK๋ฅผ ๋ณด๋‚ธ ๋‹ค์Œ ์†ก์‹ ์ž๋Š” Time-wait๋กœ ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€ ์—ฐ๊ฒฐ์„ ๋Š๋Š”๋‹ค.(๋ฐ๋“œ๋ฝ ๋ง‰๊ธฐ์œ„ํ•œ ์ง€์—ฐ) ACK๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ์ด์ œ ์„œ๋ฒ„๋ฅผ ์™„์ „ํžˆ ๋‹ซ๋Š”๋‹ค.

์—ฐ๊ฒฐ ์„ค์ • ๊ณผ์ •๊ณผ ์ข…๋ฃŒ๊ณผ์ €์ด ์ฐจ์ด๋‚˜๋Š” ์ด์œ ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ผ์„ ๋‹ค ๋งˆ์ณ๋„ ์„œ๋ฒ„์—์„œ ๋‚จ์€ ์ผ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์˜ ์ผ์ด ๋๋‚œ ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด FIN์ด ํฌํ•จ๋œ 4๋‹จ๊ณ„๋กœ ์ด๋ค„์ ธ์žˆ๋‹ค.

XSS์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

Cross Site Scription์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž… ๊ณต๊ฒฉ์ด๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์ด๊ฑธ ์—ด๊ฒŒ๋  ์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค๋ฅผ ํƒˆ์ทจ(์ฟ ํ‚ค-ํ•˜์ด์žฌํ‚น) ํ•  ์ˆ˜ ์žˆ๊ณ  ์„ธ์…˜์œผ๋กœ ํ•˜๋”๋ผ๋„ ์„ธ์…˜ ID๋ฅผ ํƒˆ์ทจ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์ด๊ฑธ ํ†ตํ•ด ์‚ฌ์šฉ์ž์ธ์ฒ™ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.  

Injection ๊ณต๊ฒฉ์ค‘์— ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์›น ๋ฐฉํ™”๋ฒฝ์„ ์ด์šฉํ•˜๋ฉด ๋ฐฉ์–ด๊ฐ€๋Šฅํ•˜๋‹ค. 

Get๊ณผ Post์˜ ์ฐจ์ด๊ฐ€ ๋ญ”๊ฐ€์š”?

# GET, POST

GET์€ ์‘๋‹ต์œผ๋กœ ์ •๋ณด๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ณ , POST๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ •๋ณด๋ฅผ ๋ณธ๋ฌธ์— ๋‹ด์•„ ์ œ์ถœํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด์•ผ๋  ๊ฒฝ์šฐ, GET์˜ ๊ฒฝ์šฐ์—๋Š” querystring์œผ๋กœ ๋ถ™์–ด์„œ url์— ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜๋Š”๋ฐ, post๋Š” ๋ณธ๋ฌธ์— ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— url์— ์š”์ฒญ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ณด์•ˆ ์ƒ ์ด์ ์ด ์žˆ๋‹ค.

์ฃผ์†Œ์ฐฝ์— [naver.com]์„ ์น˜๋ฉด ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ISP์— ์—ฐ๊ฒฐ๋œ DNSํ•ด์„๊ธฐ๋กœ ๋ผ์šฐํŒ…๋˜๊ณ , DNS ํ•ด์„๊ธฐ์—์„œ DNS ๋ฃจํŠธ ๋„ค์ž„์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  2. ๋ฃจํŠธ ๋„ค์ž„์„œ๋ฒ„๋Š” TLD ๋„ค์ž„์„œ๋ฒ„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , DNS ํ•ด์„๊ธฐ๊ฐ€ ๋‹ค์‹œ TLD ๋„ค์ž„์„œ๋ฒ„์— ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค.
  3. TLD๋„ค์ž„์„œ๋ฒ„๊ฐ€ ์ด์ œ IP์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋„ค์ž„์„œ๋ฒ„์— ์ ‘๊ทผํ•ด์„œ DNS ํ•ด์„๊ธฐํ•œํ…Œ ๋„˜๊ฒจ์ฃผ๊ณ 
  4. IP์ฃผ์†Œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ›์•„์„œ ์‹ค์ œ ์›น์„œ๋ฒ„์— ์š”์ฒญํ•ด ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ์ด๋ ‡๊ฒŒ ์š”์•ฝํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์šด์˜์ฒด์ œ์˜ ๋„คํŠธ์›Œํฌ ์Šคํƒ์„ ํ†ตํ•ด ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜๊ณ  ์‚ฌ์šฉ์ž๋Š” ๋กœ์ปฌ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
  2. ์ฃผ์†Œ์ฐฝ์— "naver.com"์„ ์ž…๋ ฅํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ๋„ค์ด๋ฒ„ ์„œ๋ฒ„๋กœ ํŠน์ • ๋ฆฌ์†Œ์Šค HTTP GET ์š”์ฒญ์„ ์ƒ์„ฑํ•œ๋‹ค.
  3. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋จผ์ € ์ž์‹ ์˜ DNS ์บ์‹œ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋„ค์ด๋ฒ„ IP ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค. ์บ์‹œ์— ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์šด์˜์ฒด์ œ์˜ DNS resolver์—๊ฒŒ DNS ์กฐํšŒ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.(Socket ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ Resolver)
  4. DNS resolver๋Š” ๋ฃจํŠธ DNS ์„œ๋ฒ„, TLD ๋„ค์ž„์„œ๋ฒ„, ๊ทธ๋ฆฌ๊ณ  ๋„ค์ด๋ฒ„์˜ ๋„๋ฉ”์ธ ์„œ๋ฒ„ ์ˆœ์œผ๋กœ DNS ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋„ค์ด๋ฒ„ ๋„๋ฉ”์ธ ์„œ๋ฒ„๊ฐ€ ๋„ค์ด๋ฒ„ ์„œ๋ฒ„์˜ IP์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  5. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ›์€ ๋„ค์ด๋ฒ„ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TCP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , HTTP GET ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํ•ด๋‹น ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.
  6. ๋„ค์ด๋ฒ„ ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›๊ณ , ์š”์ฒญ๋ฐ›์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์•„์„œ HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€๋กœ ์‘๋‹ตํ•œ๋‹ค.
  7. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ›์€ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ๋ Œ๋”๋งํ•œ๋‹ค. ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ถ”๊ฐ€์ ์ธ HTTP ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

# ๋ฃจํŠธ ๋„ค์ž„์„œ๋ฒ„?

๋ฃจํŠธ ์„œ๋ฒ„๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ํฌํ•จํ•œ ์žฌ๊ท€ ํ™•์ธ์ž์˜ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์šฉํ•˜๋ฉฐ ๋ฃจํŠธ ๋„ค์ž„์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ ํ™•์žฅ์ž(.com,. net, .org, etc.)์— ๋”ฐ๋ผ ์žฌ๊ท€ ํ™•์ธ์ž๋ฅผ TLD ๋„ค์ž„์„œ๋ฒ„์— ๋ณด๋‚ด ์‘๋‹ตํ•œ๋‹ค.

# TLD ๋„ค์ž„์„œ๋ฒ„?(Top-Level-Domain)

TLD ๋„ค์ž„์„œ๋ฒ„๋Š” .com, .net ๋˜๋Š” URL์˜ ๋งˆ์ง€๋ง‰ ์  ๋’ค์— ์˜ค๋Š” ๊ฒƒ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋„๋ฉ”์ธ ํ™•์žฅ์ž๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ๋„๋ฉ”์ธ ์ด๋ฆ„์˜ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๊ณ , ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์‹คํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ์ž์›์„ ๊ณต์œ ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์„ ํ†ตํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. 

ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š” ์ž‘์—… ๋‹จ์œ„๊ณ , ์Šค๋ ˆ๋“œ๋Š” ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„๋‹ค.

# Multi Process & Multi Thread

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ์•ฑ์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•ด์„œ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ task๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ค‘๊ฐ„์— ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์–ด๋„ ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์ง„ ์•Š๋Š”๋‹ค. ๋‹ค๋งŒ ํ”„๋กœ์„ธ์Šค ๊ฐ„ context switching ๋น„์šฉ์ด ์กด์žฌํ•œ๋‹ค.(CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑด๋„ˆ๋‹ค๋‹ˆ๋ฉด์„œ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅ/ํ˜ธ์ถœํ•˜๋Š” ๋น„์šฉ)

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๊ณ  ์ž์›์†Œ๋ชจ๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์— ๋น„ํ•˜๋ฉด ๋งค์šฐ ์ ์€๋ฐ ๋™๊ธฐํ™” ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค. -> Thread Safe ๋ฌธ์ œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

๋ธŒ๋Ÿฐ์น˜ ๊ธ€

f-lab ๋ธ”๋กœ๊ทธ

๋ฐ๋“œ๋ฝ์ด ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ป๊ฒŒ ์˜ˆ๋ฐฉ, ํšŒํ”ผ, ํƒ์ง€, ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋‘ ๊ฐœ ์ด์ƒ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•œ ์ž์›์— ์ ‘๊ทผํ•˜๋Š”๋ฐ, ์„œ๋กœ ์ž์›์„ ์–ป์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋กœ ๋ฌดํ•œ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋ฐํŠธ๋ฝ ๋ฐœ์ƒ์กฐ๊ฑด์—๋Š” 4๊ฐœ๊ฐ€ ์„ฑ๋ฆฝ๋˜์–ด์•ผ ํ•œ๋‹ค. 

  • ์ƒํ˜ธ๋ฐฐ์ œ - ํ•œ ์ž์›์€ ํ•œ ๋ฒˆ์— ํ•œ ์ ‘๊ทผ๋งŒ ํ—ˆ์šฉํ•œ๋‹ค
  • ์ ์œ ๋Œ€๊ธฐ - ์‚ฌ์šฉ์ค‘์ธ ์ž์›์„ ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค
  • ๋น„์„ ์  - ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›์€ ์‚ฌ์šฉ์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ๊ฐ•ํƒˆ ํ•  ์ˆ˜ ์—†๋‹ค
  • ์ˆœํ™˜๋Œ€๊ธฐ - ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์—์„œ ์ˆœํ™˜ํ˜•ํƒœ๋กœ ์ž์›์„ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฐฉ: ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ฅผ ๋นผ๋ฉด์„œ ํ•ด๊ฒฐํ•œ๋‹ค.

ํšŒํ”ผ: ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ์˜ˆ์ƒ๋˜๋ฉด ๊ทธ๋ƒฅ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

ํƒ์ง€: ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋กœ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํƒ์ง€ํ•œ๋‹ค.

ํšŒ๋ณต: ๊ต์ฐฉ ์ƒํƒœ ์ผ์œผํ‚จ ํ”„๋กœ์„ธ์Šค(์ƒˆ๋กœ ์ ‘๊ทผ์ค‘์ธ)๋ฅผ ์ข…๋ฃŒ ์‹œํ‚ค๊ฑฐ๋‚˜ ํ• ๋‹น๋œ ์ž์›์„ ํ•ด์ œ ์‹œํ‚จ๋‹ค.

์‹œ์Šคํ…œ ์ฝœ์ด ๋ฌด์—‡์ด๋ฉฐ, ์™œ ํ•„์š”ํ•œ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

# ์‹œ์Šคํ…œ ์ฝœ

์‹œ์Šคํ…œ ์ฝœ์€ OS์˜ ์ปค๋„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ CPU ๊ถŒํ•œ ์ˆ˜์ค€์ด user ์ˆ˜์ค€์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ด์•ผ๋˜๋ฉฐ ์ด ํ˜ธ์ถœ์„ ์‹œ์Šคํ…œ ์ฝœ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์œ„ํ‚ค

Thread Safe ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

Thread๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•ด๋„ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋ชจ๋‹ˆํ„ฐ, Mutex, Semaphore, Synchronized ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์“ฐ๋ ˆ๋“œ ๊ฐ„ ์ž์› ๊ณต์œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋™๊ธฐํ™”๋Š” ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•œ๋ฒˆ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ฑฐ๋‚˜ ์ ‘๊ทผ์„ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

Mutex๋Š” ํ•œ๋ฒˆ์— ํ•œ ์Šค๋ ˆ๋“œ๋งŒ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋ฉฐ, lock, unlock ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ๋‹ค.

Semaphore๋Š” ๊ณต์œ ์ž์›์— ํ—ˆ์šฉํ•  ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์„œ ์ด ๊ฐœ์ˆ˜๋งŒํผ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ€๊ธฐ ์‹œํ‚จ๋‹ค.

Synchronized ๋ธ”๋ก/๋ฉ”์„œ๋“œ๋Š” ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ๋ฉ”์„œ๋“œ๋‚˜ ๋ธ”๋ก์— lock์„ ๊ฑธ์–ด์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ํ‚ค์›Œ๋“œ๋‹ค.

i-node๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

์บ์‹œ์˜ ์ง€์—ญ์„ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์บ์‹œ๋Š” CPU ๋ ˆ์ง€์Šคํ„ฐ๋ž‘ ์ฃผ๊ธฐ์–ต์žฅ์น˜(๋ฉ”๋ชจ๋ฆฌ == ๋žจ) ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š”, ์ •์  ๋žจ์ด๋‹ค. ๊ฐ ๊ธฐ์–ต์žฅ์น˜๋Š” ์†๋„์™€ ์šฉ๋Ÿ‰์ด ๋ฐ˜๋น„๋ก€ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์กฐ๊ธˆ์ด๋ผ๋„ ์ ‘๊ทผ ์†๋„๋ฅผ ๋Š˜๋ฆฌ๊ธฐ์œ„ํ•ด ์ž์ฃผ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์ผ ์ˆ˜๋ก ์ƒ์œ„ ๊ณ„์ธต๊ตฌ์กฐ์— ๋‹ด์•„๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์ด๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์บ์‹œ๋‹ค. 

 

CPU ๋ ˆ์ง€์Šคํ„ฐ -> L1, L2, L3 ์บ์‹œ(์บ์‹œ๋Š” SRAM) -> DRAM -> ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜ ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์—(๋ถ„๊ธฐ์—ฌ๋ถ€๋Š” Cache Hit๋กœ ํŒ๋‹จํ•œ๋‹ค.) ์บ์‹œ์— ์ €์žฅํ•ด๋‘๋Š” ๊ฑด ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ ์†๋„๋ฅผ ํ™• ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ง€์—ญ์„ฑ์ด๋ž€ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๊ณณ์— ๋ชฐ๋ ค์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ์„ ๊ฐ€์ •ํ•˜๋Š” ์„ฑ์งˆ๋กœ ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ, ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ง€์—ญ์„ฑ์„ ํƒ€์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์ˆœ์„œ๋Œ€๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒŒ ์ˆœ์ฐจ์  ์ง€์—ญ์„ฑ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์‹œ๊ฐ„, ๊ณต๊ฐ„๋งŒ ์‚ดํŽด๋ณด์ž.

  • ์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ : ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทผ์‹œ์ผ ๋‚ด ๋˜ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฐ ์„ฑ์งˆ -> (๋ฐ˜๋ณต๋ฌธ์—์„œ ๊ณ„์† ์ ‘ํ•˜๋Š” ์ธ๋ฑ์Šค ๊ฐ™์€ ๊ฑฐ)
  • ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ : ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฐ ์„ฑ์งˆ -> ๋ฐฐ์—ด์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์ด ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค.

ํ”„๋กœ์„ธ์„œ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” L1์บ์‹œ๋ฅผ ๋ณด๋ฉด, ๋ช…๋ น์–ด์™€ ๋ฐ์ดํ„ฐ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ๋ช…๋ น์–ด๋Š” ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ์ด ๋†’๊ณ  ๋ฐ์ดํ„ฐ๋Š” ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— L1์บ์‹œ๋Š” ๋ช…๋ น์–ด, ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉด์„œ L1 - CPU๋ ˆ์ง€์Šคํ„ฐ ์‚ฌ์ด์—์„œ ๋งค์šฐ ์„ฑ๋Šฅ ์ข‹๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

cpu ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?

ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฐ์ •ํ•˜๋Š” ์—ญํ• ํ•œ๋‹ค. ๋น„์„ ์  ์„ ์ ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

# ์„ ์  ์Šค์ผ€์ค„๋ง

  • ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง
  • ๋ผ์šด๋“œ ๋กœ๋นˆ

# ๋น„์„ ์  ์Šค์ผ€์ค„๋ง

  • FCFS(FIFO๋ž‘ ๋น„์Šท)
  • SJF(Shortest Job First, ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ์ž‘์—…์„ ๋จผ์ €ํ•œ๋‹ค.)
  • HRN(Highest Response-ratio Next, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฑธ ์ˆ˜ํ–‰ํ•ด์„œ SJF ๋‹จ์ ์ธ ์ ์œ  ๋ถˆํ‰๋“ฑ์„ ํ•ด๊ฒฐ)

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์˜ ํƒ„์ƒ์€ ์ดˆ์ฐฝ๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ์ž‘์•„ ๋ฐœ์ƒํ•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์˜ค๋ฅ˜๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ์ผ์–ด๋‚ฌ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๋ฅผ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜์— ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰ ์‹œ ๊ผญ ํ•„์š”ํ•œ ์ผ๋ถ€๋ถ„๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ฆ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ํ•  ๋•Œ ํ•„์š”ํ•œ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์žก๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‹คํ–‰์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ์‹ ๊ฒฝ์“ฐ๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ• ์ˆ˜ ์žˆ๋‹ค. 

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋Š” MMU(๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์œ ๋‹›)์ด๋ผ๋Š” ์žฅ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

# MMU๋Š” ๋ญ˜ ํ•˜๋Š”์ง€?

๊ฐ€์ƒ ์ฃผ์†Œ(๋…ผ๋ฆฌ ์ฃผ์†Œ) -> ๋ฌผ๋ฆฌ ์ฃผ์†Œ(์‹ค ์ฃผ์†Œ) ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ ์ „์— ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์‹œ์ž‘ํ•˜๋Š”๋ฐ MMU๊ฐ€ RAM์„ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋กœ ๋‚˜๋ˆˆ ๊ฒƒ(ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”)์—์„œ ๋ณ€ํ™˜ ๋Œ€์ƒ์„ ์„ ํƒํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ TLB๊ฐ€ ๋‚˜์˜จ๋‹ค.

#TLB(Translation Look-aside Buffer) ํŽ˜์ด์ง€ ์ •๋ณด ์บ์‹œ -> MMU์— ํฌํ•จ๋˜์–ด์žˆ๋‹ค

๊ฐ€์ƒ ์ฃผ์†Œ -> ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์บ์‹œ๋กœ, ์ตœ๊ทผ์— ๋ณ€ํ™˜ํ•œ ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•ด๋‘๊ณ , CPU๊ฐ€ ๊ฐ€์žฅ์ฃผ์†Œ๋ฅผ ๋“ค๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ฉด ๋จผ์ € TLB์—์„œ ํ™•์ธํ•˜๊ณ , ๊ทธ๋•Œ๋„ ์—†์œผ๋ฉด MMU๊ฐ€ ๋‚˜๋ˆ ๋‘” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—์„œ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.

 

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ ์„ค๋ช… ๋ธ”๋กœ๊ทธ

์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜๊ณผ ํŽ˜์ด์ง•์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ถ„์‚ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•๋“ค์ด๋‹ค. ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํŒŒํŽธํ™”์‹œ์ผœ ๊ด€๋ฆฌํ•˜๊ณ , ํŽ˜์ด์ง•์€ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ •ํฌ๊ธฐ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋‚˜๋ˆ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

# ๋‹จํŽธํ™”

๋‚ด๋ถ€ ๋‹จํŽธํ™”, ์™ธ๋ถ€๋‹จํŽธํ™”๊ฐ€ ๊ฐ๊ฐ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด๊ฑฐ ๋จผ์ € ํ™•์ธํ•˜์ž.

 

๋‚ด๋ถ€ ๋‹จํŽธํ™”

ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์–‘๋ณด๋‹ค ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‚จ์•„ ๋‚ญ๋น„๋˜๋Š” ์ƒํ™ฉ์ด๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”

ํ• ๋‹น - ํ•ด์ œ๊ฐ€ ๋ฐ˜๋ณต๋  ๋•Œ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ-๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์— ์ž‘์€ ํ‹ˆ์ด ๋ฒŒ์–ด์ ธ์„œ, ์ด ํ‹ˆ๋“ค์„ ํ•ฉ์น˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์‹ค์ œ ํ• ๋‹น ๊ณต๊ฐ„์€ ๋ถ€์กฑํ•ด์„œ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ์™ธ๋ถ€ ๋‹จํŽธํ™”๋‹ค.

# ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜

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

=> ์™ธ๋ถ€ ๋‹จํŽธํ™”๋Š” ๋‚จ๋Š”๋‹ค.(๋‚ด๋ถ€ ๋‹จํŽธํ™” ํ•ด๊ฒฐ)

# ํŽ˜์ด์ง•

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

=> ์‹ค์ œ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด๋ผ์„œ ๋‚ด๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ์ด๋ค„์ง„๋‹ค(์™ธ๋ถ€๋‹จํŽธํ™”๋Š” ํ•ด๊ฒฐ๋œ๋‹ค.)

 

๊ฐ’์˜ ๊ณต์œ ๋Š” ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค. ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์ด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ๊ณต์œ ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•ด์•ผ๋˜๋Š” ๋ฐ˜๋ฉด์— ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์€ ๊ทธ๋ƒฅ ๊ณต์œ ํ•œ๋‹ค๊ณ  ์„ ์–ธ๋งŒ ํ•˜๋ฉด๋œ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์กฐ๊ธˆ ํž˜๋“ค์–ด์ง€๊ธดํ•˜๋Š”๋ฐ ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ, ๋‚ด๋ถ€๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

ํŽ˜์ด์ง€ํ™” ๋œ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์ด ๊ทธ๊ฒƒ์ธ๋ฐ, ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํŽ˜์ด์ง•ํ•˜๋ฉด์„œ ๊ฐ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋ณ„๋„์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋“ค๊ณ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

# ๋‹จํŽธํ™”๋ฅผ ์•„์˜ˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•? ๋ฉ”๋ชจ๋ฆฌ ํ’€?

๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด๋†“๊ณ , ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ณ , ๋‚ด๋ถ€๋‹จํŽธํ™” ๋˜ํ•œ ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋™์ ํ• ๋‹น๊ณผ ๋‹ค๋ฅธ ์ ์€ ๋งค๋ฒˆ ํ• ๋‹น/ํ•ด์ œ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉํ•  ๊ณต๊ฐ„์„ ๋ฏธ๋ฆฌ ์žก๋Š” ๋‹ค๋Š” ์ ์ด๋‹ค. ํ•ญ์ƒ ์จ์„œ ์ข‹์€ ๊ฑด ์•„๋‹ˆ๊ณ , ํ• ๋‹น ํ•ด์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ์— ๋ฉ”๋ชจ๋ฆฌ ํ’€์„ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์ด๋‹ค. ๋‹จํŽธํ™”๋Š” ๋ฐœ์ƒํ•˜์ง€์•Š์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ leak์„ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํ•œ ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค.

 

์ปค๋„์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

# ์ปค๋„?

์ปค๋„์€ ์‚ฌ์šฉ์ž(์‘์šฉ ํ”„๋กœ๊ทธ๋žจ) <--> ์‹œ์Šคํ…œ์„ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, OS์˜ ํ•ต์‹ฌ์ด๊ณ  ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์™„์ „ํžˆ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปค๋„์ด ํ•˜๋Š” ์ผ๋กœ๋Š” ๋ณด์•ˆ(ํ•˜๋“œ์›จ์–ด, ํ”„๋กœ์„ธ์Šค), ์ž์›๊ด€๋ฆฌ(์Šค์ผ€์ค„๋ง), ์ถ”์ƒํ™”(์ธํ„ฐํŽ˜์ด์Šค API) ์„ธ ๊ฐœ๋กœ ์ขํž ์ˆ˜ ์žˆ๋‹ค.

ํŠนํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ํ•˜๋“œ์›จ์–ด์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฑด ์œ„ํ—˜ํ•ด์„œ HAL(ํ•˜๋“œ์›จ์–ด ์ถ”์ƒํ™” ๊ณ„์ธต)์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๊ฐ–๊ณ  ์ ‘๊ทผํ•˜๋Š”๋ฐ, ์ด๊ฑธ ์ปค๋„์ด ์ค‘๊ฐœํ•œ๋‹ค.

 

๋ฆฌ๋ˆ…์Šค๋Š” ๊ด€๋ฆฌ์ž๋ชจ๋“œ(root), user ๋ชจ๋“œ ๋‘๊ฐœ๋กœ ๋‘๊ณ  root ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•  ์‹œ์Šคํ…œ์ฝœ์„ ๋ถ„๋ฆฌ์‹œ์ผฐ๋Š”๋ฐ ์ปค๋„๊ณผ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์“ฐ๋ฉฐ ์‹œ์Šคํ…œ์ฝœ ๋“ฑ ์šด์˜์ฒด์ œ์˜ ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋‘ ๋‹ค ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๊ฑธ ๋‹จ์ผํ˜• ์ปค๋„ -> ๋ชจ๋†€๋ฆฌ์‹ ์ปค๋„๋กœ ๋ถ€๋ฅธ๋‹ค.

 

์œ„ํ‚ค - ์ปค๋„?

Stateful Service๊ณผ Stateless Service๊ฐ€ ๋ฌด์—‡์ธ์ง€?

Stateful

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์†ก์ˆ˜์‹ ์„ ํ•˜๋ฉฐ ๋‹จ๊ณ„๋ณ„ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์žˆ์–ด, ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „ ๋‹จ๊ณ„์—์„œ ์ œ๊ณตํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋„ ์ €์žฅํ•œ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํ† ์ฝœ
    • TCP์˜ 3-way handshaking
  • ๋ฌธ์ œ์ 
    • ์ƒˆ๋กœ์šด ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋ฉด ์ด์ „ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ƒํƒœ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

Stateless

  • ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ํ•ด๋‹น ๊ตฌ์กฐ์—์„œ ์„œ๋ฒ„๋Š” ์š”์ฒญ์ด ์˜ค๋ฉด ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํ† ์ฝœ
    • UDP
    • HTTP
  • ๋ฌธ์ œ์ 
    • ์„œ๋ฒ„์— ์š”์ฒญ์‹œ ์ƒํƒœ์ •๋ณด๋ฅผ ๊ฐ™์ด ์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Stateful ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ๋ชจ๋œ๋‹ค

 

Web Server์™€ Web Application Server์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

# Web Server

์›น ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํžˆ HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ์ •์  ์ฝ˜ํ…์ธ ๋กœ ์‘๋‹ตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋™์  ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์›น ์„œ๋ฒ„ ์ž์ฒด์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ex) Apache, Nginx

# WAS(Web Application Server)

HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋™์ผํ•˜๋‹ค. ์›น์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ์„ ํฌํ•จํ•ด์„œ ๋” ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Server-Side code๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋™์ ์ธ ์ฝ˜ํ…์ธ ๋„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ex) Tomcat

 

๊ทธ๋Ÿผ ๋” ๋งŽ์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” WAS๋งŒ ์“ฐ๋ฉด ๋˜์ง€์•Š๋‚˜ ์‹ถ์ง€๋งŒ ํšจ์œจ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ •์  ์ฝ˜ํ…์ธ ๋งŒ ํ•„์š”ํ•  ๋•Œ Web Server๋งŒ ์“ฐ๋Š”๊ฒŒ ๋” ์•ˆ์ •์ ์ด๊ณ  ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” WAS๊ฐ€ ์ •์ ์ฝ˜ํ…์ธ ๋„ ์ œ๊ณตํ•˜๋„๋ก ์ผ์„ ๋– ๋„˜๊ฒจ์ฃผ๋ฉด ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋™์  ์ฝ˜ํ…์ธ  ์˜์—ญ๋งŒ WAS๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ •์  ์ฝ˜ํ…์ธ ๋Š” WebServer์—์„œ ์ œ๊ณตํ•˜๋„๋ก ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

graph LR
    A[Client] --> B[Web Server]
    B --> C{WAS}
    C --> D(DB)

 

WAS, Webserver ์ฐจ์ด

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์€ ๋ฆฌ์†Œ์Šค ํ’€ ์ „์ฒด์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฌ์„œ ์žฅ์น˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž - ์„œ๋ฒ„๊ทธ๋ฃน ์‚ฌ์ด์— ์œ„์น˜ํ•ด์„œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ€์šฉ์„ฑ, ํ™•์žฅ์„ฑ, ๋ณด์•ˆ, ์„ฑ๋Šฅ ๋ฉด์—์„œ ํ–ฅ์ƒ๋œ๋‹ค.

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

์ •์  ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ, ๋™์  ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ณ  ๊ฐ๊ฐ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ผ์šด๋“œ๋กœ๋นˆ, ์ตœ์†Œ์—ฐ๊ฒฐ๋ฐฉ๋ฒ•(ํ™œ์„ฑ ์—ฐ๊ฒฐ์ด ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹)์ด ์žˆ๋‹ค.

์˜ˆ์‹œ ๊ทธ๋ฆผ์— ์žˆ๋Š” ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ, ์ œ์–ด๊ฐ€ ์•„์ฃผ ์œ ์—ฐํ•˜๋‹ค.

์•„๋งˆ์กด ๋ฌธ์„œ - ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ

Race Condition์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์„ธ์š”.

๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ, ๊ฒฐ๊ณผ๊ฐ’์— ์˜ˆ์ƒํ•˜์ง€์•Š์€ ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. -> ๋™์‹œ ์ ‘๊ทผ ์‹œ ์ž๋ฃŒ์˜ ์ผ๊ด€์„ฑ์ด ์ง€์ผœ์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

# ์›์ธ

  • ๋™๊ธฐํ™”๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€์•Š์•˜์„ ๋•Œ
    - ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ/ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™๊ธฐํ™”์—†์ด ๊ณต์œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‹คํ–‰ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ๊ฐ€์ •
    - ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์˜๋„ํ•œ ์ˆœ์„œ๋กœ ๊ฐ•์ œํ•˜์ง€์•Š์œผ๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋น„์›์ž์  ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ (ex. ์ „์—ญ๋ณ€์ˆ˜์— ๋™์‹œ์— ์ ‘๊ทผํ•œ๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ๊ฒƒ)
  • ์ปค๋„๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ์ž‘์—…์„ ํ•˜๋˜ ๋„์ค‘ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ชปํ•˜๊ฒŒ ํ•˜๋ฉด๋œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ•˜์—ฌ ์ปค๋„๋ชจ๋“œ๋กœ ์ง„์ž…ํ•ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์ค‘์— ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ -> ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด๊ณ , ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€์„œ ์กฐ์ž‘์ค‘์ด๋˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ์—์„œ ์—ฌ๋Ÿฌ CPU๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ์ปค๋„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ -> lock, unlock์œผ๋กœ ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•˜๋‹ค.

์„ธ ๊ฐ€์ง€ ์›์ธ์ด ๋‹ค ๋น„์Šทํ•˜๊ธดํ•œ๋ฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ๋™์‹œ ์ ‘๊ทผ์„ ๋ง‰๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ๋ฐฉ๋ฒ•๋“ค๋กœ ๋ฎคํ…์Šค, ๋ชจ๋‹ˆํ„ฐ, ์„ธ๋งˆํฌ์–ด, ๋™๊ธฐํ™” ๋“ฑ์ด ์žˆ๋‹ค.

 

๋ ˆ์ด์Šค ์ปจ๋””์…˜ ๋ธ”๋กœ๊ทธ

๋ ˆ์ด์Šค ์ปจ๋””์…˜

์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

ํ”„๋กœ์„ธ์„œ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์–ด๋–ค ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ด์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ , ๋ฐœ์ƒ๋œ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌ ํ•œ๋’ค ๋ณต๊ท€ํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. 

  • ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ
    • IO Interrupt ๊ฐ€ ์—ฌ๊ธฐ ์†ํ•œ๋‹ค.
    • ํ•˜๋“œ์›จ์–ด ์ ์ธ ์š”์†Œ๊ฐ€ ๋ณดํ†ต ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋‹ค.
    • ์ž์› ํ• ๋‹น๋œ ์‹œ๊ฐ„์ด ๋๋‚œ ๊ฒฝ์šฐ๋„ ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ๋กœ ํŒ๋‹จํ•œ๋‹ค.
  • ๋‚ด๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ <- ์ด๊ฑฐ๋„ ์ผ๋‹จ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ 
    • ์ž˜๋ชป๋œ ๋ช…๋ น์–ด๋‚˜ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
    • Exception์ด๋‚˜ Error ๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค.
  • ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ
    • ๊ฐ์‹œ ํ”„๋กœ๊ทธ๋žจ ๊ฐ™์€๊ฑธ ์‹คํ–‰ํ•˜๋Š” ๊ฒŒ ์—ฌ๊ธฐ ์†ํ•œ๋‹ค.

# ๋™์ž‘ ์ˆœ์„œ

  1. ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ ๋ฐœ์ƒ
  2. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘๋‹จ: ํ˜„์žฌ ์‹คํ–‰์ค‘์ด๋˜ Micro operation ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ํ˜„์žฌ์˜ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ ๋ณด์กด: PCB(Process Control Block), PC(Program Counter) ๋“ฑ์„ ์‚ฌ์šฉ
  4. ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฃจํ‹ด ์‹คํ–‰ -> ์„œ๋น„์Šค ๋ฃจํ‹ด ์‹คํ–‰
  5. ์ƒํƒœ๋ณต๊ตฌ : ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ ์ €์žฅํ•ด๋‘” PC(Program counter)๋ฅผ ๋‹ค์‹œ ๋ณต๊ตฌํ•œ๋‹ค.
  6. ์ค‘๋‹จ๋œ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์žฌ๊ฐœ: PCB์˜ ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ์ด์ „์— ์ˆ˜ํ–‰์ค‘์ด๋˜ ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ๊ฐœํ•œ๋‹ค.

 

๋ฌธ๋งฅ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฉด, PCB(Process Control Block)์— ์ง„ํ–‰ํ•˜๋˜ process์˜ context๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ PC(Program Counter)๊ฐ’๋„ ์ €์žฅํ•œ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ PCB๋ฅผ ์œ ์ง€ํ•˜๋ฉด OS๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ „ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ณ  

OS๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์˜ ํ• ๋‹น์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
PC๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค PC๋Š” ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค. ์ด๊ฒŒ ์ธํ„ฐ๋ŸฝํŠธ์—์„œ๋„ ์ ์šฉ๋ผ์„œ PC๊ฐ’์„ PCB์— ๋„ฃ์–ด๋‘๊ณ , ์ธํ„ฐ๋ŸฝํŠธ ๋˜๊ธฐ ์ „ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต๊ตฌํ•ด์„œ ์ž‘์—…ํ•œ๋‹ค.

 

IT์œ„ํ‚ค - ์ธํ„ฐ๋ŸฝํŠธ

๋ธ”๋กœํ‚น๊ณผ ๋…ผ๋ธ”๋กœํ‚น์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

๋ธ”๋กœํ‚น - ๋…ผ๋ธ”๋กœํ‚น์€ ๋‚ด๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์ƒ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด๋‹ค.

๋™๊ธฐ์—์„œ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ์˜ ๊ทธ๋ฆผ

# ๋ธ”๋กœํ‚น - ๋…ผ๋ธ”๋กœํ‚น

์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด์ฑ„๋กœ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์ด ๋ธ”๋กœํ‚น์ด๊ณ , ๋…ผ๋ธ”๋กœํ‚น์€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€์•Š์•„๋„, ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.(์ œ์–ด๊ถŒ์„ ๋„˜๊ธฐ์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค.)

 

์–ธ๋œป ๋ณด๋ฉด ๋น„๋™๊ธฐ / ๋™๊ธฐ๋ž‘ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์˜์—ญ์ด ๋‹ค๋ฅด๋‹ค. ๋™๊ธฐ / ๋น„๋™๊ธฐ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ฃผ์ฒด(์š”์ฒญํ•œ ์Šค๋ ˆ๋“œ)๊ฐ€ ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ•˜๋Š”๊ฒƒ์— ๋Œ€ํ•œ ์˜์—ญ์ด๊ณ , ๋ธ”๋กœํ‚น ๋…ผ ๋ธ”๋กœํ‚น์€ ํ˜„์žฌ ์ž‘์—…์ƒํƒœ๋งŒ ๋ฐ”๋ผ๋ณด๊ณ  ๋™์ž‘์„ ๊ฒฐ์ •ํ•˜๋Š” ์˜์—ญ์ด๋‹ค. 

 

๋™๊ธฐ์˜ ๊ฒฝ์šฐ ์–ด๋–ค ์ž‘์—…์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค์Œ ์ž‘์—…์„ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋…ผ๋ธ”๋กœํ‚น์€ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ธฐ๋Œ€ ์‘๋‹ต์ด ๋‚˜์˜ค์ง€์•Š์•„๋„ ๋ฐ˜ํ™˜ํ•ด์„œ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

sequenceDiagram
    Thread->> I/O: ์š”์ฒญ
    I/O-->> Thread: ์ž‘์—… ์•„์ง ์•ˆ๋๋‚จ(๊ฒฐ๊ณผ ๋ฐ˜ํ™˜)
    Thread->> I/O: ์š”์ฒญ
    I/O-->> Thread: ์ž‘์—… ์•„์ง ์•ˆ๋๋‚จ(๊ฒฐ๊ณผ ๋ฐ˜ํ™˜)
    Thread->> I/O: ์š”์ฒญ
    I/O-->> Thread: I/O์‘๋‹ต ๋ฐ˜ํ™˜

๋™๊ธฐ์ด๋ฉด์„œ ๋…ผ๋ธ”๋กœํ‚น์ด๋ฉด ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

-> ๋™๊ธฐ ์ฃผ์ฒด์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์š”์ฒญ์„ ํ•˜๊ณ , ์š”์ฒญํ•œ ์Šค๋ ˆ๋“œ์˜ ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š์•„์„œ ์‘๋‹ต์ด ์˜ค์ง€์•Š์•„๋„ ๊ทธ ์ž์ฒด๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ ๋ผ์„œ ๋ฐ˜ํ™˜๋œ๋‹ค.

๊ฐ€์žฅ ์ตœ์•…์˜ ํผํฌ๋จผ์Šค๋Š” ๋™๊ธฐ + ๋ธ”๋กœํ‚น์ด๋‹ค.

 

๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋ฉฐ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€์•Š๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๋„๋ก ํ•˜๋Š” ๊ฒŒ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋‹ค.

๊ฐ์ฒด(Object)๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋Š” Stack์— ํ• ๋‹น๋˜๊ณ , ์‹ค์ œ ๊ฐ’๋“ค์€ Heap ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค. ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋˜ ๊ฐ์ฒด(A)์˜ ์ฃผ์†Œ์— ๋‹ค๋ฅธ ๊ฐ์ฒด(B)๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋˜์–ด ๋”์ด์ƒ Heap ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋˜ A์˜ ๋ฐ์ดํ„ฐ๋Š” ๋”์ด์ƒ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ๋‚ ๋ ค์ฃผ๋Š” ์ž‘์—…์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Gargabe Collection)์ด๊ณ , ์ด๊ฑธ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

# GC ๋Œ€์ƒ 

  • ๋ชจ๋“  ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ null ์ธ ๊ฒฝ์šฐ(ํ•˜๋‚˜๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ์žˆ์„ ๋•Œ)
  • ๊ฐ์ฒด๊ฐ€ ๋ธ”๋Ÿญ ์•ˆ์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๋ธ”๋Ÿญ์ด ์ข…๋ฃŒ๋œ ๊ฒฝ์šฐ(๋ธ”๋Ÿญ ๋ฐ”๊นฅ์—์„œ ๋” ์ด์ƒ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.)
  • ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ null์ด ๋œ ๊ฒฝ์šฐ, ์ž์‹ ๊ฐ์ฒด๋Š” ์ž๋™์ ์œผ๋กœ GC ๋Œ€์ƒ์ด ๋œ๋‹ค. (์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ)
  • ๊ฐ์ฒด๊ฐ€ weak ์ฐธ์กฐ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒฝ์šฐ
  • ๊ฐ์ฒด๊ฐ€ soft ์ฐธ์กฐ์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

# weak reference์™€ soft reference์˜ ์ฐจ์ด?

weak๋Š” ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ WeakReferences ๊ฐ์ฒด๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ GC ๋Œ€์ƒ์ด ๋˜๊ณ ,  ๋‹ค์Œ GC ์‹คํ–‰์‹œ ๋ฌด์กฐ๊ฑด ํž™ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค. soft๋Š” ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ SoftReference ๊ฐ์ฒด๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ GC ๋Œ€์ƒ์ด ๋˜๊ณ , JVM์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ์—๋งŒ ํž™์˜์—ญ์—์„œ ์ œ๊ฑฐ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ตณ์ด ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰ weak reference๋Š” soft reference ๋ณด๋‹ค gc ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

java.long.ref์— ์žˆ๋Š” WeakReference, SoftReference ํด๋ž˜์Šค๋กœ ๊ฐ์‹ธ์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Counter counter = new Counter(); // strong reference
WeakReference weakCounter = new WeakReference(counter); //weak reference
counter = null;
## ============================
Counter prime = new Counter();  // strong reference
SoftReference soft = new SoftReference(prime) ; //soft reference
prime = null;

 

GC

GC ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜


::์ถœ์ฒ˜::

https://github.com/VSFe/Tech-Interview?tab=readme-ov-file

https://github.com/WooVictory/Ready-For-Tech-Interview

https://github.com/gyoogle/tech-interview-for-developer

https://github.com/JaeYeopHan/Interview_Question_for_Beginner

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT