๐ง ์ Redis๋ ๋จ์ผ ์ค๋ ๋์ผ๊น
๐ ํต์ฌ ์์ฝ
Redis๋ ์ ๋ฉํฐ์ค๋ ๋๊ฐ ์๋ ๋จ์ผ ์ค๋ ๋(single-threaded) ๋ก ์ค๊ณ๋์์๊น?
์ด์ ๋ ๋จ์ํ๋ค: ๋น ๋ฅด๊ณ ์์ ํ๊ฒ ๋์ํ๊ธฐ ์ํด์๋ค.
๐ก Redis ์ํคํ ์ฒ ๊ฐ์

- ๋ชจ๋ ๋ช ๋ น์ ํ๋์ ์ค๋ ๋(Event Loop) ์์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋จ
- ํด๋ผ์ด์ธํธ ์์ฒญ์ I/O ๋ฉํฐํ๋ ์ฑ ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ
- Redis 6.0๋ถํฐ ๋คํธ์ํฌ I/O๋ ๋ฉํฐ์ค๋ ๋ ์ง์, ์คํ ๋ก์ง์ ์ฌ์ ํ ๋จ์ผ ์ค๋ ๋
โ ๋จ์ผ ์ค๋ ๋์ ์ฅ์
1๏ธโฃ ๋์์ฑ ๋ฌธ์ ํด์
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ Race Condition, Deadlock ๋ฑ ์ฒ๋ฆฌ ๋ณต์ก๋ โ
- ๋จ์ผ ์ค๋ ๋๋ ์ด๋ฌํ ๋ฌธ์ ์์ ์์ฐ์ค๋ฝ๊ฒ ์์ ๋ก์
2๏ธโฃ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๋ณด์ฅ
- ๋ชจ๋ ๋ช ๋ น์ด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ
- ๋ณ๋ ๋ฝ ์์ด๋ Atomic(์์์ฑ) ๋ณด์ฅ
๐ ํธ๋์ญ์ /๋ณตํฉ ์ฐ์ฐ์์๋ ์์
3๏ธโฃ ์ฑ๋ฅ ์ต์ ํ
- Redis๋ ๋๋ถ๋ถ์ ์์ ์ด ๋ฉ๋ชจ๋ฆฌ ๋ด ์ฒ๋ฆฌ (RAM)
- CPU ์์ ์ค ์คํ๋ ค ๋ฝ๊ณผ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ณ๋ชฉ ์์ธ
- ๋จ์ผ ์ค๋ ๋๋ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋ ์ต์ํ
โ๏ธ Redis์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)
ํด๋ผ์ด์ธํธ ์์ฒญ ์์
โ
๋คํธ์ํฌ I/O ์ฒ๋ฆฌ (epoll/kqueue ๋ฑ)
โ
์์ฒญ ํ์ ์์
โ
๋จ์ผ ์ค๋ ๋๊ฐ ๋ช
๋ น์ด๋ฅผ ํ๋์ฉ ์์ฐจ ์ฒ๋ฆฌ
โ
๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋น๋๊ธฐ๋ก ์๋ต
- ์ค์ ๋ก๋ ํ๋์ ์ค๋ ๋๊ฐ ์์ฒ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋์ ์ ์ ์๋ ๋ง์ง๋ง, ์ค์ ๋ณ๋ ฌ ์์ ์ ์์
๐ Redis 6.0 ์ดํ - ๋คํธ์ํฌ I/O ๋ฉํฐ์ค๋ ๋
--io-threads์ต์ ๋์- ํด๋ผ์ด์ธํธ์ ์์ฒญ ์์ /์๋ต ์ฒ๋ฆฌ๋ ๋ณ๋ ฌํ๋จ
- ํ์ง๋ง, ๋ช ๋ น ์คํ ๋ก์ง ์์ฒด๋ ์ฌ์ ํ ๋จ์ผ ์ค๋ ๋
๐ก๏ธ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ ํ Redis๋
๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์์ด "Atomic" ์ ๋ณด์ฅ
๐ ์ธ์ ๋จ์ผ ์ค๋ ๋๊ฐ ๋ณ๋ชฉ์ด ๋ ์ ์์๊น?
| ์ํฉ | ๋์ |
|---|---|
| ๋๋ฆฐ ๋ช ๋ น์ด ๋ง์ ๋ | ๋ช ๋ น ์ต์ ํ, Redis Cluster ์ฌ์ฉ |
| ๋คํธ์ํฌ ๋ณ๋ชฉ ์ | --io-threads๋ก I/O ๋ณ๋ ฌ ์ฒ๋ฆฌ |
| ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋์ด ๋งค์ฐ ๋์ ๊ฒฝ์ฐ | Sharding, Redis Sentinel/Cluster ํ์ฉ |
๐ง ๋ง๋ฌด๋ฆฌ ์ ๋ฆฌ
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ์ค๊ณ ๋ชฉ์ | ์ฑ๋ฅ ์ต์ ํ + ๋์์ฑ ๋จ์ํ |
| ์ฅ์ | ์์ ์ฑ, ์์ธก ๊ฐ๋ฅ, ๋น ๋ฆ |
| ๋จ์ | CPU ์ฝ์ด ํ๊ณ, ๋๋ฆฐ ๋ช ๋ น ๋ณ๋ชฉ |
| Redis 6.0 ์ดํ | ๋คํธ์ํฌ I/O๋ ๋ฉํฐ์ค๋ ๋, ์ฒ๋ฆฌ ๋ก์ง์ ๋จ์ผ |
๋๊ธ๋จ๊ธฐ๊ธฐ