๐ <๊ทธ๋ฆผ์ผ๋ก ๊ณต๋ถํ๋ IT ์ธํ๋ผ ๊ตฌ์กฐ> ๋ฅผ ์ฝ๊ณ ๊ทธ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
ํ
'ํ(Queue)'๋ ์ฐ๋ฆฌ๋ง๋ก '๋๊ธฐ ํ๋ ฌ'์ด๋ผ ํํํ ์ ์๋ค.
- ํ(๋๊ธฐ ํ๋ ฌ)์์๋ ์ค์ ์ค ๋๋ ๊ฐ์ฅ ๋ง์ง๋ง์ ์๊ณ , ์ฒ๋ฆฌ๋ ์ ๋๋ถํฐ ์์๋๋ก ๋๋ค.
- ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ํ ๋์์ FIFO(First In First Out) ๋ฐฉ์์ด๋ผ๊ณ ํ๋ค.
ํ๋ ์ปดํจํฐ ์ธ๊ณ์์ ๋ค์ํ ๊ณณ์ ํ๋ ฌ์ด ๋ง๋ค์ด์ง๋ค.
- CPU ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋ ํ๋ ฌ
- ํ๋ ๋์คํฌ ๋ฑ์ ์ ์ฅ์ ์ฝ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ I/O ์๊ตฌ ํ๋ ฌ
- ๋คํธ์ํฌ ์ ์ ์ฑ๋ฆฝ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ ์ ์๊ตฌ ํ๋ ฌ
์ด๋ CPU๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ๋ก์ธ์ค ํ๋ ฌ์ ๋ฐํ(Run-Queue)๋ผ๊ณ ํ๋ค.
'๋ฐํ์ ์์ธ ํ๋ก์ธ์ค ์๋ฅผ ์ฝ์ด ์๋ก ๋๋์ด์ 1์ด๋ผ๋ฉด ๋ฌธ์ ์๋ค' ๋ผ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
์ฐธ๊ณ ๋ก, CPU์์ ์ฒ๋ฆฌ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ฐํ๋ก ์ธ์ํ ์ง๋ OS ์ข ๋ฅ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ๋ฆฌ๋ ์ค์์๋ CPU์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ๋ฐํ๋ก ์ธ์ํ๋ค. OS ์ปค๋์๋ ํ๋ก์ธ์ค ์ค์ผ์ค๋ฌ๋ผ๋ ๊ธฐ๋ฅ์ด ์์ด์ ๋ฐํ ๋ฑ์ ๊ด๋ฆฌํ๋ค.
ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ฌ์ฉํ๋ ๋์์ด CPU๊ฐ ์๋๋ผ HDD๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋์คํฌ I/O ์์๊ฐ ๋๋ค.
HDD๋ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋ผ ์๋ ํน์ ์์น์ ์ก์ธ์คํด์ผ ํ๊ธฐ ๋๋ฌธ์ CPU์ฒ๋ผ ๋น์ด ์๋ค๋ ์ด์ ๋ก ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ, ๊ณต์ ์ ์ฅ์์์๋ ์ผ๋ฐ์ ์ผ๋ก ์บ์๋ผ ๋ถ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ด์ฅํ๊ณ ์์ด์ I/O๊ฐ ๋ฐ์ํ๋ฉด ์บ์์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ก๋๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๋ค.
๋ฐฐํ์ ์ ์ด
๋ฐฐํ์ ์ ์ด๋ ๋ง ๊ทธ๋๋ก '๋ค๋ฅธ ๊ฒ์ ๋ฐฐ์ ํ๋ ์ ์ด'๋ค.
์ปดํจํฐ ์ธ๊ณ์์ ์์๋ฅผ ๋ค์ด๋ณด๋ฉด, ์ง๋ ฌ ์ฒ๋ฆฌ์์๋ ๋ฐฐํ์ ์ ์ด๊ฐ ํ์ ์์ง๋ง, ๋ณ๋ ฌ ์ฒ๋ฆฌ์์๋ ํ์ํ๋ค.
์ด๋ ๊ฒ ๋ฐฐํ์ ์ ์ด๋ฅผ ํ๋ ๋ถ๋ถ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๊ธฐ ์ฝ๋ค.
์ผ๋ฐ์ ์ผ๋ก OS๋ DBMS๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ฐฐํ์ ์ ์ด๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
ํน์ง์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ณต์์ ์ฒ๋ฆฌ๊ฐ ๊ณต์ ์์(CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ ๋ฑ)์ ๋์์ ์ก์ธ์คํ๋ฉด ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐํ์ ์ ์ด๋ก ๋ณดํธํด ์ฃผ์ด์ผ ํ๋ค.
- ๋ฐฐํ์ ์ ์ด์์๋ ํน์ ์ฒ๋ฆฌ๊ฐ ๊ณต์ ์์์ ์ด์ฉํ๊ณ ์๋ ๋์ ๋ค๋ฅธ ์ฒ๋ฆฌ๊ฐ ์ด์ฉํ ์ ์๊ฒ ํด์ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ค.
DBMS์์ ์ฌ์ฉ๋๋ ๋ฐฐํ์ ์ ์ด๋ฅผ ์์๋ณด์.
1๏ธโฃDBMS์ ๋ฐฐํ์ ์ ์ด์์๋ ๋งค์ฐ ์งง์ ์๊ฐ ๋์๋ง ๋ฝ(Lock)์ ์ ์งํ๋ ๋์น(Latch)๋ผ๋ ๊ฒ์ด ์์ด์ CPU์์ ์๋ฏธ๊ฐ ์๋ ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด์ ๋๊ธฐํ๋ ๋ฐฉ์์ด ์๋ค. ์คํ๋ฝ(Spin-Lock)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
2๏ธโฃํํธ ๋น๊ต์ ์ฅ์๊ฐ ๋ฝ์ ์ ์งํ๋๋ก ํ๋ฅผ ์ด์ฉํด์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ธ ์ฌ๋ฆฝ๋ฝ(Sleep-Lock)์ด๋ผ๋ ๊ฒ๋ ์๋ค.
3๏ธโฃ์คํ๋ฝ์ CPU์์ ์๋ฏธ ์๋ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๋ฉด์ ๋๊ธฐํ์ง๋ง, ๋จ์ํ ๊ณ์ ๋ฐ๋ณต๋ง ํ๋ ๊ฒ์ด ์๋๋ผ ์คํํด์ ๋ฝ์ ํ๋ณดํ์ง ๋ชปํ๋ฉด ์ฌ๋ฆฝํ๋ ๋ฑ ์ํฉ์ ๋ฐ๋ผ ์คํํ ์ง ์ฌ๋ฆฝํ ์ง๋ฅผ ํ๋จํ๋ ์ด๋ํฐ๋ธ๋ฝ(Adaptive-lock) ๋ฐฉ์๋ ์๋ค.
๋ฆฌ๋ ์ค ์ปค๋์ ๋น ์ปค๋๋ฝ(Big Kernel Lock, BKL)์ด๋ผ ๋ถ๋ฆฌ๋, ํ๋์ ์คํ๋ฝ์ผ๋ก ์ ์ง๋๋ค.
์ปค๋์ BKL์ด ์ด์ฉ๋๋ ๋ถ๋ถ์์๋ ์ฒ๋ฆฌ๊ฐ ์ง๋ ฌํ๋ผ์ ๋์์ ํ๋์ CPU๋ง ์ปค๋ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด ๋ถ๋ถ์ด ๋ณ๋ชฉ ์ง์ ์ด ๋๊ธฐ ์ฝ๋ค.
์ํ ์ ์ฅ/ ์ํ ๋น์ ์ฅ
- ์ํ ์ ์ฅ(Stateful): ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง
- ์ ๋ณด๋ฅผ ๋ง์ด ๊ฐ์ง๊ณ ์๊ธฐ์ ์ธ๋ถํ๋ ์ ์ด๊ฐ ๊ฐ๋ฅํ ๋ฐ๋ฉด, ๊ตฌ์กฐ๊ฐ ๋ณต์กํ๋ค.
- ์์) ssh
- ์ฑํ ๋น์ ์ฅ(Stateless): ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง์ง ์์
- ๊ณ ๊ธฐ๋ฅ์ ์๋์ง๋ง, ์ํ๋ฅผ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๋ฉฐ ์ฑ๋ฅ์ด๋ ์์ ์ฑ ์ธก๋ฉด์์ ์ฐ์ํ๋ค.
- ์์) http
์ปดํจํฐ ๋ด์์๋ ๊ฑฐ์ ๋ชจ๋ ๊ณณ์ ์ํ ์ ์ฅ์ด ์ฌ์ฉ๋๊ณ ์๋ค. ๋ณต์กํ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ํ ์ ์ฅ์ ํ์๋ถ๊ฐ๊ฒฐ์ด๋ค.
์ผ๋ฐ CPU๋ ํ๋์ CPU์์ ๋ณต์์ ํ๋ก์ธ์ค๋ฅผ ์กฐ๊ธ์ฉ ์ฒ๋ฆฌํ๋ค. ์ด ๋๋ฌธ์ ํน์ ์์ ์ ์ง์ง๋ก ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ ํ๋ก์ธ์ค๋ 1CPU๋น ํ๋๋ค.
์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋ ํ๋ก์ธ์ค๋ ๋๊ธฐ ์ํ๋ก ์์ด์ผ ํ๋ค. ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค์์๋ ์๋์ ๊ฐ์ ์ํ๋ก ์ํ ์ ์ด๋ฅผ ํ๋ค.
- ๊ฐ์: ์ด๋ค ๋ช ๋ น์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํํ๋ฉด ํ๋ก์์ค๊ฐ ์์ฑ๋๋ฉด ์คํ๋๋ค.
- ์คํ ๊ฐ๋ฅ ์ํ: ๊ฐ์ฅ ๋จผ์ ์คํ ํ๋ผ ๋ถ๋ฆฌ๋ ์์ ๋๊ธฐ ํ๋ ฌ์ ์ค์ ์์ผ ํ๋ค.
- ์คํ ์ํ: ์ฐจ๋ก๊ฐ ๋์์ค๋ฉด ์คํ ์ํ๋ก ์ ์ดํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌํ๋ค.
- ํ๋์ CPU๊ฐ ๋ ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ผ์ ๋์ ์ฒ๋ฆฌํ๋ฉด CPU๋ฅผ ๋ค์ ์ด๋ฉฐ, ์ด๋ ํ๋ก์ธ์ค๋ ๋ค์ ์์ ํ๋ ฌ๋ก ๋์๊ฐ ์ค์ ์ ๋ค.
- ๋๊ธฐ ์ํ: ๋ง์ฝ ๋์คํฌ ์ก์ธ์ค ๋ฑ I/O ๋๊ธฐ๊ฐ ๋ฐ์ํ๋ ์ฒ๋ฆฌ๋ฅผ ์คํํ ๊ฒฝ์ฐ ๋๊ธฐ ์ํ๋ก ์ ์ดํ๋ค.
- ์ข ๋ฃ: ์ด ๋ํ์ ์ธ ์ธ ๊ฐ์ง ์ํ(์คํ ๊ฐ๋ฅ ์ํ, ์คํ ์ํ, ๋๊ธฐ ์ํ)๋ฅผ ์ ์ดํ๋ฉด์ ์ฒ๋ฆฌ๊ฐ ์ ๋ถ ๋๋๋ฉด ์ข ๋ฃํ๋ค.
'Develop > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Server] Kotlin SpringBoot ํ๋ก์ ํธ์ ktlint ์ ์ฉํ๊ธฐ (0) | 2025.05.05 |
---|---|
[Server] JPA ๊ฐ๋ ๋ถํฐ Spring Data JPA๊น์ง (0) | 2025.05.05 |
[IT ์ธํ๋ผ] Ch3 3๊ณ์ธตํ ์์คํ (์น ๋ฐ์ดํฐ, ๊ฐ์ํ) (0) | 2025.04.12 |
[Cloud Native] Ch1 ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์๊ฐ (1) | 2024.06.16 |