Redis๋ ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์์ ์ธ ๋๊ตฌ๋ก ์ฌ์ฉ๋๋ค.
์์ผ๋ก ํ ํ๋ก์ ํธ์์ ํ์ํ ๊ฒ ๊ฐ์ ๊ณต๋ถ๋ฅผ ํ๊ธฐ๋ก ํ๋ค.
Redis๋?
- ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํต์ฌ
- Redis๋ ๋งค์ฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ์๋ํ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅํ์ฌ ์ฒ๋ฆฌ ์๋๊ฐ ๋ฐ์ด๋ ์์คํ
- MySQL๊ณผ ๊ฐ์ ์ ํต์ ์ธ RDBMS๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ์ง๋ง, Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ฒ๋ฆฌํจ์ผ๋ก์จ ํจ์ฌ ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ค.
์ฅ์
- ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์กฐํ๋ ์์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ณ , ํนํ ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ๋ Redis์ ์๋๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ด๋ค.
- ๋น ๋ฅธ ์ฑ๋ฅ: ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ I/O ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ, ๋๊ท๋ชจ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ํฉ
- ๊ฐํธํ ์ฌ์ฉ: Redis๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ์ฌ ๋ณต์กํ ๋ฐ์ดํฐ ๊ด๋ฆฌ์๋ ์ ์ฉ
์ฌ๋ก
- ์บ์ฑ: ๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์บ์ ์์คํ ์ผ๋ก ์์ฃผ ์ฌ์ฉ. ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ๋ฅผ Redis์ ์ ์ฅํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ์ธ์ ๊ด๋ฆฌ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ ๋ฑ์ ๊ด๋ฆฌํ๋ ์ธ์ ์ Redis์ ์ ์ฅํ์ฌ ๋น ๋ฅธ ์ธ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- ๋ฉ์์ง ํ: Redis๋ Pub/Sub ๋ชจ๋ธ์ ํ์ฉํด ์ค์๊ฐ ๋ฉ์์ง ์์คํ ์ด๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์์ ๋ฉ์์ง ํ๋ก ์์ฃผ ํ์ฉ
- ์ค์๊ฐ ๋ถ์ ๋ฐ ํต๊ณ
- ์ง๋ฆฌ๊ณต๊ฐ ์ธ๋ฑ์ฑ
- ์ค์๊ฐ ์ฑํ ๋ฐ ๋ฉ์์ง
2. Redis ๊ตฌ์ถ ๋ฐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
1. Redis ์ค์น
Redis ์ค์น ๋ฐ ์คํ
$ brew install redis
$ brew services start redis
Redis ์คํ ์ฌ๋ถ ํ์ธ
$ brew services info redis
Redis ์ค์ง
$ brew services stop redis
Redis ์ ์
$ redis-cli
Redis ์ ์ ํ ํ
์คํธ
127.0.0.1:6379> ping
PONG
2. Redis ๊ธฐ๋ณธ ๋ช ๋ น์ด
โ
๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ (Key, Value)
$ set jaeseong:name "jaeseong park"
$ set jaeseong:hobby soccer
โ
๋ฐ์ดํฐ ์กฐํํ๊ธฐ (Key๋ก Value ๊ฐ ์กฐํํ๊ธฐ)
$ get jaeseong:name
"jaeseong park"
$ get jaeseong:hobby
"soccer"
์์ ๊ฒฝ์ฐ: ์ ์ฅ๋์ง ์์ ํค๋ฅผ ์กฐํํ๋ฉด (nil)์ด ๋ฐํ๋ฉ๋๋ค.
$ get pjs:name
(nil)
โ
์ ์ฅ๋ ๋ชจ๋ Key ์กฐํํ๊ธฐ
๋ชจ๋ ํค๋ฅผ ์กฐํํ๋ ค๋ฉด keys * ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
$ keys *
1) "jaeseong:name"
2) "jaeseong:hobby"
โ
๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ (Key๋ก ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ)
$ del jaeseong:hobby
์ญ์ ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ฉด (nil)์ด ๋ฐํ๋ฉ๋๋ค.
$ get jaeseong:hobby
(nil)
โ
๋ฐ์ดํฐ ์ ์ฅ ์ ๋ง๋ฃ์๊ฐ(TTL) ์ค์ ํ๊ธฐ
Redis๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋๋ก ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
$ set jaeseong:pet dog ex 30 # 30์ด ํ ๋ง๋ฃ
โ
๋ง๋ฃ์๊ฐ(TTL) ํ์ธํ๊ธฐ
$ ttl jaeseong:pet
30 # ๋จ์ ์๊ฐ (์ด)
$ ttl jaeseong:name
-1 # ๋ง๋ฃ ์๊ฐ์ด ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ
$ ttl pjs:name
-2 # ํค๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋ ๋ง๋ฃ๋ ๊ฒฝ์ฐ
โ
๋ชจ๋ ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ
$ flushall
3. Redis์์ Key ๋ค์ด๋ฐ ์ปจ๋ฒค์
Redis์์ ํค ์ด๋ฆ์ ์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ค์.
ํ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ฝ๋ก (:)์ ์ฌ์ฉํ์ฌ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ๋ถ
- users:100:profile
โ users๋ ๋ฐ์ดํฐ์ ์นดํ ๊ณ ๋ฆฌ(์ฌ์ฉ์), 100์ ์ฌ์ฉ์ ID(PK), profile์ ํ๋กํ ์ ๋ณด - products:123:details
โ products๋ ๋ฐ์ดํฐ์ ์นดํ ๊ณ ๋ฆฌ(์ํ), 123์ ์ํ ID(PK), details๋ ์ํ์ ์ธ๋ถ์ฌํญ
์ด๋ฅผ ํตํด ๊ฐ๋ ์ฑ, ์ผ๊ด์ฑ, ํ์ฅ์ฑ, ๊ฒ์๊ณผ ํํฐ๋ง์์ ์ฉ์ด์ฑ์ ์ป์ ์ ์๋ค.
์บ์ฑ ์ ๋ต: Cache Aside, Write Around
1. ์บ์(Cache)์ ์บ์ฑ(Caching)์ ๊ฐ๋
์บ์: ์๋ณธ ์ ์ฅ์๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ์์ ์ ์ฅ์๋ฅผ ์๋ฏธ
์ผ๋ฐ์ ์ผ๋ก ์บ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ๋์คํฌ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
์บ์ฑ: ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์๋ฏธ
2. ์บ์ฑ ์ ๋ต: Cache Aside์ Write Around
Cache Aside ์ ๋ต (Lazy Loading)
๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์บ์์์ ๋จผ์ ํ์ธํ๊ณ , ์บ์๊ฐ ์์ผ๋ฉด DB์์ ์กฐํํ์ฌ ์บ์์๋ ์ ์ฅํ๋ ๋ฐฉ์
Lazy Loading ๋๋ Look Aside ์ ๋ต์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ผ๋ก ์๋
- ์ด๊ธฐ ์ํ: ์บ์์ DB ๋ชจ๋ ๋น์ด์๋ค.
- ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค ํ ๋, ์บ์์์ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ค.
- ์ด๋, ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
- DB์์ ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ ํ ์๋ตํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์กฐํํ๋ฉด ์บ์์์ ๋ฐ๋ก ์๋ต์ด ๊ฐ๋ฅ(์บ์ ํํธ)
- Cache Hit: ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฐ๋ก ์บ์์์ ๋ฐ์ดํฐ ์กฐํ
- Cache Miss: ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ ์บ์์ ์ ์ฅ
Write Around
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋(์ฐ๊ธฐ ์์ - ์ ์ฅ, ์์ , ์ญ์ ) DB์๋ง ์ ์ฅํ๊ณ , ์บ์์๋ ์ ์ฅํ์ง ์๋ ๋ฐฉ์
๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์บ์๊ฐ ๋น์ด ์๋ค๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ ๋ค ์๋ตํ๋ ๋ฐฉ์
- ์ฐ๊ธฐ: ๋ฐ์ดํฐ๋ฅผ DB์๋ง ์ ์ฅํ๊ณ , ์บ์์๋ ์ ์ฅํ์ง ์๋๋ค.
- ์กฐํ: ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , ์์ผ๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์บ์์๋ ์ ์ฅํ๋ค.
ํ๊ณ์
1. ์บ์๋ ๋ฐ์ดํฐ์ DB ๋ฐ์ดํฐ ๋ถ์ผ์น
- ๋ฌธ์ : ์บ์์ DB์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์์ ์ ์๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ฐ์ดํฐ ์์ ์ ์บ์๋ฅผ ๋์์ ๊ฐฑ์ ํ๋ ค๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฏ๋ก, ์ผ๊ด์ฑ์ ํฌ๊ธฐํ๊ณ ์ฑ๋ฅ ํฅ์์ ์ฐ์ ์ํ ์ ์๋ค. ์บ์์ DB์ ๋ถ์ผ์น๋ฅผ ์ต์ํํ๊ธฐ ์ํด TTL์ ์ฌ์ฉํ์ฌ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์บ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ค.
2. ์บ์ ๊ณต๊ฐ ๋ถ์กฑ
- ๋ฌธ์ : ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์บ์์ ์ ์ฅ ์ฉ๋์ด ์ ํ์
- ํด๊ฒฐ ๋ฐฉ๋ฒ: TTL์ ์ฌ์ฉํ์ฌ ์์ฃผ ์ฌ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๋ง๋ฃ๋๊ฒ ์ค์ ํ๊ณ , ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ๋ง ์บ์์ ์ ์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ณ ๋ ค์ฌํญ
๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค.
- SQL ํ๋(์ด๊ฑธ ๋จผ์ ๊ณ ๋ คํ์): ๊ธฐ์กด ์์คํ ๋ด์์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ
- ์บ์ ์๋ฒ ํ์ฉ (Redis ๋ฑ)
- ๋ ํ๋ฆฌ์ผ์ด์ (Master/Slave ๊ตฌ์กฐ)
- ์ค๋ฉ
- DB ์ค์ผ์ผ์ (CPU, Memory, SSD ๋ฑ ํ๋์จ์ด ์ ๊ทธ๋ ์ด๋)
์ค์ต
์ค๋ฅธ์ชฝ ์๋ ์๊ฐ์ ๋ณด๋ฉด 3.40s -> 1.93s -> 1.2s๋ก ์บ์ฑ ์ฒ๋ฆฌ๋ฅผ ํตํด ์๊ฐ์ด ๊ฐ์ํ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํ๋ค.



'๐ผ ๋ฐฑ์ค๋ > database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ (1) | 2023.12.22 |
---|
Redis๋ ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์์ ์ธ ๋๊ตฌ๋ก ์ฌ์ฉ๋๋ค.
์์ผ๋ก ํ ํ๋ก์ ํธ์์ ํ์ํ ๊ฒ ๊ฐ์ ๊ณต๋ถ๋ฅผ ํ๊ธฐ๋ก ํ๋ค.
Redis๋?
- ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํต์ฌ
- Redis๋ ๋งค์ฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ์๋ํ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅํ์ฌ ์ฒ๋ฆฌ ์๋๊ฐ ๋ฐ์ด๋ ์์คํ
- MySQL๊ณผ ๊ฐ์ ์ ํต์ ์ธ RDBMS๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ์ง๋ง, Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ฒ๋ฆฌํจ์ผ๋ก์จ ํจ์ฌ ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ค.
์ฅ์
- ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์กฐํ๋ ์์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ณ , ํนํ ๋์ฉ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ๋ Redis์ ์๋๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ด๋ค.
- ๋น ๋ฅธ ์ฑ๋ฅ: ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ I/O ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ, ๋๊ท๋ชจ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ํฉ
- ๊ฐํธํ ์ฌ์ฉ: Redis๋ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ์ฌ ๋ณต์กํ ๋ฐ์ดํฐ ๊ด๋ฆฌ์๋ ์ ์ฉ
์ฌ๋ก
- ์บ์ฑ: ๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์บ์ ์์คํ ์ผ๋ก ์์ฃผ ์ฌ์ฉ. ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ๋ฅผ Redis์ ์ ์ฅํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ์ธ์ ๊ด๋ฆฌ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ ๋ฑ์ ๊ด๋ฆฌํ๋ ์ธ์ ์ Redis์ ์ ์ฅํ์ฌ ๋น ๋ฅธ ์ธ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- ๋ฉ์์ง ํ: Redis๋ Pub/Sub ๋ชจ๋ธ์ ํ์ฉํด ์ค์๊ฐ ๋ฉ์์ง ์์คํ ์ด๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์์ ๋ฉ์์ง ํ๋ก ์์ฃผ ํ์ฉ
- ์ค์๊ฐ ๋ถ์ ๋ฐ ํต๊ณ
- ์ง๋ฆฌ๊ณต๊ฐ ์ธ๋ฑ์ฑ
- ์ค์๊ฐ ์ฑํ ๋ฐ ๋ฉ์์ง
2. Redis ๊ตฌ์ถ ๋ฐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
1. Redis ์ค์น
Redis ์ค์น ๋ฐ ์คํ
$ brew install redis
$ brew services start redis
Redis ์คํ ์ฌ๋ถ ํ์ธ
$ brew services info redis
Redis ์ค์ง
$ brew services stop redis
Redis ์ ์
$ redis-cli
Redis ์ ์ ํ ํ
์คํธ
127.0.0.1:6379> ping
PONG
2. Redis ๊ธฐ๋ณธ ๋ช ๋ น์ด
โ
๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ (Key, Value)
$ set jaeseong:name "jaeseong park"
$ set jaeseong:hobby soccer
โ
๋ฐ์ดํฐ ์กฐํํ๊ธฐ (Key๋ก Value ๊ฐ ์กฐํํ๊ธฐ)
$ get jaeseong:name
"jaeseong park"
$ get jaeseong:hobby
"soccer"
์์ ๊ฒฝ์ฐ: ์ ์ฅ๋์ง ์์ ํค๋ฅผ ์กฐํํ๋ฉด (nil)์ด ๋ฐํ๋ฉ๋๋ค.
$ get pjs:name
(nil)
โ
์ ์ฅ๋ ๋ชจ๋ Key ์กฐํํ๊ธฐ
๋ชจ๋ ํค๋ฅผ ์กฐํํ๋ ค๋ฉด keys * ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
$ keys *
1) "jaeseong:name"
2) "jaeseong:hobby"
โ
๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ (Key๋ก ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ)
$ del jaeseong:hobby
์ญ์ ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ฉด (nil)์ด ๋ฐํ๋ฉ๋๋ค.
$ get jaeseong:hobby
(nil)
โ
๋ฐ์ดํฐ ์ ์ฅ ์ ๋ง๋ฃ์๊ฐ(TTL) ์ค์ ํ๊ธฐ
Redis๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋๋ก ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
$ set jaeseong:pet dog ex 30 # 30์ด ํ ๋ง๋ฃ
โ
๋ง๋ฃ์๊ฐ(TTL) ํ์ธํ๊ธฐ
$ ttl jaeseong:pet
30 # ๋จ์ ์๊ฐ (์ด)
$ ttl jaeseong:name
-1 # ๋ง๋ฃ ์๊ฐ์ด ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ
$ ttl pjs:name
-2 # ํค๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋ ๋ง๋ฃ๋ ๊ฒฝ์ฐ
โ
๋ชจ๋ ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ
$ flushall
3. Redis์์ Key ๋ค์ด๋ฐ ์ปจ๋ฒค์
Redis์์ ํค ์ด๋ฆ์ ์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ค์.
ํ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ฝ๋ก (:)์ ์ฌ์ฉํ์ฌ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ๋ถ
- users:100:profile
โ users๋ ๋ฐ์ดํฐ์ ์นดํ ๊ณ ๋ฆฌ(์ฌ์ฉ์), 100์ ์ฌ์ฉ์ ID(PK), profile์ ํ๋กํ ์ ๋ณด - products:123:details
โ products๋ ๋ฐ์ดํฐ์ ์นดํ ๊ณ ๋ฆฌ(์ํ), 123์ ์ํ ID(PK), details๋ ์ํ์ ์ธ๋ถ์ฌํญ
์ด๋ฅผ ํตํด ๊ฐ๋ ์ฑ, ์ผ๊ด์ฑ, ํ์ฅ์ฑ, ๊ฒ์๊ณผ ํํฐ๋ง์์ ์ฉ์ด์ฑ์ ์ป์ ์ ์๋ค.
์บ์ฑ ์ ๋ต: Cache Aside, Write Around
1. ์บ์(Cache)์ ์บ์ฑ(Caching)์ ๊ฐ๋
์บ์: ์๋ณธ ์ ์ฅ์๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ์์ ์ ์ฅ์๋ฅผ ์๋ฏธ
์ผ๋ฐ์ ์ผ๋ก ์บ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ๋์คํฌ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค.
์บ์ฑ: ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์๋ฏธ
2. ์บ์ฑ ์ ๋ต: Cache Aside์ Write Around
Cache Aside ์ ๋ต (Lazy Loading)
๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์บ์์์ ๋จผ์ ํ์ธํ๊ณ , ์บ์๊ฐ ์์ผ๋ฉด DB์์ ์กฐํํ์ฌ ์บ์์๋ ์ ์ฅํ๋ ๋ฐฉ์
Lazy Loading ๋๋ Look Aside ์ ๋ต์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ผ๋ก ์๋
- ์ด๊ธฐ ์ํ: ์บ์์ DB ๋ชจ๋ ๋น์ด์๋ค.
- ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค ํ ๋, ์บ์์์ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ค.
- ์ด๋, ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
- DB์์ ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ ํ ์๋ตํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์กฐํํ๋ฉด ์บ์์์ ๋ฐ๋ก ์๋ต์ด ๊ฐ๋ฅ(์บ์ ํํธ)
- Cache Hit: ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฐ๋ก ์บ์์์ ๋ฐ์ดํฐ ์กฐํ
- Cache Miss: ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ ์บ์์ ์ ์ฅ
Write Around
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋(์ฐ๊ธฐ ์์ - ์ ์ฅ, ์์ , ์ญ์ ) DB์๋ง ์ ์ฅํ๊ณ , ์บ์์๋ ์ ์ฅํ์ง ์๋ ๋ฐฉ์
๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์บ์๊ฐ ๋น์ด ์๋ค๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ ๋ค ์๋ตํ๋ ๋ฐฉ์
- ์ฐ๊ธฐ: ๋ฐ์ดํฐ๋ฅผ DB์๋ง ์ ์ฅํ๊ณ , ์บ์์๋ ์ ์ฅํ์ง ์๋๋ค.
- ์กฐํ: ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ , ์์ผ๋ฉด DB์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ์บ์์๋ ์ ์ฅํ๋ค.
ํ๊ณ์
1. ์บ์๋ ๋ฐ์ดํฐ์ DB ๋ฐ์ดํฐ ๋ถ์ผ์น
- ๋ฌธ์ : ์บ์์ DB์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์์ ์ ์๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ฐ์ดํฐ ์์ ์ ์บ์๋ฅผ ๋์์ ๊ฐฑ์ ํ๋ ค๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฏ๋ก, ์ผ๊ด์ฑ์ ํฌ๊ธฐํ๊ณ ์ฑ๋ฅ ํฅ์์ ์ฐ์ ์ํ ์ ์๋ค. ์บ์์ DB์ ๋ถ์ผ์น๋ฅผ ์ต์ํํ๊ธฐ ์ํด TTL์ ์ฌ์ฉํ์ฌ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์บ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ค.
2. ์บ์ ๊ณต๊ฐ ๋ถ์กฑ
- ๋ฌธ์ : ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์บ์์ ์ ์ฅ ์ฉ๋์ด ์ ํ์
- ํด๊ฒฐ ๋ฐฉ๋ฒ: TTL์ ์ฌ์ฉํ์ฌ ์์ฃผ ์ฌ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๋ง๋ฃ๋๊ฒ ์ค์ ํ๊ณ , ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ๋ง ์บ์์ ์ ์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ณ ๋ ค์ฌํญ
๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค.
- SQL ํ๋(์ด๊ฑธ ๋จผ์ ๊ณ ๋ คํ์): ๊ธฐ์กด ์์คํ ๋ด์์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ
- ์บ์ ์๋ฒ ํ์ฉ (Redis ๋ฑ)
- ๋ ํ๋ฆฌ์ผ์ด์ (Master/Slave ๊ตฌ์กฐ)
- ์ค๋ฉ
- DB ์ค์ผ์ผ์ (CPU, Memory, SSD ๋ฑ ํ๋์จ์ด ์ ๊ทธ๋ ์ด๋)
์ค์ต
์ค๋ฅธ์ชฝ ์๋ ์๊ฐ์ ๋ณด๋ฉด 3.40s -> 1.93s -> 1.2s๋ก ์บ์ฑ ์ฒ๋ฆฌ๋ฅผ ํตํด ์๊ฐ์ด ๊ฐ์ํ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํ๋ค.



'๐ผ ๋ฐฑ์ค๋ > database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ (1) | 2023.12.22 |
---|