1) Redis (Remote Dictionary Server)
(1) ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- ๋ณดํต ์๋น์ค ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ๊ฒ ๋๋ ๊ณผ๋ํ DB ์ฐ๊ฒฐ๊ณผ ๋ฐฉ๋ํด์ง๋ DB์ ์ฌ์ด์ฆ๋ก ์ธํด ๋ฐ์ํ๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ์บ์๋ฅผ ์ฌ์ฉํ๋ค.
- ์บ์๋ ํ๋ฐ์ฑ ๋ฐ์ดํฐ๋ก ์ฉ๋์ด ํฌ์ง ์์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๋ฏ๋ก ์์ฃผ ์์ฒญ๋๋ ๋ฐ์ดํฐ๋ง์ ์ ์ฅํ์ฌ ํ์ฉํ๋ค.
- ํ๋ ํ ์ ๋ฒ์น์ ๋ฐ๋ฅด๋ฉด ์ ์ฒด ์์ฒญ์ 80%๋ ๊ณ ์ 20%์ ์ฌ์ฉ์์ ์ํด ๋ฐ์ํ๊ฒ ๋๋๋ฐ ๋๋ถ๋ถ์ ์์ฒญ์ ์ ์ ์์ ์ฌ์ฉ์์ ์ํด ๋ฐ์ํ๋ ๋น์ทํ ์์ฒญ์ผ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์, ์ด๋ฌํ ์์ฒญ ๋ฐ์ดํฐ๋ค์ ์บ์๋ก ์ ์ฅํ์ฌ ๋น ๋ฅด๊ฒ ์ฝ๊ณ ์ธ ์ ์๋ค๋ฉด ์ข์ ์ฑ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ ์ ์๊ฒ ๋๋ค.
- ์ด๋ฌํ ์ด์ ๋ก ๊ณ ๊ฐ์ฉ์ฑ In-Memory ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Redis๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๋ค.
(2) Redis๋
- Redis๋ “Remote Dictinary Server”์ ์ฝ์๋ก Key-Value ํ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ NoSQL์ด๋ค.
- ๋ฌผ๋ก , Cassandra๋ HBase์ ๊ฐ์ด NoSQL DBMS๋ก ๋ถ๋ฅ๋๊ธฐ๋ ํ์ง๋ง MemCached์ ๊ฐ์ In-Memory ์๋ฃจ์ ์ผ๋ก ๋ถ๋ฆฌ๋๊ธฐ๋ ํ๋ค.
- ๋์คํฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก ๋น ๋ฅธ ์ฝ๊ธฐ (Read)์ ์ฐ๊ธฐ (Write) ์๋๋ฅผ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก RDBMS์ ์บ์ ์๋ฃจ์ ์ผ๋ก ์ฌ์ฉ๋์ด์ง๋ค.
- ๋ผ์ธ, ์ผ์ฑ์ ์, ๋ค์ด๋ฒ, StackOverflow, ์ธ์คํ๊ทธ๋จ ๋ฑ ์ฌ๋ฌ IT ๋๊ธฐ์ ์์๋ ์ฌ์ฉํ๋ ๊ฒ์ฆ๋ ์คํ์์ค ์๋ฃจ์ ์ด๋ค.
(3) Redis ํน์ง
โ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์
- ๋ค๋ฅธ In-Memory ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Memcached์๋ ๋ค๋ฅด๊ฒ String, List, Set, Sorted Set, Hash ๋ฑ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ค.
- ์ฃผ๋ก, String๊ณผ Sorted Set์ ๋ง์ด ์ฌ์ฉํ๋ค.
โก ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ฐ์ฑ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๋๋ก ๋์คํฌ์ ์ ์ฅํ๋ Persistent (์๊ตฌ ๋ณด๊ด) ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
โข Single Thread๋ก ๋์
- ํ ๋ฒ์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ํํ ์ ์๋ค.
- ํ ํด๋ผ์ด์ธํธ๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ์์ฒญํ๋ฉด ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ฌผ๋ก , ๋ฉํฐ ์ค๋ ๋๋ก ๋์ํ๊ธฐ ์ํ ๋ชจ๋์ ์ค์นํ์ฌ ๋ฉํฐ ์ค๋ ๋๋ก ๋์ํ๊ฒ๋ ํ ์ ์๋ค.
โฃ HA ๊ตฌ์ฑ
- ์ฌ๋ฌ ๋์ ์๋ฒ๋ก Master-Slave ํํ๋ก ๊ตฌ์ฑํ์ฌ ๋ฐ์ดํฐ์ ๋ถ์ค ์ํ์ ์์ ์ฃผ๋ฉฐ Snapshot ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ ํด๋น ์์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์๋ค.
(4) ์ฌ์ฉ ์ฉ๋
โ Message Queue (Message Broker)
- Redis๋ Publish-Subscribe ํจํด์ ์ฌ์ฉํ์ฌ 1:N ํํ์ ๋ฉ์ธ์ง ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ ์ ์๊ณ , ์ด๋ฅผ ํตํด ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์์ ๋ฉ์ธ์ง๋ฅผ ํจ์จ์ ์ผ๋ก ์ ํํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค.
→ Publish/Subscribe ๊ตฌ์กฐ์์ ์ฌ์ฉ๋๋ ํ๋ฅผ ์ผ๋ฐ์ ์ผ๋ก Topic ์ด๋ผ๊ณ ํ๋ค.
โก Caching
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ์ฅ์์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๋ ๋ฐ์ด๋ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์บ์ ์๋ฒ๋ก ํ์ฉํ ์ ์๋ค.
- Redis๋ฅผ ์บ์ ์๋ฒ๋ก ํ์ฉํจ์ผ๋ก์จ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ์์คํ ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
โข Lock & Synchronization
- Redis๋ ๋ถ์ฐ ์์คํ ์์ ๋๊ธฐํ์ ์ ๊ธ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ๋ ์ ์๊ณ , ๋ํ์ ์ผ๋ก Lettuce, Redisson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค.
โฃ Session Store
- Redis๋ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๊ณ , ๋ถ์ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ธ์ ์ ๋ณด๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ๋น ๋ฅด๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ๋์์ค๋ค.
(5) Redis์์ ์ง์ํ๋ ๋ฐ์ดํฐ ํ์ [Collection]
- Key๋ก ์ฐธ์กฐ๋๋ Value ํ์ ์ ๋ค์ํ๊ฒ ์ง์ ํ์ฌ ์ ์ฅํ ์ ์๊ณ , Value ํ์ ์ผ๋ก๋ String, List, Set, Sorted Set, Hash ํ์ ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ์ ์ฅํ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ Redis๋ ์๋์ 5๊ฐ ๋ฐ์ดํฐ ํ์ ์ค์์ String ํ์ ๋ง Key-Value ๋ฐฉ์์ด๊ณ , ๋ค๋ฅธ 4๊ฐ๋ Key ํ๋์ ์ฌ๋ฌ ๊ฐ ๊ฐ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๊ณ Sort ๊ธฐ๋ฅ์ ์ง์ํ๋ ๋ฐ์ดํฐ ํ์ ๋ ์์ด ๋ค๋ฅธ Key-Value ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ณด๋ค ํ์ฉ๋๊ฐ ๋๋ค.
โ String
- ๊ฐ์ฅ ๋จ์ํ Key-Value ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋ฉฐ, ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด๋ก ์ต๋ 512 MB ๊ธธ์ด๊น์ง ์ง์ํ๋ค.
- Text ๋ฌธ์์ด ๋ฟ๋ง ์๋๋ผ Integeer์ ๊ฐ์ ์ซ์๋ JPEG ๊ฐ์ Binary File๊น์ง ์ ์ฅํ ์ ์๋ค.
โก List
- Key ํ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ ์ฅํ ์ ์๊ณ ๊ฐ์ ์ค๋ณต์ด ๊ฐ๋ฅํ๋ฉฐ ์ ๋ ฅ๋ ์์๋ฅผ ์ ์งํ๋ค.
- LinkedList์ ๊ฐ์ ํํ๋ก ์ฒ์๊ณผ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ ๋, ๋์ผํ ์๊ฐ์ด ์์๋๋ค.
- LPUSH, RPUSH, LPOP, RPOP ๋ช ๋ น์ด๋ฅผ ํตํด List ํ์์ผ๋ก Redis ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โข Set
- Key ํ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ ์ฅํ ์ ์๊ณ ๊ฐ์ ์ค๋ณตํ ์ ์์ผ๋ฉฐ ์ ๋ ฅ ์์๋ฅผ ์ ์งํ์ง ์๋๋ค.
- HashSet์ ๊ฐ์ ํํ๋ก ์ ์ฅํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ์ค๋ณต์ ์ผ๋ก ์ ์ฅํ์ง ์๋๋ค.
- SADD, SREM, SUNIOM ๋ช ๋ น์ด๋ฅผ ํตํด ์ผ๋ฐ์ ์ธ Set ์๋ฃ๊ตฌ์กฐ ํ์์ฒ๋ผ Redis ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ํ, ์งํฉ ์ฐ์ฐ์๋ฅผ ์ง์ํ์ฌ ํฉ์งํฉ, ๊ต์งํฉ, ์ฐจ์งํฉ ๋ฑ์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
โฃ Sorted Set
- Key ํ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ ์ฅํ ์ ์๊ณ ๊ฐ์ ์ค๋ณตํ ์ ์์ง๋ง ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ด Sort ๋์ด ์๋ค.
- ZADD, ZREM, ZUNIONSTORE, ZRANK ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ ํ ์ ์๋ค.
โค Hash
- Key ํ๋์ “field-value” ์์ Hash ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- HGET, HSET, HDEL, HGETALL ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ , ์กฐํํ ์ ์๋ค.
[์ฐธ๊ณ ] Persistent ๊ธฐ๋ฅ
- Redis๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Disk์ ์ ์ฅํ๋ Persistent (์๊ตฌ๋ณด๊ด) ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- Memcached์ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ์๋ฒ๊ฐ ์ข ๋ฃ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง๋ง Redis๋ ์๋ฒ๊ฐ ์ข ๋ฃ๋ ํ์ ์ฌ์์ ํ๋๋ผ๋ Disk์ ์ ์ฅํด๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ์ด์ ๋ฉ๋ชจ๋ฆฌ์ Loading ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๋๋ค.
- Redis ์์๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ Disk์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด Snapshot ๋ฐ AOF (Append on file) ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
Snapshot ๋ฐฉ์
- ์๊ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ Disk์ ์ ์ฅํ๋ ๊ฒ์ผ๋ก SAVE์ BGSAVE ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋๋ฐ SAVE๋ Blocking ๊ธฐ๋ฐ์ผ๋ก Redis์ ๋ชจ๋ ๋์์ ์ ์ง์ํค๊ณ ๊ทธ ๋์ Snapshot์ Disk์ ์ ์ฅํ๋ค.
- BGSAVE๋ Non-Blocking ๋ฐฉ์์ผ๋ก ๋ณ๋์ Process๋ฅผ ๋์ด ํ, ๋ช ๋ น์ด ์ํ ๋น์์ ๋ฉ๋ชจ๋ฆฌ Snapshot์ Disk์ ์ ์ฅํ๋ฉฐ ์ ์ฅ ์๊ฐ์ Redis๋ ๋ฉ์ถ์ง ์๊ณ ์ ์์ ์ผ๋ก ๋์ํ๋ค.
[์ฅ์ ]
๋ฉ๋ชจ๋ฆฌ์ Snapshot์ ๊ทธ๋๋ก ๋ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ฌ์์์ Snapshot๋ง Loading ํ๋ฉด ๋๋ฏ๋ก ์ฌ์์ ์๊ฐ์ด ๋น ๋ฅด๋ค.
[๋จ์ ]
Snapshot์ ์ถ์ถํ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉฐ Snapshot์ ์ถ์ถํ ๋ค์, ์๋ฒ๊ฐ Down ๋๋ฉด Snapshot ์ถ์ถ ์ดํ์ ๋ฐ์ดํฐ๋ ์ ์ค๋๋ค.
์ฆ, ๋ฐฑ์ ์์ ์ ๋ฐ์ดํฐ๊น์ง๋ง ์ ์งํ๋ค๋ ๊ฒ์ด๋ค.
AOF (Append On File) ๋ฐฉ์
- Redis์ ๋ชจ๋ Write/Update ์ฐ์ฐ ์์ฒด๋ฅผ ๋ชจ๋ log ํ์ผ์ ๊ธฐ๋กํ๋ ํํ๋ก, ์๋ฒ๊ฐ ์ฌ์์ํ ์ ๊ธฐ๋ก๋ Write/Update ์ฐ์ฐ์ ์์ฐจ์ ์ผ๋ก ์ฌ์คํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ค.
- Operation์ด ๋ฐ์ํ ๋๋ง๋ค, ๋งค๋ฒ Log ํ์ผ์ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ Snapshot ๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ ํน์ ์์ ์ด ์๋๋ผ ํญ์ ํ์ฌ ์์ ๊น์ง์ log๋ฅผ ๊ธฐ๋กํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก Non-Blocking ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
[์ฅ์ ]
log ํ์ผ์ ๋ํด์ append๋ง ํ๊ธฐ ๋๋ฌธ์ log write ์๋๊ฐ ๋น ๋ฅด๊ณ ์ด๋ ์์ ์ ์๋ฒ๊ฐ down๋๋๋ผ๋ ๋ฐ์ดํ ์ ์ค์ด ๋ฐ์ํ์ง ์๋๋ค.
[๋จ์ ]
๋ชจ๋ Write/Update Operation์ ๋ํด์ log ํ์ผ์ ํด๋น ์ฐ์ฐ์ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ log ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ Snapshot ๋ฐฉ์์ ๋นํด ๊ณผ๋ํ๊ฒ ํฌ๊ณ ๋ฐ์ดํฐ ๋ณต๊ตฌ ์, ์ ์ฅ๋ Write/Update Operation์ ๋ค์ Reply ํด์ผ ํ๋ฏ๋ก ์๋ฒ ์ฌ์์ ์๋๊ฐ ๋๋ฆฌ๋ค.
๊ฒฐ๋ก
- Redis ๊ณต์ ๋ฌธ์์์์ ๊ถ์ฅ์ฌํญ์ ๋ ๊ฐ์ง ๋ฐฉ์์ ํผ์ฉํ์ฌ ์ฃผ๊ธฐ์ ์ผ๋ก Snapshot ๋ฐฉ์์ผ๋ก ๋ฐฑ์ ํ๋ ๋ค์ Snapshot ๊น์ง์ ๋ฐฑ์ ์ AOF ๋ฐฉ์์ผ๋ก ์งํํ๋๋ก ๋์ด ์๋ค.
[Reference]
- https://redis.io/docs/about/
- https://engkimbs.tistory.com/869
- https://gongbu-ing.tistory.com/96
- http://redisgate.kr/redis/configuration/redis_overview.php
- https://velog.io/@inhwa1025/Redis-Redis%EB%9E%80-Redis%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%ED%8A%B9%EC%A7%95
- https://aroundck.tistory.com/949
- https://code-lab1.tistory.com/53
'๐จโ๐ป Back End > Redis' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redis ์ค์น ๋ฐ ๋ช ๋ น์ด ์ค์ต (2) | 2023.09.03 |
---|---|
NoSQL์ด๋ ๋ฌด์์ธ์ง ๊ฐ๋จํ๊ฒ ์์๋ณด์! (1) | 2023.09.01 |