Redis 7.0 DBMS ์ถœ์‹œ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€