Redis
์ ๊ถ๊ธํ๊ฒ ๋์๋๊ฐ?
๋น๊ทผ๋ง์ผ python ์น/์๋ฒ ๊ฐ๋ฐ์์๊ฒ ์๊ตฌํ๋ ๊ธฐ์ ์์ ๋ด https://boards.greenhouse.io/daangn/jobs/4300805003
์ด๋ฐ ์ผ์ ํด์
๋จธ์ ๋ฌ๋ ์ด๋๋ฏผ ์น/์๋ฒ ๊ฐ๋ฐ
๋จธ์ ๋ฌ๋ ๊ธฐ๋ฅ์ ์น์์ ํ ์คํธ ํ์ธ
๋ฐ์ดํฐ ํ์/์์ง UI
๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ
๋จธ์ ๋ฌ๋ ๊ธฐ๋ฅ ๋ด๋ถ API ๊ฐ๋ฐ
์ด๋ฐ ๋ถ์ ์ฐพ์์
Python, SQL ์ธ์ด์ ๋ฅ์ํ ๋ถ
CSS, Javascript ์น ํ๋ก ํธ ๊ฐ๋ฐ ๊ฒฝํ
Redis, memcache๋ฅผ ํ์ฉํ ๊ฐ๋ฐ ๊ฒฝํ
๋น๋๊ธฐ ์์ ๊ฐ๋ฐ ๊ฒฝํ (์: Celery)
gRPC / REST API ๊ตฌํ ๋ฅ๋ ฅ
๋ฅ๋ฌ๋์ ๋ํ ์ดํด ์ด๋ฐ ๋ถ์ด๋ผ๋ฉด ๋ ์ข์์!
๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ์ฌ์ฉ์ ์๋น์ค์ ์ ์ฉ
Redis๋? (REmote Dictionary Server)
Remote์ ์์นํ
ํ๋ก์ธ์ค๋ก ์กด์ฌํ๋
In-Memory ๊ธฐ๋ฐ์ : ๋ณดํต ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ฉด์ RDBMS์ ์บ์ ์๋ฃจ์ ์ผ๋ก ์ฌ์ฉ๋จ(RDBMS์ read ๋ถํ ์ค์)
"ํค-๊ฐ" ๊ตฌ์กฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ : ๋น๊ด๊ณํ์ด๋ฉฐ, ํค-๊ฐ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ฟผ๋ฆฌ ์์ด๋ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ ์๋ค.(NoSQL)
Memcached์์ ์ฐจ์ด(๊ฑฐ์ ์ ์ฌํจ)
Memcached์ ํน์ง
์ฒ๋ฆฌ์๋๊ฐ ๋น ๋ฅด๋ค - ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋ฏ๋ก ๋น ๋ฅด๋ค. ์ฆ, ์๋๊ฐ ๋๋ฆฐ Disk๋ฅผ ๊ฑฐ์น์ง ์๋๋ค
๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋ค.
๋น์ฐํ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๊ฑฐ๋ ์ฅ๋น๊ฐ shutdown๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค
๋ง๋ฃ์ผ์ ์ง์ ํ์ฌ ๋ง๋ฃ๊ฐ ๋๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
์ด๋ฆ์์๋ ๋๊ปด์ง๋ฏ์ด cached์ด๋ค.
์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ
๋ง๋ฃ๊ฐ ๋์ง ์๋๋ผ๋ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉด LRU(Least recently used) ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
LRU : ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ ์ญ์
์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ค. - ๋น์ฐํ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋ฏ๋ก ๋น ๋ฅด๋ค. ์ฆ, ์๋๊ฐ ๋๋ฆฐ Disk๋ฅผ ๊ฑฐ์น์ง ์๋๋ค.
์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๋ค. - ๋น์ฐํ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ+Disk์ ์ ์ฅ๋๋ค. ๊ทธ๋ฌ๋, ์๋๋ Memcached์ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋๋ค. - ๋น์ฐํ ํ๋ก์ธ์ค๊ฐ ์ฃฝ๊ฑฐ๋ ์ฅ๋น๊ฐ Shutdown๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ+Disk์ ์ ์ฅ๋๋ค. - ํ๋ก์ธ์ค๊ฐ ์ฃฝ๊ฑฐ๋ ์ฅ๋น๊ฐ Shutdown๋๋๋ผ๋ Data์ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ง๋ฃ์ผ์ ์ง์ ํ์ฌ ๋ง๋ฃ๊ฐ ๋๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค. - ์ด๋ฆ์์๋ ๋๊ปด์ง๋ฏ์ด Cache์ด๋ค
๋ง๋ฃ์ผ์ ์ง์ ํ์ฌ ๋ง๋ฃ๊ฐ ๋๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค. - ๋์ผํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ - ๋ง๋ฃ๊ฐ ๋์ง ์์๋๋ผ๋ ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ผ๋ฉดLRU(Least recently used) ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
์ ์ฅ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฌ์ฉ ํ์ง ์๋๋ค. - ๋ช ์์ ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
๋ฌธ์์ด๋ง ์ง์
๋ฌธ์์ด, Set, Sorted Set, Hash, List๋ฑ์ ๋ค์ํ Data Type์ ์ง์.
Redis์ ํน์ง
key-value store
๋ ๋์ค๋ ๊ฑฐ๋ํ ๋งต(Map) ๋ฐ์ดํฐ ์ ์ฅ์์ ๋๋ค. Key์ value๊ฐ ๋งคํ๋ ๋จ์ํ ๋งต ๋ฐ์ดํฐ ์ ์ฅ์๋ก์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋์ค์ ์ฝ๊ณ ํธํ๊ฒ ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค. ์ฅ์ ์ ์ตํ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ธ ๋ฐ ์๊ณ ๋จ์ ์ Key-value ํํ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ๋์ค ์์ฒด๋ด์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ด๋ ต๋ค๋ ์ ์ ๋๋ค.
๋ค์ํ ๋ฐ์ดํฐ ํ์
Key๋ก ์ฐธ์กฐ๋๋ Value ํ์ ์ ๋ค์ํ๊ฒ ์ง์ ํ์ฌ ์ ์ฅํ ์ ์์ต๋๋ค. List, String, Set, Sorted set ๋ฑ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ์ฌ ์์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
String
์ผ๋ฐ์ ์ธ ๋ฌธ์์ด๋ก ์ต๋ 512mbyte ๊ธธ์ด๊น์ง ์ง์ํ๋ค. Text ๋ฌธ์์ด๋ฟ๋ง ์๋๋ผ Integer์ ๊ฐ์ ์ซ์๋ JPEG ๊ฐ์ Binary File๊น์ง ์ ์ฅํ ์ ์๋ค.
Set
set์ String์ ์งํฉ์ด๋ค. ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ํ๋์ Value ๋ด์ ๋ฃ์ ์ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ฉฐ ๋ธ๋ก๊ทธ ํฌ์คํธ์ ํ๊ทธ(Tag) ๋ฑ์ ์ฌ์ฉ๋ ์ ์๋ค. ์ฌ๋ฏธ์๋ ์ ์ set ๊ฐ์ ์ฐ์ฐ์ ์ง์ํ๋๋ฐ, ์งํฉ์ธ ๋งํผ ๊ต์งํฉ, ํฉ์งํฉ, ์ฐจ์ด(Differences)๋ฅผ ๋งค์ฐ ๋น ๋ฅธ ์๊ฐ ๋ด์ ์ถ์ถํ ์ ์๋ค.
์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ง ์๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๋ฒ ์ ์ฅํ๋ฉด ์ต์ข ํ๋ฒ๋ง ์ ์ฅ๋๋ค. ์ด๊ฑธ ์ฌ์ฉํ์ ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๋ค ๊ฐ๊ณ ์ฌ ์ ์๋ ๋ช ๋ น์ด ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
Sorted Set
set์ โscoreโ๋ผ๋ ํ๋๊ฐ ์ถ๊ฐ๋ ๋ฐ์ดํฐ ํ์ผ๋ก score๋ ์ผ์ข ์ โ๊ฐ์ค์นโ ์ ๋๋ก ์๊ฐํ๋ฉด ๋๋ค. sorted set์์ ๋ฐ์ดํฐ๋ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ด๋ถ ์ ๋ ฌ๋๋ฉฐ, ์ ๋ ฌ์ด ๋์ด์๋ ๋งํผ score ๊ฐ ๋ฒ์์ ๋ฐ๋ฅธ ์ฟผ๋ฆฌ, top Rank์ ๋ฐ๋ฅธ query ๋ฑ์ด ๊ฐ๋ฅํ๋ค.
Hashes
hash๋ value ๋ด์ field/string value ์์ผ๋ก ์ด๋ฃจ์ด์ง ํ ์ด๋ธ์ ์ ์ฅํ๋ ๋ฐ์ดํ ๊ตฌ์กฐ์ฒด์ด๋ค. RDBMS์์ PK 1๊ฐ์ string ํ๋ ํ๋๋ก ์ด๋ฃจ์ด์ง ํ ์ด๋ธ์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค.
List
list๋ string๋ค์ ์งํฉ์ผ๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ ํํ๋ set๊ณผ ์ ์ฌํ์ง๋ง, ์ผ์ข ์ ์๋ฐฉํฅ Linked list๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. List ์๊ณผ ๋ค์์ PUSH/POP ์ฐ์ฐ์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ ์ ์๊ณ , ์ง์ ๋ Index๊ฐ์ ์ด์ฉํ์ฌ ์ง์ ๋ ์์น์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ ์ ์๋ค.
Persistence(Disk์ ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฉด์ ์๊ธด ์์์ฑ)
Redis๋ ๋ฐ์ดํฐ๋ฅผ disk์ ์ ์ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Redis๋ ์๋ฒ๊ฐ shutdown๋ ํ์ restart ํ๋๋ผ๋ disk์ ์ ์ฅํด๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ์ด์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์์ต๋๋ค. redis์ ๋ฐ์ดํฐ๋ฅผ disk์ ์ ์ฅํ๋ ๋ฐฉ์์ snapshot, AOF ๋ฐฉ์์ด ์์ต๋๋ค.
Snapshot : ์ค๋ ์ท์ RDB์์๋ ์ฌ์ฉํ๊ณ ์๋ ์ด๋ค ํน์ ์์ ์ ๋ฐ์ดํฐ๋ฅผ DISK์ ์ฎ๊ฒจ๋ด๋ ๋ฐฉ์์ ๋ปํฉ๋๋ค. Blocking ๋ฐฉ์์ SAVE์ Non-blocking ๋ฐฉ์์ BGSAVE ๋ฐฉ์์ด ์์ต๋๋ค.
AOF : Redis์ ๋ชจ๋ write/update ์ฐ์ฐ ์์ฒด๋ฅผ ๋ชจ๋ log ํ์ผ์ ๊ธฐ๋กํ๋ ํํ์ ๋๋ค. ์๋ฒ๊ฐ ์ฌ์์ํ ์ write/update๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฌ์คํ, ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํฉ๋๋ค.
๋ ๋์ค ๊ณต์๋ฌธ์์์์ ๊ถ์ฅ์ฌํญ์ RDBMS์ rollback ์์คํ ๊ฐ์ด ๋ ๋ฐฉ์์ ํผ์ฉํด์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ฃผ๊ธฐ์ ์ผ๋ก snapshot์ผ๋ก ๋ฒก์ ํ๊ณ ๋ค์ snapshot๊น์ง์ ์ ์ฅ์ AOF ๋ฐฉ์์ผ๋ก ์ํํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด cache ๋ก ์ฐ์ผ ๋๋ ์ธ์ ?
์๋น์ค ์ฌ์ฉ์๊ฐ ์ฆ๊ฐํ์ ๋, ๋ชจ๋ ์ ์ ์ ์์ฒญ์ DB ์ ๊ทผ์ผ๋ก๋ง ์ฒ๋ฆฌํ๊ฒ ๋๋ค๋ฉด DB ์๋ฒ์ ๋ฌด๋ฆฌ๊ฐ ๊ฐ ์ ๋ฐ์ ์๋ค. ๋ฌผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ์ฅ์ ์๋ ๋ณ๊ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์๋ ์์ง๋ง, ์์ฒญ์ด ์ฆ๊ฐํ๋ ์ํฉ์์๋ ๊ธฐ์กด ์ฑ๋ฅ์ ๊ธฐ๋ํ๊ธฐ ํ๋ค๋ค.
์ด๋ฐ ๋งฅ๋ฝ์์ ์บ์๋ ๋์ค์ ์์ฒญ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํด๋์๋ค๊ฐ ๋นจ๋ฆฌ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๋ณดํต ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ Redis Cache ๋ ๋ฉ๋ชจ๋ฆฌ ๋จ (In-Memory) ์ ์์นํ๋ค. ๋ฐ๋ผ์ ๋์คํฌ๋ณด๋ค ์์ฉ๋ ฅ(์ฉ๋) ์ ์ ์ง๋ง ์ ๊ทผ ์๋๋ ๋น ๋ฅด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ์บ์๋ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
์ผ๋ฐ์ ์ธ ํจํด :
Look aside cache
์ฒ๋ฆฌ์์
2. Cache์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ทธ๊ฑธ ๊บผ๋ด์ฃผ๋๋ฐ, ๋ง์ฝ ์์ผ๋ฉด 3. DB์์ ์ฝ์ด์ -> ๋จผ์ ์บ์์ ์ ์ฅํ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๋ ค์ค
Write Back
๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ๋ถ ์ ์ฅํด๋์๋ค๊ฐ ํน์ ์์ ๋ง๋ค ํ๋ฒ์ ์บ์ ๋ด ๋ฐ์ดํฐ๋ฅผ DB์
insert
ํ๋ ๋ฐฉ๋ฒ์ด๋ค.insert
๋ฅผ 1๊ฐ์ฉ 500๋ฒ ์ํํ๋ ๊ฒ๋ณด๋ค 500๊ฐ๋ฅผ ํ๋ฒ์ ์ฝ์ ํ๋ ๋์์ด ํจ์ฌ ๋น ๋ฆ์์ ์ ์ ์๋ฏ์ด, write back๋ฐฉ์๋ ์ฑ๋ฅ๋ฉด์์ ๋ค์ณ์ง๋ ๋ฐฉ์์ ์๋๋ค. ํ์ง๋ง ์ด์จ๋ ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ ๊ธฐ๊ฐ๋์์ ์ ์งํ๊ณ ์์ด์ผํ๋๋ฐ, ์ด๋ ์ด๊ฑธ ์ ์งํ๊ณ ์๋ storage๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ฏ๋ก ์๋ฒ ์ฅ์ ์ํฉ์์ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค. ๊ทธ๋์ ๋ค์ ์ฌ์ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ ๊ทน๋จ์ ์ผ๋ก heavyํ ๋ฐ์ดํฐ์์write back
๋ฐฉ์์ ๋ง์ด ์ฌ์ฉใ ๋๋ค.
ANIS C ๋ก ์์ฑ
C์ธ์ด๋ก ์์ฑ๋์ด Java์ ๊ฐ์ด ๊ฐ์๋จธ์ ์์์ ๋์ํ๋ ์ธ์ด์์ ๋ฐ์ํ๋ ์ฑ๋ฅ ๋ฌธ์ ์ ๋ํด ์์ ๋กญ์ต๋๋ค. ๊ณง๋ฐ๋ก ๊ธฐ๊ณ์ด๋ก ๋์ํ์ง ์๊ณ ์ด๋ค ๊ฐ์์ ๋จธ์ ์์์ ์ธํฐํ๋ฆฌํฐ ๋ ์ธ์ด๋ก ๊ฐ๋ํ๋ ๊ฒฝ์ฐ์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) ๋์์ ๋ฐ๋ฅธ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ฐ์ ์์ต๋๋ค. ํ์ง๋ง C์ธ์ด๋ก ์์ฑ๋ Redis๋ ์ด๋ฐ ์ด์์์ ์์ ๋กญ๋ค.
์๋ฒ ์ธก ๋ณต์ ๋ฐ ์ค๋ฉ์ ์ง์
์ฝ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ์๋ฒ ์ธก ๋ณต์ ๋ฅผ ์ง์ํฉ๋๋ค.
์ฐ๊ธฐ ์ฑ๋ฅ ์ฆ๋๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ์ธก ์ค๋ฉ์ ์ง์ํฉ๋๋ค.
์ค๋ฉ : "์กฐ๊ฐ๋ด๋ค"๋ผ๋ ๋ป์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ๊ธฐ๋ฒ ์ค ํ๋์ด๋ฉฐ, ์ ์ฒด ๋คํธ์ํฌ๋ฅผ ๋ถํ ํ ๋ค ํธ๋์ญ์ ์ ์์ญ๋ณ๋ก ์ ์ฅํ๊ณ ์ด๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๋ธ๋ก์ฒด์ธ์ ํ์ฅ์ฑ์ ๋ถ์ฌํ๋ ์จ์ฒด์ธ ์๋ฃจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋๋ผ๋ ๋จ์๋ก ๋๋ ์ ์ ์ฅ ๋ฐ ์ฒ๋ฆฌ
Atomic ํ๋ค
์น๊ตฌ ๋ฆฌ์คํธ๋ฅผ ๊ด๋ฆฌํ ๋ ๋ฐ์ดํฐ๋ฅผ key-value ํํ๋ก ์ ์ฅํด์ผ ํ๋ค๋ฉด
๊ฐ์ ์น๊ตฌ ๋ฆฌ์คํธ๋ฅผ ์ฝ์ ํ, ์๋ก ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์์ ๋ฆฌ์คํธ์ ์๋ก ๋ค๋ฅธ ์น๊ตฌ๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด๋ฐ ์ํฉ์์ ์น๊ตฌ ๋ฆฌ์คํธ์ ์ต์ข ์ํ๋ -> ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ถ๊ฐํ ์ฌ๋ A, B ๊ฐ ์ ๋ถ ๋ฐ์๋์ง ์์ ์ ์๋ค.
T1[
์น๊ตฌ B
์ถ๊ฐ] -> T2[์น๊ตฌ C
์ถ๊ฐ] -> T1[B
์ถ๊ฐํ๊ฑธ ์ต์ข ์ํ์ ๋ฐ์(์ฐ๊ธฐ)] -> T2[C
์ถ๊ฐํ๊ฑธ ์ต์ข ์ํ์ ๋ฐ์(์ฐ๊ธฐ)]๊ฐ ํธ๋์ ์ ์์๋ ์ด๋ฐ ์์๋ก ๋ก์ง์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๊ทธ๋ผ ์ฐ์ฐํ ํ์ด๋ฐ์ 3๋ฒ์งธ์ 4๋ฒ์งธ ํ๋ก์ธ์ค๊ฐ ์์๋๋ก ์งํ๋๋ฉด์ ๋ฆฌ์คํธ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๊ณ , ์ต์ข ์ํ์์๋ ๊ฒฐ๊ตญ context switching ๋๋ฌธ์ T1 ๊ณผ T2 ๋ ์ค ๋ญ๊ฐ ๋จผ์ ๋ฐ์ํ ์ง ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์ ์น๊ตฌ๋ฆฌ์คํธ๊ฐ
[A,B]
or[A,C]
๋๋ค์ผ๋ก ์ ์ง๋ ์ ์๋ค.
Redis ์๋ฃ๊ตฌ์กฐ๋ Atomic ํ๋ค๋ ํน์ง
๋๋ฌธ์ ์ด๋ฐ race condition
์ ํผํ ์ ์๋ค. ์ฆ, Redis Transaction ์ ํ๋ฒ์ ๋ฑ ํ๋์ ๋ช
๋ น๋ง ์ํํ ์ ์๋ค. ์ด์ ๋ํ์ฌ single-threaded ํน์ฑ
์ ์ ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์คํ ๋ฆฌ์ง ํ๋ซํผ๋ณด๋ค๋ ์ด์๊ฐ ๋ํ๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ด ํน์ง์ด ๋๋ธํด๋ฆญ ๊ฐ์ ๋์์ผ๋ก ๊ฐ์ ๋ฐ์ดํฐ๊ฐ 2๋ฒ์ฉ ๋ค์ด๊ฐ๊ฒ ๋๋ ๋ถ์์ฌ๋ ๋ง์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
๋ฐ๋ผ์ ๋ ๋์ค๋ remote data storage
๋ก์ ์ฌ๋ฌ ์๋ฒ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ๋ณด๊ณ ์ถ์ ๋ ๋ง์ด ์ฌ์ฉํ๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ธ์ฆ ํ ํฐ์ ์ ์ฅํ๊ฑฐ๋ ์ ์ API limit ์ ๋๋ ์ํฉ ๋ฑ์์ ๋ ๋์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค.
Redis ์ํคํ
์ณ
Redis Topology
๋ ๋์ค๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Master-slave ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํด์ ์ด์ํ ์ ์์ต๋๋ค. ์ด master-slave ๊ฐ์ ๋ณต์ ๋ non-blocking ์ํ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
Redis Sharding
๋ ๋์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ฉํ์ฌ ๋ ๋์ค์ read์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค. ์๋ก๋ค์ด #1~#999, #1000~#1999 ID ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๋์ด์ ๋ฐ์ดํฐ์ ์ฉ๋์ ํ์ฅํ๊ณ ๊ฐ ์๋ฒ์ ์๋ Redis์ ๋ถํ๋ฅผ ๋๋์ด ์ค์ผ ์ ์์ต๋๋ค.
Redis Clustering
๋ ๋์ค๋ ์ด์ ์๋ Clustering์ ์ง์ํ์ง ์์์ง๋ง Clustering์ ์ง์ํ๋ฉด์ ๋๋ถ๋ถ์ ํ์ฌ๊ฐ Redis๋ฅผ ํด๋ฌ์คํฐ๋ก ๋ฌถ์ด์ ๊ฐ์ฉ์ฑ ๋ฐ ์์ ์ฑ์๋ ์บ์ ๋งค๋์ ธ๋ก์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. Single Instance๋ก์ ๋ ๋์ค๋ฅผ ์ฌ์ฉํ ๋๋ Sharding์ด๋ Topology๋ก์ ์ปค๋ฒํด์ผํ๋ ๋ถ๋ถ์ Clustering์ ์ด์ฉํจ์ผ๋ก์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋ ๋ฐ ์ข ๋ ์์ํด์ก๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
Cluster ๋
๊ฐ๊ธฐ ๋ค๋ฅธ ์๋ฒ๋ฅผ ํ๋๋ก ๋ฌถ์ด ํ๋์ ์์คํ ์ฒ๋ผ ๋์ํ๊ฒ ํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ์๊ฒ ๊ณ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํ๋ ๊ฒ
Point - ํน์ ์๋ฒ์ ์ฅ์ ๊ฐ ์ผ์ด๋๋๋ผ๋ ๋ฐฑ์ ์๋ฒ์ ๋ณด์์ ํตํด ๋ฐ์ดํฐ์ ์ ์ค์์ด ์๋น์ค๋ฅผ ๊ณ์ ์ด์ด๋๊ฐ ์ ์์.
์ถ์ฒ: https://velog.io/@swhan9404/Redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
Last updated