Redis 6.0 DBMS ์ถœ์‹œ

์ค€๋น„๋œ DBMS ์ถœ์‹œ ๋ ˆ๋”” ์Šค 6.0, NoSQL ์‹œ์Šคํ…œ ํด๋ž˜์Šค์— ์†ํ•ฉ๋‹ˆ๋‹ค. Redis๋Š” ๋ชฉ๋ก, ํ•ด์‹œ, ์„ธํŠธ ๋“ฑ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›๊ณผ ์„œ๋ฒ„ ์ธก Lua ํ•ธ๋“ค๋Ÿฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐ•ํ™”๋œ ํ‚ค/๊ฐ’ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•œ Memcached์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ณต๊ธ‰ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ. ์ž‘๋…„๋ถ€ํ„ฐ RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom ๋“ฑ ๊ธฐ์—… ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๋ชจ๋“ˆ ๊ณต๊ธ‰๋จ ๋…์  RSAL ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ. AGPLv3 ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์˜ ๊ณต๊ฐœ ๋ฒ„์ „ ๊ฐœ๋ฐœ์€ ํ”„๋กœ์ ํŠธ์— ์˜ํ•ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ์ข‹์€ํ˜•ํƒœ.

Memcached์™€ ๋‹ฌ๋ฆฌ Redis๋Š” ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ์˜ ์˜๊ตฌ ์ €์žฅ์„ ์ œ๊ณตํ•˜๊ณ  ๊ธด๊ธ‰ ์ข…๋ฃŒ ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์•ˆ์ „์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Perl, Python, PHP, Java, Ruby ๋ฐ Tcl์„ ํฌํ•จํ•˜์—ฌ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Redis๋Š” ํ•œ ๋‹จ๊ณ„์—์„œ ๋ช…๋ น ๊ทธ๋ฃน์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ช…๋ น ์„ธํŠธ ์‹คํ–‰ ์‹œ ์ผ๊ด€์„ฑ๊ณผ ์ผ๊ด€์„ฑ(๋‹ค๋ฅธ ์š”์ฒญ์˜ ๋ช…๋ น์ด ๋ฐฉํ•ดํ•  ์ˆ˜ ์—†์Œ)์„ ๋ณด์žฅํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™”. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” RAM์— ์™„์ „ํžˆ ์บ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฆ๊ฐ€/๊ฐ์†Œ, ํ‘œ์ค€ ๋ชฉ๋ก ๋ฐ ์ง‘ํ•ฉ ์—ฐ์‚ฐ(ํ•ฉ์ง‘ํ•ฉ, ๊ต์ฐจ์ ), ํ‚ค ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ, ๋‹ค์ค‘ ์„ ํƒ, ์ •๋ ฌ ๊ธฐ๋Šฅ ๋“ฑ์˜ ๋ช…๋ น์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ ๋””์Šคํฌ์— ๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ €์žฅ ๋ชจ๋“œ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์™„์ „ํ•œ ์•ˆ์ „์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„์ฐจ๋‹จ ๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ ๋ฐ์ดํ„ฐ ๋ณต์ œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ฑ„๋„์ด ์ƒ์„ฑ๋˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๊ตฌ๋…์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์— ๋ฐฐํฌ๋˜๋Š” "๊ฒŒ์‹œ/๊ตฌ๋…" ๋ฉ”์‹œ์ง• ๋ชจ๋“œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด์‡  ๊ฐœ๋Ÿ‰Redis 6.0์— ์ถ”๊ฐ€๋จ:

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ๋กœ์šด RESP3 ํ”„๋กœํ† ์ฝœ์ด ์ œ์•ˆ๋˜์ง€๋งŒ ์—ฐ๊ฒฐ ์„ค์ •์€ RESP2 ๋ชจ๋“œ์—์„œ ์‹œ์ž‘๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ ํ˜‘์ƒ ์‹œ ์ƒˆ๋กœ์šด HELLO ๋ช…๋ น์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ƒˆ ํ”„๋กœํ† ์ฝœ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. RESP3์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ผ๋ฐ˜ ๋ฐฐ์—ด์„ ๋ณ€ํ™˜ํ•  ํ•„์š” ์—†์ด ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•ก์„ธ์Šค ์ œ์–ด ๋ชฉ๋ก ์ง€์›(ACL)๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๊ณผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์„ ์ •ํ™•ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ACL์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ์ค‘์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด BRPOPLPUSH ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๋Š” ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋””๋ฒ„๊น… ์ค‘์— ์ถ”๊ฐ€๋œ FLUSHALL ํ˜ธ์ถœ์ด ์‹ค์ˆ˜๋กœ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ ์žŠํ˜€์ง„ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ACL์„ ๊ตฌํ˜„ํ•ด๋„ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ ์„ฑ๋Šฅ์— ๊ฑฐ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ACL์šฉ ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ๋“ˆ๋„ ์ค€๋น„๋˜์–ด ์žˆ์–ด ๊ณ ์œ ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ก๋œ ๋ชจ๋“  ACL ์œ„๋ฐ˜์„ ๋ณด๋ ค๋ฉด "ACL LOG" ๋ช…๋ น์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์„ธ์…˜ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด SHA256 ๊ธฐ๋ฐ˜ HMAC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” "ACL GENPASS" ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์› SSL / TLS ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹  ์ฑ„๋„์„ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์› ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธก ์บ์‹œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ์™€ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ํด๋ผ์ด์–ธํŠธ ์บ์‹œ ํ•ญ๋ชฉ์˜ ๊ด€๋ จ์„ฑ ์†์‹ค์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ „์— ์š”์ฒญํ•œ ํ‚ค๋ฅผ ์„œ๋ฒ„์— ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. 2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ํ‚ค ์ ‘๋‘์‚ฌ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ์ด๋Ÿฌํ•œ ์ ‘๋‘์‚ฌ์— ํ•ด๋‹นํ•˜๋Š” ํ‚ค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ด๋ฅผ ์•Œ๋ฆฌ๋Š” "๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…" ๋ฉ”์ปค๋‹ˆ์ฆ˜. "๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…" ๋ชจ๋“œ์˜ ์žฅ์ ์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์บ์‹œ๋œ ๊ฐ’์˜ ๋งต์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด์ง€๋งŒ, ์ „์†ก๋˜๋Š” ๋ฉ”์‹œ์ง€ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Disque ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ๋‹ค์Œ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ชจ๋“ˆ.
  • ์ถ”๊ฐ€๋จ ํด๋Ÿฌ์Šคํ„ฐ ํ”„๋ก์‹œ, Redis ์„œ๋ฒ„ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ”„๋ก์‹œ๋กœ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ Redis ์„œ๋ฒ„๋ฅผ ๋งˆ์น˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋กœ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ , ์—ฐ๊ฒฐ์„ ๋‹ค์ค‘ํ™”ํ•˜๊ณ , ๋…ธ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๊ฐ์ง€๋˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ณ , ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๊ฑธ์ณ ์š”์ฒญ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ ์ž‘์„ฑ์„ ์œ„ํ•œ API๊ฐ€ ๋Œ€ํญ ๊ฐœ์„ ๋˜์–ด Redis๊ฐ€ ์ถ”๊ฐ€ ๋ชจ๋“ˆ ํ˜•ํƒœ๋กœ ์‹œ์Šคํ…œ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.
  • RDB ํŒŒ์ผ์ด ์‚ฌ์šฉ๋œ ํ›„ ์ฆ‰์‹œ ์‚ญ์ œ๋˜๋Š” ๋ณต์ œ ๋ชจ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • PSYNC2 ๋ณต์ œ ํ”„๋กœํ† ์ฝœ์ด ๊ฐœ์„ ๋˜์–ด ๋ณต์ œ๋ณธ๊ณผ ๋งˆ์Šคํ„ฐ์— ๊ณตํ†ต๋œ ์˜คํ”„์…‹์„ ์‹๋ณ„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ ธ ๋ถ€๋ถ„ ์žฌ๋™๊ธฐํ™”๋ฅผ ๋” ์ž์ฃผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • RDB ํŒŒ์ผ ๋กœ๋”ฉ์ด ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๊ฐ€์† ๋ฒ”์œ„๋Š” 20~30%์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ INFO ๋ช…๋ น ์‹คํ–‰์ด ํฌ๊ฒŒ ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด STRALGO ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ๋‹จ ํ•˜๋‚˜์˜ LCS(Longest Common Subsequence) ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” RNA์™€ DNA ์„œ์—ด์„ ๋น„๊ตํ•  ๋•Œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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