NoSQL ์์คํ ํด๋์ค์ ์ํ๋ Redis 7.0 DBMS๊ฐ ์ถ์๋์์ต๋๋ค. Redis๋ ๋ชฉ๋ก, ํด์, ์ธํธ์ ๊ฐ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ํ์์ ๋ํ ์ง์๊ณผ Lua์์ ์๋ฒ ์ธก ์คํฌ๋ฆฝํธ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ ๊ธฐ๋ฅ์ ํตํด ํฅ์๋ ํค/๊ฐ ๋ฐ์ดํฐ ์ ์ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ BSD ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ์ ๊ณต๋ฉ๋๋ค. RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom ๋ฑ ๊ธฐ์ ์ฌ์ฉ์์๊ฒ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ถ๊ฐ ๋ชจ๋์ 2019๋ ๋ถํฐ ๋ ์ RSAL ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ ๊ณต๋์์ต๋๋ค. ์ต๊ทผ ์นจ์ฒด๋ GoodFORM ํ๋ก์ ํธ๋ AGPLv3 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ด๋ฌํ ๋ชจ๋์ ๊ฐ๋ฐฉํ ๋ฒ์ ๊ฐ๋ฐ์ ๊ณ์ํ๋ ค๊ณ ํ์ต๋๋ค.
Memcached์ ๊ฐ์ ์ธ๋ฉ๋ชจ๋ฆฌ ์คํ ๋ฆฌ์ง ์์คํ ๊ณผ ๋ฌ๋ฆฌ Redis๋ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋๊ณ ์ถฉ๋์ด ๋ฐ์ํด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ทธ๋๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ํ๋ก์ ํธ์ ์์ค ์ฝ๋๋ BSD ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Perl, Python, PHP, Java, Ruby ๋ฐ Tcl์ ํฌํจํ์ฌ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ธ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Redis๋ ํ ๋จ๊ณ์์ ๋ช ๋ น ๊ทธ๋ฃน์ ์คํํ ์ ์๋ ํธ๋์ญ์ ์ ์ง์ํ์ฌ ์ฃผ์ด์ง ๋ช ๋ น ์ธํธ ์คํ ์ ์ผ๊ด์ฑ๊ณผ ์ผ๊ด์ฑ(๋ค๋ฅธ ์์ฒญ์ ๋ช ๋ น์ด ๋ฐฉํดํ ์ ์์)์ ๋ณด์ฅํ๊ณ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋กค๋ฐฑํ ์ ์๋๋ก ํฉ๋๋ค. ๋ณํ. ๋ชจ๋ ๋ฐ์ดํฐ๋ RAM์ ์์ ํ ์บ์๋ฉ๋๋ค.
๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ฆ๊ฐ/๊ฐ์, ํ์ค ๋ชฉ๋ก ๋ฐ ์งํฉ ์ฐ์ฐ(ํฉ์งํฉ, ๊ต์ฐจ์ ), ํค ์ด๋ฆ ๋ฐ๊พธ๊ธฐ, ๋ค์ค ์ ํ, ์ ๋ ฌ ๊ธฐ๋ฅ ๋ฑ์ ๋ช ๋ น์ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๊ธฐํํ๋ ๊ฒ๊ณผ ๋์คํฌ์ ๋ณ๊ฒฝ ๋ก๊ทธ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๋ ๊ฐ์ง ์ ์ฅ ๋ชจ๋๊ฐ ์ง์๋ฉ๋๋ค. ๋ ๋ฒ์งธ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ํ ์์ ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๋น์ฐจ๋จ ๋ชจ๋์์ ์ํ๋๋ ์ฌ๋ฌ ์๋ฒ์ ๋ํ ๋ง์คํฐ-์ฌ๋ ์ด๋ธ ๋ฐ์ดํฐ ๋ณต์ ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฑ๋์ด ์์ฑ๋๊ณ ๋ฉ์์ง๊ฐ ๊ตฌ๋ ์ ํตํด ํด๋ผ์ด์ธํธ์ ๋ฐฐํฌ๋๋ "๊ฒ์/๊ตฌ๋ " ๋ฉ์์ง ๋ชจ๋๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Redis 7.0์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ:
- ์๋ฒ ์ธก ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. Lua ์ธ์ด์์ ์ด์ ์ ์ง์ํ๋ ์คํฌ๋ฆฝํธ์ ๋ฌ๋ฆฌ ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌถ์ฌ ์์ง ์์ผ๋ฉฐ ์๋ฒ์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ์ถ๊ฐ ๋ก์ง์ ๊ตฌํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๊ธฐ๋ฅ์ ์๊ตฌ ์ ์ฅ์์ ๋ณต์ ๋ฐ ์ ์ฅ๋๋ ๊ฒ์ ํฌํจํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ ๋ฐ์ดํฐ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จํ์ฌ ๋ถ๊ฐ๋ถํ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ACL์ ๋ ๋ฒ์งธ ๋ฒ์ ์ด ์ ์๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ ์ ์๊ณ ์ฌ๋ฌ ์ ํ๊ธฐ(๊ถํ ์ธํธ)๋ฅผ ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฐ์ธ๋ฉํ๋ ๊ธฐ๋ฅ์ ํตํด ๋ช ๋ น ์ก์ธ์ค์ ๋ํ ๋ค์ํ ๊ท์น ์ธํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ๊ฐ ํค๋ ํน์ ๊ถํ์ผ๋ก ์๋ณ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํน์ ํค ํ์ ์งํฉ์ ์ฝ๊ฑฐ๋ ์ฐ๋ ๊ฒ๋ง์ผ๋ก ์ก์ธ์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- ํด๋ฌ์คํฐ์์ ์คํ๋๋ ๊ฒ์-๊ตฌ๋ ๋ฉ์์ง ๋ฐฐํฌ ํจ๋ฌ๋ค์์ ๋ถํ ๋(์ค๋ฉ๋) ๊ตฌํ์ด ์ ๊ณต๋ฉ๋๋ค. ์ฌ๊ธฐ์ ๋ฉ์์ง๋ ๋ฉ์์ง ์ฑ๋์ด ์ฐ๊ฒฐ๋ ํน์ ๋ ธ๋๋ก ์ ์ก๋ ํ ์ด ๋ฉ์์ง๊ฐ ํฌํจ๋ ๋๋จธ์ง ๋ ธ๋๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค. ์ค๋์์. ํด๋ผ์ด์ธํธ๋ ์น์ ์ ๊ธฐ๋ณธ ๋ ธ๋์ ๋ณด์กฐ ๋ ธ๋์ ์ฐ๊ฒฐํ์ฌ ์ฑ๋์ ๊ตฌ๋ ํจ์ผ๋ก์จ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์ ์ด๋ SSUBSCRIBE, SUNSUBSCRIBE ๋ฐ SPUBLISH ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค.
- ๋๋ถ๋ถ์ ์ํฉ์์ ํ์ ๋ช ๋ น ์ฒ๋ฆฌ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์๋ก์ด ๋ช
๋ น์ด ์ถ๊ฐ๋์์ต๋๋ค:
- ZMPOP, BZMPOP.
- LMํ, BLMํ.
- ์ ์ธํฐ์นด๋, ์ง์ธํฐ์นด๋.
- ๊ฒ์, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- ๋ง๋ฃ ์๊ฐ, PEXPIRETIME.
- EVAL_RO, EVALSHA_RO, SORT_RO.
- ๊ธฐ๋ฅ *, FCALL, FCALL_RO.
- ๋ช ๋ น ๋ฌธ์, ๋ช ๋ น ๋ชฉ๋ก.
- ๋๊ธฐ ์๊ฐ ํ์คํ ๊ทธ๋จ.
- ํด๋ฌ์คํฐ ์ค๋, ํด๋ฌ์คํฐ ๋งํฌ, ํด๋ฌ์คํฐ DELSLOTSRANGE, ํด๋ฌ์คํฐ ADDSLOTSRANGE.
- ๊ณ ๊ฐ ํด๊ฑฐ ๊ธ์ง.
- ACL ๋๋ผ์ด๋ฐ.
- ํ๋์ CONFIG SET/GET ํธ์ถ๋ก ์ฌ๋ฌ ๊ตฌ์ฑ์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์์ต๋๋ค.
- redis-cli ์ ํธ๋ฆฌํฐ์ "-json", "-2", "-scan", "-functions-rdb" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์์ ์ํฅ์ ๋ฏธ์น๋ ์ค์ ๋ฐ ๋ช ๋ น์ ๋ํ ํด๋ผ์ด์ธํธ ์ก์ธ์ค๋ ๋นํ์ฑํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด DEBUG ๋ฐ MODULE ๋ช ๋ น์ ๋นํ์ฑํ๋๊ณ PROTECTED_CONFIG ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ๊ธ์ง๋ฉ๋๋ค. Redis-cli๋ ๋ ์ด์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ๋ช ๋ น์ ๊ธฐ๋ก ํ์ผ์ ์ถ๋ ฅํ์ง ์์ต๋๋ค.
- ์ฑ๋ฅ์ ํฅ์ํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ง์ ๋ถ๋ถ์ ์ต์ ํ๊ฐ ๋์ ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋ฌ์คํฐ ๋ชจ๋๋ฅผ ํ์ฑํํ ๋, ์ฐ๊ธฐ ์ ๋ณต์ฌ ์์ ์ ์ํํ ๋, ํด์ ๋ฐ zset ํค๋ก ์์ ํ ๋ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ํฌ๊ฒ ๊ฐ์ํ์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ํ๋ฌ์ํ๋ ๋ ผ๋ฆฌ๊ฐ ๊ฐ์ ๋์์ต๋๋ค(fsync ํธ์ถ). ํด๋ผ์ด์ธํธ์ ์๋ต์ ๋ณด๋ผ ๋ ๋คํธ์ํฌ ํจํท ๋ฐ ์์คํ ํธ์ถ ์๊ฐ ๊ฐ์๋์์ต๋๋ค. ๋ณต์ ํจ์จ์ฑ์ด ํฅ์๋์์ต๋๋ค.
- Lua ์คํฌ๋ฆฝํธ ์คํ ํ๊ฒฝ์ ์ทจ์ฝ์ CVE-2022-24735๊ฐ ์์ ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์ ์ Lua ์ฝ๋๋ฅผ ๋์ฒดํ๊ณ ๋ ๋์ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ฅผ ํฌํจํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ปจํ ์คํธ์์ ์คํํ ์ ์์ต๋๋ค.
- NULL ํฌ์ธํฐ ์ญ์ฐธ์กฐ๋ก ์ธํด redis-server ํ๋ก์ธ์ค๊ฐ ์ถฉ๋ํ ์ ์๋ ์ทจ์ฝ์ CVE-2022-24736์ ์์ ํ์ต๋๋ค. ๊ณต๊ฒฉ์ ํน๋ณํ ์ค๊ณ๋ Lua ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ํตํด ์ํ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru