์ ๊ฐ ๋ณด๋ ค๊ณ ๋ง๋ค์์ต๋๋ค. ๊ณ์ ๋ด์ฉ์ด ์ถ๊ฐ๋ ์์ ์ ๋๋ค
TCP์ UDP์ ์ฐจ์ด์ ๋ํด ๋ง์ํด์ฃผ์ธ์
# TCP, UDP
TCP๋ ์ ๋ขฐ์ฑ์๋ ์ฐ๊ฒฐ์งํฅ ํ๋กํ ์ฝ๋ก ๋ฐ์ดํฐ ํจํท์ ์์๋ฅผ ๋ณด์ฅํ๋ฉฐ ์๋ฌ ์ ์ด, ํผ์ก ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ฐ๋ฉด UDP๋ ๋น์ฐ๊ฒฐ์ฑ ํ๋กํ ์ฝ๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋์ฐฉํ๋์ง(ํจํท๋๋ฝ์ ๊ณ ๋ คํ์ง์๋๋ค)์ ๋ํ ์ฒดํฌ์ฌ๋ง ์์ ๋ฟ ํจํท์์๋ฅผ ๋ณด์ฅํ์ง์๊ณ , ์๋ฌ์ ์ด, ํผ์ก ์ ์ด๊ฐ์ ์ถ๊ฐ๊ธฐ๋ฅ์ด ์๋ค.
๊ทธ ๋์ ์ด๋ฐ ํ์ธ๊ณผ์ ์ด ์์ผ๋ฏ๋ก TCP๋ณด๋ค UDP๋ ๋น ๋ฅธ ์๋๊ฐ ์ฅ์ ์ด๋ค. TCP๋ ์ฐ๊ฒฐ์์ ์ฑ์ด ์ค์ํ ์๋น์ค, ์๋ฅผ ๋ค์ด ์น๊ตฌ์ ์ฑํ ์ ํ๊ฑฐ๋, ์ด๋ฉ์ผ์ ๋ณด๋ด๊ฑฐ๋, ์จ๋ผ์ธ ๋์์์ ๋ณด๊ฑฐ๋, ์น์ ๊ฒ์ํ ๋ ์ ์ฌ์ฉํ๊ณ , UDP๋ ์คํธ๋ฆฌ๋ฐ์ด๋ ๊ฒ์๊ณผ ๊ฐ์ด ๋น ๋ฅธ ์ ์ก์๋๊ฐ ํ์ํ ์๋น์ค์ ์ฌ์ฉํ๋ค.
์ฟ ํค์ ์ธ์ ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
# ์ฟ ํค, ์ธ์
์ํ๋ฅผ ์ ์ฅ ์ฉ๋๋ก ์ฟ ํค, ์ธ์ ์ ์ฌ์ฉํ๋ค๋ ๊ณตํต์ ์ด ์๋ค.
์ฟ ํค๋ ํด๋ผ์ด์ธํธ ๋ก์ปฌ(๋ธ๋ผ์ฐ์ )์ ์ ์ฅ๋๋ ํ์ผ๋ก ํด๋ผ์ด์ธํธ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ค. ์ด๊ฑฐ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ request header์ ๋ฃ์ด์ ์๋ฒ์ ์ ์กํ๋ค. ์ด๋ ์ฟ ํค ๋ง๋ฃ ์๊ฐ์ ์ด์ฉํด์ ์๋ฒ์ ์ฟ ํค ์ ํจ์ฑ์ ์ ๊ฐํ๊ณ , ์ํ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ ํ์๊ฐ ์๋ค๋ฉด ์๋ฒ์์ ๊ฐฑ์ ํด์ค๋ค.
์ธ์ ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์๋ฒ์ ๋๋ค. ์๋ฒ์์ ํด๋ผ์ด์ธํธ์๊ฒ ์ธ์ ID๋ฅผ ๋ถ์ฌํด, ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ฑํ ๋์ด์์ ๋ ์ธ์ฆ์ํ๋ฅผ ์ ์ง์ํจ๋ค. ์ฌ์ฉ์๊ฐ ๋ง์์ง์๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋ง์์ง๋ค๋ ํน์ง์ด ์๋ค.
๋ณด์ ์ ์ฅ์ ์ด ์ธ์ ์ ์๋ค. ๊ทธ๋ผ ์ ์ฟ ํค๋ฅผ ์ธ๊น?
1. ์ฟ ํค์ ์ ๋ณด๊ฐ ์์ด์ ์๋ฒ ์์ฒญ์์ ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณ๋ค๋ฅธ ์ธ์ฆ์ ์ฐจ ์์ด ๊ฐ๋ฅํ๋ค. -> ๋น ๋ฅด๋ค.
2. ๋ง๋ฃ๊ธฐ๊ฐ์ด ์ฟ ํค์ ์กด์ฌํด์, ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฟ ํค๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์๊ธฐ๋ ํ๋ค.
๋ฒ ์คํ ๊ธ๋ก๋ฒ ๊ธฐ์ ๋ธ๋ก๊ทธ
HTTP์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋คํธ์ํฌ ์ฅ์น ๊ฐ ํต์ ์ ์ํด ์ค๊ณ๋ ์์ฉ ๊ณ์ธต ํ๋กํ ์ฝ์ด๋ค. HTTP๋ฒ์ , hostname, method, ์์ฒญํค๋, content ๋ณธ๋ฌธ์ผ๋ก ๋ฉ์์ง๊ฐ ๊ตฌ์ฑ๋์ด์๊ณ ์ด๊ฑธ ์ฃผ๊ณ ๋ฐ๋๋ค. ๋ ์ํ ๋น์ ์ฅ ํ๋กํ ์ฝ์ด๋ผ ๊ฐ ๋ช ๋ น์ ๋ค๋ฅธ ๋ช ๋ น๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ค. TCP ์ปค๋ฅ์ ์ ์ด์ด์ ๊ทธ ์ปค๋ฅ์ ์ ์ฌ๋ฌ HTTP ์์ฒญ/์๋ต์ ์ฃผ๊ณ ๋ฐ๋๋ค.
OSI 7๊ณ์ธต์ ๋ํด ๊ฐ๋จํ๊ฒ ์ด์ผ๊ธฐ ํด์ฃผ์ธ์ & ๊ฐ ๊ณ์ธต์ด ํ๋ ์ผ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํด์ฃผ์ธ์
์์ดํ ์ปดํจํฐ ์์คํ ์ด ์๋ก ํต์ ํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ค ํ๋กํ ์ฝ ๋ชจ๋ธ์ด๊ณ ๊ณ์ธต๊ฐ encapsulation, decapsulation์ด ์ด๋ค์ง๋ค.
- 7๊ณ์ธต์ ์ฌ์ฉ์์ ์ง์ ์ํธ์์ฉํ๋ ์ ์ผํ ๊ณ์ธต์ด๋ค. ์๋น์ค ์ํํธ์จ์ด๋ ๋ชจ๋ 7๊ณ์ธต์ ์์กดํ๋ค.
- 6๊ณ์ธต์ 7๊ณ์ธต์์ ๋ฐ์ดํฐ๋ฅผ ์ธ ์ ์๊ฒ ์ค๋นํด์ฃผ๋ ๊ณ์ธต์ผ๋ก, ์ํธํ, ์์ถ, ๋ฐ์ดํฐ ๋ณํ์ด ์ผ์ด๋๋ ๊ณ์ธต์ด๋ค. ์์ ์์๊ฒ ์ค ๋ decodingํด์ ์ฃผ๊ฑฐ๋, ์ก์ ์์๊ฒ ๋ฐ์ encodingํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
- 5๊ณ์ธต์ ํต์ ์ ์์, ์ข ๋ฃ๋ฅผ ๋ด๋นํ๋ค. ๋ณดํต ํต์ ์ด ์์๋๊ณ ์ข ๋ฃ๋๊ธฐ๊น์ง์ ์๊ฐ์ ์ธ์ ์ด๋ผ๊ณ ํ๋ค.
- 4๊ณ์ธต์ ๋ ๊ธฐ๊ธฐ ๊ฐ End to End ํต์ ์ ๋ด๋นํ๋ค. ์ธ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ธ๊ทธ๋จผํธ๋ก ๋๋๋ค. TCP, UDP๊ฐ ์ฌ๊ธฐ ์ํ๋ค.
- 3๊ณ์ธต์ ๋คํธ์ํฌ ๊ณ์ธต์ผ๋ก ๋์ผ ๋คํธ์ํฌ์ผ ๋๋ ํ์์๊ณ , ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฐ์ ํจํท์ผ๋ก ๋๋ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค. ๋ผ์ฐํ ์ด ์ฌ๊ธฐ์ ์ด๋ค์ง๋ค.
- 2๊ณ์ธต์ ๋ฐ์ดํฐ ์ฐ๊ฒฐ ๊ณ์ธต์ผ๋ก ๋์ผ ๋คํธ์ํฌ์ ์๋ ๋ ์ฅ์น๊ฐ ํต์ ์ ์ฉ์ดํ๊ฒ ํ๋ค. ๋จ์๋ ํ๋ ์์ด๊ณ ์ธํธ๋ผ ๋คํธ์ํฌ ํต์ ์์ ํ๋ฆ์ ์ด, ์ค๋ฅ์ ์ด๋ฅผ ๋ด๋นํ๋ค. 4๊ณ์ธต์์๋ ํ๋ฆ์ ์ด, ์ค๋ฅ์ ์ด๊ฐ ์๋๋ฐ, ์ด๊ฑด ๋คํธ์ํฌ ๊ฐ ํต์ ์์ ๋ณด์ฅ๋๋ค.
- 1๊ณ์ธต์ ๋ฌผ๋ฆฌ ์ฅ๋น๋ฅผ ์ฌ์ฉํ๋ค. ๋จ์๋ ๋นํธ ์คํธ๋ฆผ์ด๋ค.
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์ ๋จผ์ ๋ณด๋ธ๋ค.
- ์ก์ ์๋ ์ฐ๊ฒฐ์ ๋๊ฒ ๋ค๋ ์๋ฏธ๋ก FIN์ ๋ณด๋ด๊ณ , FIN-WAIT-1์ํ๋ก ๋จธ๋ฌด๋ฅธ๋ค.
- ์๋ฒ๋ FIN์ ๋ฐ์ผ๋ฉด ACK๋ฅผ ๋ณด๋ธ๋ค์ CLOSE-WAIT์ํ๋ก ๋ค์ด๊ฐ๊ณ ,
- CLOSE ์ค๋น๊ฐ ๋ ๋ค ์๋ฒ๊ฐ ๋ณด๋ธ ACK๋ฅผ ์ก์ ์๊ฐ ๋ฐ์ผ๋ฉด ์๋ฒ๊ฐ ๋๋๊ฑธ ๊ฐ์งํ๊ธฐ ์ํด FIN-WAIT-2์ํ๋ก ๋ค์ด๊ฐ๋ค. ์๋ฒ๋ FIN์ ๋ณด๋ด๊ณ LAST-ACK์ํ๋ก ๋์ด๊ฐ๋ค.
- ์ก์ ์๊ฐ 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]์ ์น๋ฉด ์ผ์ด๋๋ ๊ณผ์ ์ ์ค๋ช ํด์ฃผ์ธ์
- ์ฌ์ฉ์์ ์์ฒญ์ด ISP์ ์ฐ๊ฒฐ๋ DNSํด์๊ธฐ๋ก ๋ผ์ฐํ ๋๊ณ , DNS ํด์๊ธฐ์์ DNS ๋ฃจํธ ๋ค์์๋ฒ๋ก ์ ๋ฌํ๋ค.
- ๋ฃจํธ ๋ค์์๋ฒ๋ TLD ๋ค์์๋ฒ๋ฅผ ๋ฐํํ๊ณ , DNS ํด์๊ธฐ๊ฐ ๋ค์ TLD ๋ค์์๋ฒ์ ์์ฒญ์ ์ ๋ฌํ๋ค.
- TLD๋ค์์๋ฒ๊ฐ ์ด์ IP์ฃผ์๋ฅผ ๋ฐํํด์ฃผ๋ ๋ค์์๋ฒ์ ์ ๊ทผํด์ DNS ํด์๊ธฐํํ ๋๊ฒจ์ฃผ๊ณ
- IP์ฃผ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์์ ์ค์ ์น์๋ฒ์ ์์ฒญํด ์๋ต์ ๋ฐ๋๋ค.
๊ฐ๋จํ๊ฒ๋ ์ด๋ ๊ฒ ์์ฝํ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ข ๋ ์์ธํ๊ฒ ์ ๊ทผํ๋ฉด ์๋์ ๊ฐ๋ค.
- ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ด์์ฒด์ ์ ๋คํธ์ํฌ ์คํ์ ํตํด ์ธํฐ๋ท์ ์ฐ๊ฒฐ๋๊ณ ์ฌ์ฉ์๋ ๋ก์ปฌ IP ์ฃผ์์ ํฌํธ๋ฅผ ํ ๋น๋ฐ๋๋ค.
- ์ฃผ์์ฐฝ์ "naver.com"์ ์ ๋ ฅํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ๋ค์ด๋ฒ ์๋ฒ๋ก ํน์ ๋ฆฌ์์ค HTTP GET ์์ฒญ์ ์์ฑํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ๋จผ์ ์์ ์ DNS ์บ์๋ฅผ ํ์ธํ์ฌ ๋ค์ด๋ฒ IP ์ฃผ์๋ฅผ ์ฐพ๋๋ค. ์บ์์ ํด๋น ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด์์ฒด์ ์ DNS resolver์๊ฒ DNS ์กฐํ๋ฅผ ์์ฒญํฉ๋๋ค.(Socket ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Resolver)
- DNS resolver๋ ๋ฃจํธ DNS ์๋ฒ, TLD ๋ค์์๋ฒ, ๊ทธ๋ฆฌ๊ณ ๋ค์ด๋ฒ์ ๋๋ฉ์ธ ์๋ฒ ์์ผ๋ก DNS ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ค. ๋ค์ด๋ฒ ๋๋ฉ์ธ ์๋ฒ๊ฐ ๋ค์ด๋ฒ ์๋ฒ์ IP์ฃผ์๋ฅผ ๋ฐํํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ ๋ค์ด๋ฒ ์๋ฒ์ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ TCP ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ , HTTP GET ์์ฒญ ๋ฉ์์ง๋ฅผ ํด๋น ์๋ฒ๋ก ๋ณด๋ธ๋ค.
- ๋ค์ด๋ฒ ์๋ฒ๋ ์์ฒญ์ ๋ฐ๊ณ , ์์ฒญ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฐพ์์ HTTP ์๋ต ๋ฉ์์ง๋ก ์๋ตํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ ์๋ต์ ์ฒ๋ฆฌํ์ฌ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด 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 ๋ฌธ์ ๋ก ๋์ด๊ฐ๋ค.
๋ฐ๋๋ฝ์ด ๋ฌด์์ด๋ฉฐ, ์ด๋ป๊ฒ ์๋ฐฉ, ํํผ, ํ์ง, ๋ณต๊ตฌํ ์ ์๋์ง ์ค๋ช ํด์ฃผ์ธ์
๋ ๊ฐ ์ด์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ํ ์์์ ์ ๊ทผํ๋๋ฐ, ์๋ก ์์์ ์ป์ง ๋ชปํ๋ ์ํ๋ก ๋ฌดํ๋๊ธฐ ์ํ๋ฅผ ์๋ฏธํ๋ค.
๋ฐํธ๋ฝ ๋ฐ์์กฐ๊ฑด์๋ 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)
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋ํด ๊ฐ๋จํ๊ฒ ์ค๋ช ํด์ฃผ์ธ์
๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋ฆฌ์์ค ํ ์ ์ฒด์ ๋คํธ์ํฌ ํธ๋ํฝ์ ๊ท ๋ฑํ๊ฒ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ก๋๋ฐธ๋ฌ์ ์ฅ์น๋ฅผ ์ด์ฉํ๋ฉด ์ฌ์ฉ์ - ์๋ฒ๊ทธ๋ฃน ์ฌ์ด์ ์์นํด์ ๋ชจ๋ ๋ฆฌ์์ค ์๋ฒ๊ฐ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋๋ก ํ ์ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฉ์ฑ, ํ์ฅ์ฑ, ๋ณด์, ์ฑ๋ฅ ๋ฉด์์ ํฅ์๋๋ค.
- ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋์ค์ง ์ด์๋ฅผ ์ ์ดํ ์ ์๊ฒ๋๋ค(๋ณต๊ตฌ๊น์ง).
- ์ฌ๋ฌ ์๋ฒ ๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋๋ ์ ์์ด์ ํ ์๋ฒ์ ๋ณ๋ชฉํ์์ด ์ผ์ด๋์ง ์๋๋ก ์ ์ดํ ์ ์๋ค.
- ๋ก๋ ๋ฐธ๋ฐ์์ ๋ด์ฅ๋ ๋ณด์๊ธฐ๋ฅ์ ์ฌ์ฉํด์ DDoS๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.(ํธ๋ํฝ ๋ชจ๋ํฐ๋ง, ๊ณต๊ฒฉ ํธ๋ํฝ๋ ๋ก๋๋ฐธ๋ฐ์ฑํด์ ๊ณต๊ฒฉ์ ๋ํ ์ํฅ๋ ์ค์ฌ์ค๋ค.)
- ์๋ฒ ๊ฐ ๋ก๋๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ฐฐํฌํ๊ธฐ ๋๋ฌธ์ ์ง๋ ฌ๋ก ์ ๋ฌํ๋ ๋ฐฉ์๋ณด๋ค ์์ฒญ์๊ฐ์ด ๋น ๋ฅด๋ค. (์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํฅ์)
์ ์ ๋ก๋๋ฐธ๋ฐ์ฑ, ๋์ ๋ก๋๋ฐธ๋ฐ์ฑ์ผ๋ก ๋๋ ์ ์๊ณ ๊ฐ๊ฐ ์ฌ์ฉ๋๋ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ผ์ด๋๋ก๋น, ์ต์์ฐ๊ฒฐ๋ฐฉ๋ฒ(ํ์ฑ ์ฐ๊ฒฐ์ด ๊ฐ์ฅ ์ ์ ์๋ฒ๋ก ํธ๋ํฝ์ ์ ์กํ๋ ๋ฐฉ์)์ด ์๋ค.
์์ ๊ทธ๋ฆผ์ ์๋ ๋ก๋๋ฐธ๋ฐ์๋ ์ํํธ์จ์ด ๋ก๋๋ฐธ๋ฐ์๋ก, ์ ์ด๊ฐ ์์ฃผ ์ ์ฐํ๋ค.
์๋ง์กด ๋ฌธ์ - ๋ก๋๋ฐธ๋ฐ์ฑ
Race Condition์ด ๋ฌด์์ธ์ง ์ค๋ช ํ์ธ์.
๊ณต์ ์์์ ๋ํด ๋์์ ์ ๊ทผํ ๋, ๊ฒฐ๊ณผ๊ฐ์ ์์ํ์ง์์ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ ์ํ๋ฅผ ๋งํ๋ค. -> ๋์ ์ ๊ทผ ์ ์๋ฃ์ ์ผ๊ด์ฑ์ด ์ง์ผ์ง์ง ์๋ ๊ฒฝ์ฐ
# ์์ธ
- ๋๊ธฐํ๊ฐ ์ ๋๋ก ๋์ง์์์ ๋
- ์ฌ๋ฌ ์ค๋ ๋/ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐํ์์ด ๊ณต์ ๋ฆฌ์์ค์ ์ ๊ทผํ๋ฉด ๋ฐ์ํ ์ ์๋ค. - ์คํ ์์์ ๋ํ ์๋ชป๋ ๊ฐ์
- ์คํ ์์๋ฅผ ์๋ํ ์์๋ก ๊ฐ์ ํ์ง์์ผ๋ฉด ๋ฐ์ํ ์ ์๋ค. - ์ฌ๋ฌ ์ค๋ ๋์์ ๊ณต์ ๋ฆฌ์์ค์ ๋ํ ๋น์์์ ์์ ์ ์ํ ํ ๋ (ex. ์ ์ญ๋ณ์์ ๋์์ ์ ๊ทผํ๋ค๋๊ฐ ํ๋ ๊ฒ)
- ์ปค๋๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ ์์
์ ํ๋ ๋์ค ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผ ํ ๋ ๋ฐ์ํ ์ ์๋ค.
-> ์ธํฐ๋ฝํธ๋ฅผ ๋ชปํ๊ฒ ํ๋ฉด๋๋ค. - ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํ์ฌ ์ปค๋๋ชจ๋๋ก ์ง์ ํด์ ์์ ์ ์ํํ๋ ๋์ค์ ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ ๊ฒฝ์ฐ -> ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ํฉ์ด๊ณ , ์ ์ด๊ถ์ด ๋์ด๊ฐ์ ์กฐ์์ค์ด๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฒ ๋๋ ๊ฒ์ ๋งํ๋ค.
- ๋ฉํฐ ํ๋ก์ธ์์์ ์ฌ๋ฌ CPU๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์ปค๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๊ฒฝ์ฐ -> lock, unlock์ผ๋ก ํด๊ฒฐ๊ฐ๋ฅํ๋ค.
์ธ ๊ฐ์ง ์์ธ์ด ๋ค ๋น์ทํ๊ธดํ๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋์ ์ ๊ทผ์ ๋ง๋ ๊ฒ์ด๋ค. ๊ทธ ๋ฐฉ๋ฒ๋ค๋ก ๋ฎคํ ์ค, ๋ชจ๋ํฐ, ์ธ๋งํฌ์ด, ๋๊ธฐํ ๋ฑ์ด ์๋ค.
์ธํฐ๋ฝํธ๊ฐ ๋ฌด์์ธ๊ฐ์?
ํ๋ก์ธ์๊ฐ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ด๋ค ์ํฉ์ด ๋ฐ์ํด์ ํ์ฌ ์คํ ์ค์ธ ์์ ์ ์ค๋จํ๊ณ , ๋ฐ์๋ ์ํฉ์ ์ฒ๋ฆฌ ํ๋ค ๋ณต๊ทํ๋ ์์ ์ ์๋ฏธํ๋ค.
- ์ธ๋ถ ์ธํฐ๋ฝํธ
- IO Interrupt ๊ฐ ์ฌ๊ธฐ ์ํ๋ค.
- ํ๋์จ์ด ์ ์ธ ์์๊ฐ ๋ณดํต ์ธ๋ถ ์ธํฐ๋ฝํธ๋ค.
- ์์ ํ ๋น๋ ์๊ฐ์ด ๋๋ ๊ฒฝ์ฐ๋ ์ธ๋ถ ์ธํฐ๋ฝํธ๋ก ํ๋จํ๋ค.
- ๋ด๋ถ ์ธํฐ๋ฝํธ <- ์ด๊ฑฐ๋ ์ผ๋จ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ
- ์๋ชป๋ ๋ช ๋ น์ด๋ ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ค.
- Exception์ด๋ Error ๊ฐ ์ฌ๊ธฐ์ ์ํ๋ค.
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ
- ๊ฐ์ ํ๋ก๊ทธ๋จ ๊ฐ์๊ฑธ ์คํํ๋ ๊ฒ ์ฌ๊ธฐ ์ํ๋ค.
# ๋์ ์์
- ์ธํฐ๋ฝํธ ์์ฒญ ๋ฐ์
- ํ๋ก๊ทธ๋จ ์คํ ์ค๋จ: ํ์ฌ ์คํ์ค์ด๋ Micro operation ๊น์ง ์ํํ๋ค.
- ํ์ฌ์ ํ๋ก๊ทธ๋จ ์ํ ๋ณด์กด: PCB(Process Control Block), PC(Program Counter) ๋ฑ์ ์ฌ์ฉ
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๋ฃจํด ์คํ -> ์๋น์ค ๋ฃจํด ์คํ
- ์ํ๋ณต๊ตฌ : ์ธํฐ๋ฝํธ ๋ฐ์ ์ ์ ์ฅํด๋ PC(Program counter)๋ฅผ ๋ค์ ๋ณต๊ตฌํ๋ค.
- ์ค๋จ๋ ํ๋ก๊ทธ๋จ ์คํ ์ฌ๊ฐ: PCB์ ๊ฐ์ ์ด์ฉํ์ฌ ์ด์ ์ ์ํ์ค์ด๋ ํ๋ก๊ทธ๋จ์ ์ฌ๊ฐํ๋ค.
๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋๋ฉด, PCB(Process Control Block)์ ์งํํ๋ process์ context๋ฅผ ์ ์ฅํ๋ฉด์ PC(Program Counter)๊ฐ๋ ์ ์ฅํ๋ค. ๊ฐ ํ๋ก์ธ์ค์ ๋ํ PCB๋ฅผ ์ ์งํ๋ฉด OS๋ ํ๋ก์ธ์ค ๊ฐ ์ ํ์ ์ํํ๊ณ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ถ์ ํ ์ ์๊ณ
OS๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๊ณ ์์คํ
๋ฆฌ์์ค์ ํ ๋น์ ์กฐ์ ํ ์ ์๋ค.
PC๋ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋ค์์ ์คํํ ๋ช
๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ์ง์คํฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ํ๋ก์ธ์ค๊ฐ ๋ช
๋ น์ด๋ฅผ ์คํํ ๋๋ง๋ค PC๋ ๋ค์์ ์คํํ ๋ช
๋ น์ด์ ์ฃผ์๋ก ์
๋ฐ์ดํธ๋๋ค. ์ด๊ฒ ์ธํฐ๋ฝํธ์์๋ ์ ์ฉ๋ผ์ PC๊ฐ์ PCB์ ๋ฃ์ด๋๊ณ , ์ธํฐ๋ฝํธ ๋๊ธฐ ์ ํ๋ก์ธ์ค๋ฅผ ๋ณต๊ตฌํด์ ์์
ํ๋ค.
๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์
๋ธ๋กํน - ๋ ผ๋ธ๋กํน์ ๋ด๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์์ ๋ํ ์ฒ๋ฆฌ ๋ฐฉ์์ด๋ค.
# ๋ธ๋กํน - ๋ ผ๋ธ๋กํน
์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋ ๊น์ง ์ ์ด๊ถ์ ๋๊ธด์ฑ๋ก ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ด ๋ธ๋กํน์ด๊ณ , ๋ ผ๋ธ๋กํน์ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง์์๋, ๋ฐ๋ก ๋ฐํํ๊ณ ๋ค์ ์์ ์ ์ํํ๋ค.(์ ์ด๊ถ์ ๋๊ธฐ์ง ์๋ ๋ฐฉ์์ด๋ค.)
์ธ๋ป ๋ณด๋ฉด ๋น๋๊ธฐ / ๋๊ธฐ๋ ๋น์ทํ๋ค๊ณ ์๊ฐํ ์ ์๋๋ฐ, ์์ญ์ด ๋ค๋ฅด๋ค. ๋๊ธฐ / ๋น๋๊ธฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ฃผ์ฒด(์์ฒญํ ์ค๋ ๋)๊ฐ ์ด๋ป๊ฒ ํ๋ํ๋๊ฒ์ ๋ํ ์์ญ์ด๊ณ , ๋ธ๋กํน ๋ ผ ๋ธ๋กํน์ ํ์ฌ ์์ ์ํ๋ง ๋ฐ๋ผ๋ณด๊ณ ๋์์ ๊ฒฐ์ ํ๋ ์์ญ์ด๋ค.
๋๊ธฐ์ ๊ฒฝ์ฐ ์ด๋ค ์์ ์ด ๋๋ ๋ ๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์์ ์ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ผ๋ธ๋กํน์ ์์ฒญ์ ๋ํ ๊ธฐ๋ ์๋ต์ด ๋์ค์ง์์๋ ๋ฐํํด์ ๋ค์ ์์ ์ ์ํํ๋ค.
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;
::์ถ์ฒ::
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
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
'CS๐ฅ๏ธ > ์คํฐ๋๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋คํธ์ํฌ ๋ชจ์ (0) | 2024.06.16 |
---|---|
[CS ์คํฐ๋] 4์ฃผ์ฐจ ver 1.0 (0) | 2024.04.12 |
[CS ์คํฐ๋] 3์ฃผ์ฐจ ver 1.1 (0) | 2024.04.05 |