ํค์ด ํ๋ธ๋ฅด!
์ค๋ ์ฐ๋ฆฌ๋ Redis๋ฅผ ์ฌ์ฉํ ๋ถ์ฐ ์ ๊ธ ๊ตฌํ์ ๊ดํ ๋ณต์กํ ๊ธฐ์ฌ์ ๋ฒ์ญ์ ์๊ฐํ๊ณ Redis์ ์ ๋ง์ ๋ํด ์ฃผ์ ๋ก ์ด์ผ๊ธฐํ๋๋ก ์ด๋ํฉ๋๋ค. "๋ผ๋ ์ฑ
์ ์ ์์ธ Martin Kleppmann์ด ๋ฌธ์ ์ Redlock ์๊ณ ๋ฆฌ์ฆ์ ๋ถ์ํ์ต๋๋ค.
๋ถ์ฐ ์ ๊ธ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ํธ ๋ฐฐํ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ณต์ ๋ฆฌ์์ค์ ๋ํด ์์ ํด์ผ ํ๋ ๋ง์ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ณธ ์์์ ๋๋ค.
Redis๋ฅผ ์ฌ์ฉํ์ฌ DLM(๋ถ์ฐ ์ ๊ธ ๊ด๋ฆฌ์)์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒ์๋ฌผ์ด ์์ง๋ง ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๊ณ ์ ๊ณตํ๋ ๋ณด์ฅ์ ์ฝ๊ฐ ๋ ์ ๊ตํ ์ค๊ณ๋ก ๋ฌ์ฑํ ์ ์๋ ๊ฒ์ ๋นํด ์๋นํ ์ฝํฉ๋๋ค.
์ด ๊ธฐ์ฌ์์๋ Redis๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ์ ๊ธ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์กฐ๊ฑด๋ถ ํ์ค ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ๋ ค๊ณ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ๋ ๋๋ฝ, ์ด๋ ๋ถ์ฐ ์ ๊ธ ๊ด๋ฆฌ์๋ฅผ ๊ตฌํํ๋ฉฐ ์ฐ๋ฆฌ ์๊ฒฌ์ผ๋ก๋ ์ด ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ฐ์ ์ธ ๋จ์ผ ์ธ์คํด์ค ์ ๊ทผ ๋ฐฉ์๋ณด๋ค ์์ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ๊ฐ ์ด๋ฅผ ๋ถ์ํ๊ณ , ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ , ์ด๋ฅผ ๋ณด๋ค ๋ณต์กํ๊ฑฐ๋ ๋์์ ์ธ ํ๋ก์ ํธ์ ์ถ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ตฌํ
์๊ณ ๋ฆฌ์ฆ ์ค๋ช ์ผ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ์ด๋ฏธ ๋ง๋ค์ด์ง ๊ตฌํ์ ๋ํ ์ฌ๋ฌ ๋งํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฐธ๊ณ ์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
Redlock-rb (Ruby ๊ตฌํ). ๋ ์์ต๋๋คํฌํฌ ๋ฐฐํฌ์ ์ฉ์ด์ฑ๋ฟ๋ง ์๋๋ผ ๋ฐฐํฌ์ ์ฉ์ด์ฑ์ ์ํด ํจํค์ง(gem)๋ฅผ ์ถ๊ฐํ๋ Redlock-rb.Redlock-py (ํ์ด์ฌ ๊ตฌํ).์์ด์ค๋ ๋๋ฝ (Asyncio Python ๊ตฌํ).Redlock-php (PHP ๊ตฌํ).PHPRedisMutex (PHP์ ๋ ๋ค๋ฅธ ๊ตฌํ)์ฒดํ๋ผ์ํ/php-redis-lock (์ ๊ธ์ฉ PHP ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ ๋์ฑํฌ (Go ๊ตฌํ).๋ ๋์ก (Java ๊ตฌํ).Redis::DistLock (ํ ๊ตฌํ).Redlock-cpp (C++ ๊ตฌํ).Redlock-cs (C#/.NET์ฉ ๊ตฌํ).RedLock.net (C#/.NET์ฉ ๊ตฌํ). ๋น๋๊ธฐ ๋ฐ ์ ๊ธ ํ์ฅ์ ์ง์ํฉ๋๋ค.์ค์นผ๋ ๋ฝ (๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์๋ C# .NET ๊ตฌํ)Redlock4Net (C# .NET ๊ตฌํ)๋ ธ๋ ๋ ๋๋ฝ (NodeJS ๊ตฌํ). ์ ๊ธ ํ์ฅ์ ๋ํ ์ง์์ด ํฌํจ๋ฉ๋๋ค.
๋ณด์ ๋ฐ ๊ฐ์ฉ์ฑ ๋ณด์ฅ
์ฐ๋ฆฌ๋ ๋ถ์ฐ ์ ๊ธ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ ํ์ํ ์ต์ํ์ ๋ณด์ฅ์ ์ ๊ณตํ๋ค๊ณ ์๊ฐ๋๋ ์ธ ๊ฐ์ง ์์ฑ๋ง์ผ๋ก ๋์์ธ์ ๋ชจ๋ธ๋งํ ๊ฒ์ ๋๋ค.
- ๋ณด์ ์์ฑ: ์ํธ ๋ฐฐ์ . ์ฃผ์ด์ง ์๊ฐ์ ์ค์ง ํ๋์ ํด๋ผ์ด์ธํธ๋ง์ด ์ ๊ธ์ ๋ณด์ ํ ์ ์์ต๋๋ค.
- ๊ฐ์ฉ์ฑ ์์ฑ A: ๊ต์ฐฉ ์ํ๊ฐ ์์ต๋๋ค. ๋ฆฌ์์ค๋ฅผ ์ ๊ทผ ํด๋ผ์ด์ธํธ๊ฐ ์คํจํ๊ฑฐ๋ ๋ค๋ฅธ ๋์คํฌ ์ธ๊ทธ๋จผํธ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ตญ ์ ๊ธ์ ํ๋ํ๋ ๊ฒ์ ํญ์ ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ์ฉ์ฑ ์์ฑ B: ๋ด๊ฒฐํจ์ฑ. ๋๋ถ๋ถ์ Redis ๋ ธ๋๊ฐ ์คํ ์ค์ธ ํ ํด๋ผ์ด์ธํธ๋ ์ ๊ธ์ ํ๋ํ๊ณ ํด์ ํ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ์ฅ์ ๋ณต๊ตฌ ๊ธฐ๋ฐ ๊ตฌํ์ด ์ถฉ๋ถํ์ง ์์ ์ด์
๊ฐ์ ํ ์ฌํญ์ ์ดํดํ๊ธฐ ์ํด Redis๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋๋ถ๋ถ์ ๋ถ์ฐ ์ ๊ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ฌ ์ํ๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค.
Redis๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ ๊ทธ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ธ์คํด์ค์ ํค๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํค๋ ์ ํ๋ ์๋ช ์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ Redis์์ ์ ๊ณต๋๋ ๋ง๋ฃ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋๋ฏ๋ก ์กฐ๋ง๊ฐ ์ด ํค๊ฐ ํด์ ๋ฉ๋๋ค(๋ชฉ๋ก์ ์์ฑ 2). ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํด์ผ ํ ๊ฒฝ์ฐ ํค๋ฅผ ์ญ์ ํฉ๋๋ค.
์ธ๋ป ๋ณด๊ธฐ์ ์ด ์๋ฃจ์ ์ ๊ฝค ์ ์๋ํ์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฆ, ์ฐ๋ฆฌ์ ์ํคํ ์ฒ๋ ๋จ์ผ ์คํจ ์ง์ ์ ์์ฑํฉ๋๋ค. ํธ์คํธ Redis ์ธ์คํด์ค๊ฐ ์คํจํ๋ฉด ์ด๋ป๊ฒ ๋๋์? ๊ทธ๋ผ ์ฌ๋ ์ด๋ธ๋ฅผ ์ถ๊ฐํ์! ๋ฐํ์๊ฐ ๋ถ์ฌ์ค์ผ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. ๋ถํํ๊ฒ๋ ์ด ์ต์ ์ ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Redis์ ๋ณต์ ๊ฐ ๋น๋๊ธฐ์์ด๋ฏ๋ก ๋ณด์์ ๋ณด์ฅํ๋ ๋ฐ ํ์ํ ์ํธ ๋ฐฐ์ ์์ฑ์ ์ ๋๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
๋ถ๋ช ํ ์ด๋ฌํ ๋ชจ๋ธ์์๋ ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ A๋ ๋ง์คํฐ์ ๋ํ ์ ๊ธ์ ํ๋ํฉ๋๋ค.
- ํค ํญ๋ชฉ์ด ์ฌ๋ ์ด๋ธ๋ก ์ ์ก๋๊ธฐ ์ ์ ๋ง์คํฐ๊ฐ ์คํจํฉ๋๋ค.
- ์ถ์ข ์๊ฐ ๋ฆฌ๋๋ก ์น์งํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ B๋ A๊ฐ ์ด๋ฏธ ์ ๊ทผ ๋์ผํ ๋ฆฌ์์ค์ ๋ํ ์ ๊ธ์ ํ๋ํฉ๋๋ค. ๋ณด์ ์๋ฐ!
๋๋ก๋ ์คํจ์ ๊ฐ์ ํน๋ณํ ์ํฉ์์ ๋ง์ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์ ๊ธ์ ๋ณด์ ํ ์ ์๋ ๊ฒ์ด ์์ ํ ์ ์์ ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ณต์ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์ด ๋ฌธ์์ ์ค๋ช ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋จ์ผ ์ธ์คํด์ค๋ก ์ฌ๋ฐ๋ฅธ ๊ตฌํ
์์์ ์ค๋ช ํ ๋จ์ผ ์ธ์คํด์ค ๊ตฌ์ฑ์ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ ์ ์ด ๊ฐ๋จํ ์ฌ๋ก๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์๋ฃจ์ ์ ๋๋๋ก ๊ฒฝ์ ์กฐ๊ฑด์ด ํ์ฉ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ค์ ๋ก ์ ํจํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋จ์ผ ์ธ์คํด์ค๋ ์ฌ๊ธฐ์ ์ค๋ช ๋ ๋ถ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ๋๋ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์ ๊ธ์ ์ป์ผ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
SET resource_name my_random_value NX PX 30000
์ด ๋ช
๋ น์ ํค๊ฐ ์์ง ์๋ ๊ฒฝ์ฐ์๋ง(NX ์ต์
) ํค๋ฅผ ์ค์นํ๋ฉฐ ์ ํจ ๊ธฐ๊ฐ์ 30000๋ฐ๋ฆฌ์ด(PX ์ต์
)์
๋๋ค. ํค๋ "๋ก ์ค์ ๋์ด ์์ต๋๋ค.myrandomvalue
" ์ด ๊ฐ์ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์ ๊ธ ์์ฒญ์์ ๊ณ ์ ํด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ๊ฐ์ Redis์๊ฒ ํค๊ฐ ์กด์ฌํ๊ณ ํค์ ์ ์ฅ๋ ๊ฐ์ด ์ ํํ ์์ํ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ง ํค๋ฅผ ์ ๊ฑฐํ๋ผ๋ ์คํฌ๋ฆฝํธ์ ํจ๊ป ์ ๊ธ์ ์์ ํ๊ฒ ํด์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๋ค์ Lua ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋ฉ๋๋ค.
if redis.call("get",KEYS[1]) == ARGV[1] then
return redis.call("del",KEYS[1])
else
return 0
end
์ด๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด์ ํ ์ ๊ธ์ด ์ ๊ฑฐ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๋ ์ ๊ธ์ ํ๋ํ ๋ค์ ์ฒซ ๋ฒ์งธ ์ ๊ธ๋ณด๋ค ์ค๋ ์ง์๋๋ ์ผ๋ถ ์์
์์ ์ ๊ธฐ๊ณ (ํค๊ฐ ๋ง๋ฃ๋ ์๊ฐ์ ๊ฐ๊ธฐ ์ํด) ๋์ค์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ํ ์ ๊ธ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋จ์ DEL์ ์ฌ์ฉํ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด์ ํ ์ ๊ธ์ ์ ๊ฑฐํ ์ ์์ผ๋ฏ๋ก ์์ ํ์ง ์์ต๋๋ค. ๋์กฐ์ ์ผ๋ก, ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ ์ ๊ธ์ ์์์ ๋ฌธ์์ด๋ก "์๋ช
"๋๋ฏ๋ก ์ด์ ์ ์ ๊ธ์ ์ค์ ํ ํด๋ผ์ด์ธํธ๋ง ์ด๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ด ์์์ ๋ฌธ์์ด์ ๋ฌด์์ด์ด์ผ ํฉ๋๊น? ๋๋ ๊ทธ๊ฒ์ด /dev/urandom์์ 20๋ฐ์ดํธ์ฌ์ผ ํ๋ค๊ณ ์ถ์ธกํ์ง๋ง, ๊ทํ์ ๋ชฉ์ ์ ๋ง๊ฒ ๋ฌธ์์ด์ ๊ณ ์ ํ๊ฒ ๋ง๋๋ ๋ณด๋ค ์ ๋ ดํ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด RC4์ /dev/urandom์ ์๋ํ ๋ค์ ์ฌ๊ธฐ์์ ์์ฌ ๋ฌด์์ ์คํธ๋ฆผ์ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ ๊ฐ๋จํ ์๋ฃจ์ ์๋ ๋ง์ดํฌ๋ก์ด ํด์๋์ Unix ์๊ฐ๊ณผ ํด๋ผ์ด์ธํธ ID์ ์กฐํฉ์ด ํฌํจ๋ฉ๋๋ค. ์์ ํ์ง๋ ์์ง๋ง ๋๋ถ๋ถ์ ์ํฉ์์ ์์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
ํค์ ์๋ช ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์๊ฐ์ "์ ๊ธ ์๋ช "์ด๋ผ๊ณ ํฉ๋๋ค. ์ด ๊ฐ์ ์ ๊ธ์ด ์๋์ผ๋ก ํด์ ๋๊ธฐ ์ ๊น์ง์ ์๊ฐ๊ณผ ์ค์ ๋ก ์ํธ ๋ฐฐ์ ๋ณด์ฅ์ ์๋ฐํ์ง ์๊ณ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ๋ฆฌ์์ค๋ฅผ ์ ๊ทธ๊ธฐ ์ ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์๋ฃํด์ผ ํ๋ ์๊ฐ์ ๋๋ค. ์ด ๋ณด์ฆ์ ์๋ฌผ์ ๋ฅผ ๊ตฌ์ ํ ์๊ฐ๋ถํฐ ์์๋๋ ํน์ ๊ธฐ๊ฐ์ผ๋ก๋ง ์ ํ๋ฉ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ ๊ธ์ ํ๋ํ๊ณ ํด์ ํ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ์ต๋๋ค. ์์คํ (ํญ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์ผ ์ธ์คํด์ค๋ก ๊ตฌ์ฑ๋ ๋น๋ถ์ฐ ์์คํ ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒฝ์ฐ)์ ์์ ํฉ๋๋ค. ์ด ๊ฐ๋ ์ ๊ทธ๋ฌํ ๋ณด์ฅ์ด ์๋ ๋ถ์ฐ ์์คํ ์ผ๋ก ํ์ฅํด ๋ณด๊ฒ ์ต๋๋ค.
๋ ๋๋ฝ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ์ ๋ถ์ฐ ๋ฒ์ ์์๋ N๊ฐ์ Redis ๋ง์คํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด๋ฌํ ๋ ธ๋๋ ์๋ก ์์ ํ ๋ ๋ฆฝ์ ์ด๋ฏ๋ก ๋ณต์ ๋๋ ๊ธฐํ ์์์ ์กฐ์ ์์คํ ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋จ์ผ ์ธ์คํด์ค์ ๋ํ ์ ๊ธ์ ์์ ํ๊ฒ ํ๋ํ๊ณ ํด์ ํ๋ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ๋ค๋ฃจ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋จ์ผ ์ธ์คํด์ค๋ก ์์ ํ ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ ํํ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋น์ฐํ๊ฒ ์ฌ๊น๋๋ค. ์ด ์์์๋ N์ ํฉ๋ฆฌ์ ์ธ ๊ฐ์ธ 5๋ก ์ค์ ํ์ต๋๋ค. ๋ฐ๋ผ์ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋๋ก ์๋ก ๋ค๋ฅธ ์ปดํจํฐ ๋๋ ๊ฐ์ ๋จธ์ ์์ 5๊ฐ์ Redis ๋ง์คํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ ๊ธ์ ํ๋ํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ๋ ๋ค์ ์์ ์ ์ํํฉ๋๋ค.
- ํ์ฌ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๊ฐ์ ธ์ต๋๋ค.
- ๋ชจ๋ ๊ฒฝ์ฐ์ ๋์ผํ ํค ์ด๋ฆ๊ณผ ์์์ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ N ์ธ์คํด์ค์ ๋ํด ์์ฐจ์ ์ผ๋ก ์ ๊ธ์ ์ป์ผ๋ ค๊ณ ์๋ํฉ๋๋ค. 2๋จ๊ณ์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ธ์คํด์ค๋ณ๋ก ์ ๊ธ์ ์ค์ ํ ๋ ํด๋ผ์ด์ธํธ๋ ์ ๊ธ์ด ์๋์ผ๋ก ํด์ ๋ ํ์ ์๊ฐ์ ๋นํด ์ถฉ๋ถํ ์งง์ ์ง์ฐ์ ์ฌ์ฉํ์ฌ ์ ๊ธ์ ํ๋ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฐจ๋จ ๊ธฐ๊ฐ์ด 10์ด์ธ ๊ฒฝ์ฐ ์ง์ฐ ์๊ฐ์ ~5~50๋ฐ๋ฆฌ์ด ๋ฒ์์ผ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์คํจํ Redis ๋ ธ๋์ ๋๋ฌํ๋ ค๊ณ ์ค๋ซ๋์ ์ฐจ๋จ๋ ์ ์๋ ์ํฉ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ค๋ฅธ ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๋ ค๊ณ ์๋ํฉ๋๋ค.
- ์ ๊ธ์ ์ํํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ๋ ๊ฒฝ๊ณผ๋ ์๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ค์ ์๊ฐ ๊ฐ์์ 1๋จ๊ณ์์ ์ป์ ํ์์คํฌํ๋ฅผ ๋บ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋๋ถ๋ถ์ ์ธ์คํด์ค(์ต์ 3๊ฐ)์ ๋ํ ์ ๊ธ์ ์ป์ ์ ์์๋ ๊ฒฝ์ฐ์๋ง ํด๋น๋๋ฉฐ, ์์๋ ์ด ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ ๊ธ์ ํ๋ํ๊ณ ์ ๊ธ ๊ธฐ๊ฐ๋ณด๋ค ์งง์ ๊ฒฝ์ฐ ์ ๊ธ์ ํ๋ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- ์ ๊ธ์ด ํ๋๋ ๊ฒฝ์ฐ ์ ๊ธ ๊ธฐ๊ฐ์ ์๋ ์ ๊ธ ๊ธฐ๊ฐ์์ 3๋จ๊ณ์์ ๊ณ์ฐ๋ ๊ฒฝ๊ณผ ์๊ฐ์ ๋บ ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ์ด์ ๋ก ์ ๊ธ์ ํ๋ํ์ง ๋ชปํ ๊ฒฝ์ฐ(N/2+1 ์ธ์คํด์ค๋ฅผ ์ ๊ธ ์ ์๊ฑฐ๋ ์ ๊ธ ๊ธฐ๊ฐ์ด ์์์ธ ๊ฒฝ์ฐ) ๋ชจ๋ ์ธ์คํด์ค ์ ๊ธ์ ํด์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค(์ฐจ๋จํ ์ ์๋ค๊ณ ์๊ฐํ ์ธ์คํด์ค๋ ํฌํจ). ).
์๊ณ ๋ฆฌ์ฆ์ด ๋น๋๊ธฐ์์ธ๊ฐ์?
์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์๋ํ๋ ๋๊ธฐํ๋ ์๊ณ๋ ์์ง๋ง ๊ฐ ํ๋ก์ธ์ค์ ๋ก์ปฌ ์๊ฐ์ ์ฌ์ ํ โโ๋๋ต ๋์ผํ ์๋๋ก ํ๋ฅด๊ณ ์ ๊ธ์ด ํด์ ๋ ํ์ ์ ์ฒด ์๊ฐ์ ๋นํด ์ค๋ฅ๊ฐ ์๋ค๋ ๊ฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์๋์ผ๋ก ํด์ ๋ฉ๋๋ค. ์ด ๊ฐ์ ์ ์ผ๋ฐ ์ปดํจํฐ์ ์ผ๋ฐ์ ์ธ ์ํฉ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๊ฐ ์ปดํจํฐ์๋ ๋ก์ปฌ ์๊ณ๊ฐ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ์ปดํจํฐ ๊ฐ์ ์๊ฐ ์ฐจ์ด๊ฐ ์๋ค๋ ์ฌ์ค์ ๋ฏฟ์ ์ ์์ต๋๋ค.
์ด ์์ ์์ ์ฐ๋ฆฌ๋ ์ํธ ๋ฐฐ์ ๊ท์น์ ๋ณด๋ค ์ ์คํ๊ฒ ๊ณต์ํํด์ผ ํฉ๋๋ค. ์ํธ ๋ฐฐ์ ๋ ์ ๊ธ์ ๋ณด์ ํ ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ธ์ด ์ ํจํ ์๊ฐ(3๋จ๊ณ์์ ์ป์ ์ด ๊ฐ) ๋์ ์ข ๋ฃํ๋ ๊ฒฝ์ฐ์๋ง ๋ ๋ง์ ์๊ฐ(์ด ๋ช ์๊ฐ)์ ๋บ ๊ฒฝ์ฐ์๋ง ๋ณด์ฅ๋ฉ๋๋ค. ํ๋ก์ธ์ค ๊ฐ์ ์๊ฐ ์ฐจ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋ฐ๋ฆฌ์ด).
๋ค์ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ฌ์์๋ ์๊ฐ ๊ฐ๊ฒฉ ์กฐ์ ์ด ํ์ํ ์์คํ
์ ๋ํด ์์ธํ ์ค๋ช
ํฉ๋๋ค.
์คํจ ์ ์ฌ์๋
ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ธ ํ๋์ ์คํจํ๋ฉด ์์์ ์ง์ฐ ํ์ ๋ค์ ์๋ํด์ผ ํฉ๋๋ค. ์ด๋ ๋์ผํ ๋ฆฌ์์ค์ ๋ํ ์ ๊ธ์ ๋์์ ํ๋ํ๋ ค๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๋ฅผ ๋น๋๊ธฐํํ๊ธฐ ์ํด ์ํ๋ฉ๋๋ค(์น์๊ฐ ์๋ "๋ถํ ๋ธ๋ ์ธ" ์ํฉ์ผ๋ก ์ด์ด์ง ์ ์์). ๋ํ ํด๋ผ์ด์ธํธ๊ฐ ๋๋ถ๋ถ์ Redis ์ธ์คํด์ค์ ๋ํ ์ ๊ธ ํ๋์ ๋ ๋นจ๋ฆฌ ์๋ํ ์๋ก ๋ถํ ๋ธ๋ ์ธ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ ๊ธฐ๊ฐ์ ๋ ์ข์์ง๋๋ค(๊ทธ๋ฆฌ๊ณ ์ฌ์๋ ํ์์ฑ๋ ์ค์ด๋ญ๋๋ค). ๋ฐ๋ผ์ ์ด์์ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ ๋ฉํฐํ๋ ์ฑ์ ์ฌ์ฉํ์ฌ ๋์์ N ์ธ์คํด์ค์ SET ๋ช ๋ น์ ๋ณด๋ด๋ ค๊ณ ์๋ํด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋๋ถ๋ถ์ ์ ๊ธ์ ํ๋ํ์ง ๋ชปํ ํด๋ผ์ด์ธํธ๊ฐ (๋ถ๋ถ์ ์ผ๋ก) ํ๋ํ ์ ๊ธ์ ํด์ ํ์ฌ ๋ฆฌ์์ค์ ๋ํ ์ ๊ธ์ ๋ค์ ํ๋ํ๊ธฐ ์ ์ ํค๊ฐ ๋ง๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๋๋ก ํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง ๊ฐ์กฐํ ๊ฐ์น๊ฐ ์์ต๋๋ค. (๋คํธ์ํฌ ์กฐ๊ฐํ๊ฐ ๋ฐ์ํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ Redis ์ธ์คํด์ค์์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด ํค๊ฐ ๋ง๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๊ฐ์ฉ์ฑ ํ๋ํฐ๋ฅผ ์ง๋ถํด์ผ ํฉ๋๋ค).
์ ๊ธ์ ํด์ ํ์ธ์
์ ๊ธ ํด์ ๋ ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ธ์คํด์ค๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ ๊ทผ ๊ฒ์ผ๋ก ๋ณด์ด๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ์ ๊ธ ํด์ ํ๋ฉด ๋๋ ๊ฐ๋จํ ์์ ์ ๋๋ค.
๋ณด์ ๊ณ ๋ ค ์ฌํญ
์๊ณ ๋ฆฌ์ฆ์ ์์ ํ๊ฐ์? ๋ค์ํ ์๋๋ฆฌ์ค์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์์ํด ๋ด ์๋ค.
์ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๋๋ถ๋ถ์ ์ธ์คํด์ค์ ๋ํ ์ ๊ธ์ ์ป์ ์ ์์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ ์ธ์คํด์ค์๋ ๋ชจ๋์ ๋ํด ๋์ผํ ์๋ช
์ ๊ฐ๋ ํค๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํค๋ ๊ฐ๊ฐ ์๋ก ๋ค๋ฅธ ์๊ฐ์ ์ค์น๋์์ผ๋ฏ๋ก ์๋ก ๋ค๋ฅธ ์๊ฐ์ ๋ง๋ฃ๋ฉ๋๋ค. ํ์ง๋ง ์ฒซ ๋ฒ์งธ ํค๊ฐ T1(์ฒซ ๋ฒ์งธ ์๋ฒ์ ์ฐ๊ฒฐํ๊ธฐ ์ ์ ์ ํํ ์๊ฐ)๋ณด๋ค ๋์์ง ์์ ์๊ฐ์ ์ค์น๋๊ณ ๋ง์ง๋ง ํค๊ฐ T2(์๋ต์ ๋ฐ์ ์๊ฐ)๋ณด๋ค ๋์์ง ์์ ์๊ฐ์ ์ค์น๋ ๊ฒฝ์ฐ ๋ง์ง๋ง ์๋ฒ์์), ๋ง๋ฃ๋๋ ์ธํธ์ ์ฒซ ๋ฒ์งธ ํค๊ฐ ์ ์ด๋ ์ด์๋จ์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. MIN_VALIDITY=TTL-(T2-T1)-CLOCK_DRIFT
. ๋ค๋ฅธ ๋ชจ๋ ํค๋ ๋์ค์ ๋ง๋ฃ๋๋ฏ๋ก ์ ์ด๋ ์ด ์๊ฐ ๋์ ๋ชจ๋ ํค๊ฐ ๋์์ ์ ํจํ๋ค๋ ๊ฒ์ ํ์ ํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ํค๊ฐ ์ ํจํ ๋์์๋ N/2+1 ํค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ N/2+1 SET NX ์์
์ด ์ฑ๊ณตํ ์ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ธ์ ํ๋ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๊ธ์ ํ ๋ฒ ํ๋ํ๋ฉด ๋์์ ๋ค์ ํ๋ํ ์ ์์ต๋๋ค(์ด๋ ์ํธ ๋ฐฐ์ ์์ฑ์ ์๋ฐํ๊ฒ ๋ฉ๋๋ค).
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋์์ ์ ๊ธ์ ํ๋ํ๋ ค๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์ฑ๊ณตํ ์ ์๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ต๋ ์ ๊ธ ๊ธฐ๊ฐ ์ด์ ๋์ ๋๋ถ๋ถ์ ์ธ์คํด์ค๋ฅผ ์ ๊ทผ ๊ฒฝ์ฐ ์ ๊ธ์ด ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ธ์คํด์ค๋ฅผ ์ ๊ธ ํด์ ํฉ๋๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ง๋ฃ ๋ ์ง๋ณด๋ค ์งง์ ์๊ฐ ๋ด์ ๋๋ถ๋ถ์ ์ธ์คํด์ค๋ฅผ ์ฐจ๋จํ ๊ฒฝ์ฐ๋ง ๊ณ ๋ คํ๋ฉด ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์์ ์ฃผ์ฅ์ ๋ํ์ฌ ๊ทธ ๊ธฐ๊ฐ ๋์ MIN_VALIDITY
์ด๋ค ํด๋ผ์ด์ธํธ๋ ์ ๊ธ์ ๋ค์ ํ๋ํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ง์ ํด๋ผ์ด์ธํธ๋ ๋๋ค์๋ฅผ ์ ๊ทธ๋ ์๊ฐ์ด TTL ์๊ฐ๋ณด๋ค ๊ธธ์ด์ ์ ๊ธ์ด ๋ฌดํจํ๋๋ ๊ฒฝ์ฐ์๋ง N/2+1 ์ธ์คํด์ค๋ฅผ ๋์์ ์ ๊ธ ์ ์์ต๋๋ค(2๋จ๊ณ ๋์์ ๋๋จ).
๊ณต์์ ์ธ ๋ณด์ ์ฆ๋ช ์ ์ ๊ณตํ๊ฑฐ๋, ๊ธฐ์กด์ ์ ์ฌํ ์๊ณ ๋ฆฌ์ฆ์ ํ์ํ๊ฑฐ๋, ์์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์ ์์ต๋๊น?
์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ
์์คํ ๊ฐ์ฉ์ฑ์ ์ธ ๊ฐ์ง ์ฃผ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- ์๋์ผ๋ก ์ ๊ธ ํด์ (ํค๊ฐ ๋ง๋ฃ๋๋ฉด): ๊ฒฐ๊ตญ ํค๋ ๋ค์ ์ ๊ธ์ ์ฌ์ฉ๋ ์ ์๊ฒ ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ํ๋ ์ ๊ธ์ ํ๋ํ์ง ๋ชปํ๊ฑฐ๋ ํ๋ํ์ง๋ง ์์ ์ด ์๋ฃ๋์์ ๋ ์ ๊ธ์ ์ ๊ฑฐํ์ฌ ์๋ก๋ฅผ ๋๋๋ค๋ ์ฌ์ค ๋ฐ๋ผ์ ์ ๊ธ์ ๋ค์ ํ๋ํ๊ธฐ ์ํด ํค๊ฐ ๋ง๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ธ์ ํ๋ํ๊ธฐ ์ํด ์ฌ์๋ํด์ผ ํ ๋ ๋๋ถ๋ถ์ ์ ๊ธ ํ๋์ ํ์ํ ์๊ฐ๋ณด๋ค ๋น๊ต์ ์ค๋ ์๊ฐ์ ๊ธฐ๋ค๋ฆฐ๋ค๋ ์ฌ์ค์ ๋๋ค. ์ด๋ ์์ ๊ฒฝ์ ์ ๋๋ ๋ถํ ์ํฉ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ค์ฌ์ค๋๋ค.
๊ทธ๋ฌ๋ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ์ TTL๊ณผ ๋์ผํ ๊ฐ์ฉ์ฑ ํ๋ํฐ๊ฐ ์์ผ๋ฏ๋ก ์ฐ์๋ ์ธ๊ทธ๋จผํธ๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋ํฐ๋ ๋ฌดํ์ ์ผ ์ ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ธ์ ํ๋ํ ๋ค์ ์ ๊ธ์ ํด์ ํ๊ธฐ ์ ์ ๋ค๋ฅธ ์ธ๊ทธ๋จผํธ๋ก ์ถ์ถํ ๋๋ง๋ค ๋ฐ์ํฉ๋๋ค.
์์น์ ์ผ๋ก ๋ฌดํํ ์ฐ์ ๋คํธ์ํฌ ์ธ๊ทธ๋จผํธ๊ฐ ์ฃผ์ด์ง๋ฉด ์์คํ ์ ๋ฌดํํ ์๊ฐ ๋์ ์ฌ์ฉํ ์ ์๋ ์ํ๋ก ๋จ์ ์์ ์ ์์ต๋๋ค.
์ฑ๋ฅ, ์ฅ์ ์กฐ์น ๋ฐ fsync
๋ง์ ์ฌ๋๋ค์ด ์ ๊ธ์ ํ๋ํ๊ณ ํด์ ํ๋ ๋ฐ ํ์ํ ๋๊ธฐ ์๊ฐ๊ณผ ์ด๋น ์๋ฃํ ์ ์๋ ํ๋/ํด์ ํ์ ์ธก๋ฉด์์ ๋์ ์ ๊ธ ์๋ฒ ์ฑ๋ฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ Redis๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํด N Redis ์๋ฒ์ ํต์ ํ์ฌ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ์ ๋ต์ด ์์ต๋๋ค. ์ด๋ ๋ฉํฐํ๋ ์ฑ ์ ๋ต(๋๋ ํด๋ผ์ด์ธํธ์ ๊ฐ ์ธ์คํด์ค ๊ฐ์ ์๋ณต ์๊ฐ์ด ๋น์ทํ๋ค๊ณ ๊ฐ์ ํ์ฌ ์์ผ์ ๋น์ฐจ๋จ ๋ชจ๋๋ก ์ค์ ํ๊ณ ๋ชจ๋ ๋ช ๋ น์ ๋ณด๋ธ ๋ค์ ๋์ค์ ๋ช ๋ น์ ์ฝ๋ "๊ฐ๋ํ ์ฌ๋์ ๋ฉํฐํ๋ ์ฑ")์ ๋๋ค. .
๊ทธ๋ฌ๋ ์ฅ์ ๋ก๋ถํฐ ์์ ์ ์ธ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ ๋ชจ๋ธ์ ๋ง๋ค๋ ค๋ฉด ์ฅ๊ธฐ ๋ฐ์ดํฐ ์ ์ฅ๊ณผ ๊ด๋ จ๋ ๊ณ ๋ ค ์ฌํญ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ช ํํ ํ๊ธฐ ์ํด ์ฅ๊ธฐ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ์ ํ ์๋ Redis๋ฅผ ๊ตฌ์ฑํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ธ์คํด์ค 3๊ฐ ์ค 5๊ฐ๋ฅผ ์ฐจ๋จํ์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ฐจ๋จํ ์ธ์คํด์ค ์ค ํ๋๊ฐ ๋ค์ ์์๋๊ณ , ํ์ฌ ๋์ผํ ๋ฆฌ์์ค์ ๋ํด 3๊ฐ์ ์ธ์คํด์ค๊ฐ ๋ค์ ๋ฐ์ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ฐจ๋จํ ์ ์์ผ๋ฉฐ, ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ๋ค์ ์์๋ ์ธ์คํด์ค๋ฅผ ์ฐจ๋จํ์ฌ ๋ณด์ ์์ฑ์ ์๋ฐํ ์ ์์ต๋๋ค. ์ ๊ธ์ ๋ ์ ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
AOF(Data Ahead)๋ฅผ ํ์ฑํํ๋ฉด ์ํฉ์ด ์ฝ๊ฐ ๊ฐ์ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด SHUTDOWN ๋ช
๋ น์ ๋ณด๋ด๊ณ ๋ค์ ์์ํ์ฌ ์๋ฒ๋ฅผ ์น๊ฒฉํ ์ ์์ต๋๋ค. Redis์ ๋ง๋ฃ ์์
์ ์๋ฒ๊ฐ ๊บผ์ง ๊ฒฝ์ฐ์๋ ์๊ฐ์ด ๊ณ์ ํ๋ฅด๋๋ก ์๋ฏธ๋ก ์ ์ผ๋ก ๊ตฌํ๋๋ฏ๋ก ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ๊ด์ฐฎ์ต๋๋ค. ์ ์์ ์ธ ์ข
๋ฃ๊ฐ ๋ณด์ฅ๋๋ ํ ์ด๋ ์ ์์ ์ธ ํ์์
๋๋ค. ์ ์ ์ด ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์? Redis๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก fsync๊ฐ ๋งค์ด๋ง๋ค ๋์คํฌ์์ ๋๊ธฐํ๋๋๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ๋ค์ ์์ํ ํ ํค๊ฐ ์์ ์๋ ์์ต๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ๋ค์ ์์ํ๋ ๋์ ์ ๊ธ ๋ณด์์ ๋ณด์ฅํ๋ ค๋ฉด ๋ค์์ ํ์ฑํํด์ผ ํฉ๋๋ค. fsync=always
๋ฐ์ดํฐ ์ฅ๊ธฐ ์ ์ฅ ์ค์ ์์ ์ด๋ ๋ถ์ฐ ์ ๊ธ์ ์์ ํ๊ฒ ๊ตฌํํ๋ ๋ฐ ์ ํต์ ์ผ๋ก ์ฌ์ฉ๋๋ CP ์์คํ
์์ค๊น์ง ์ฑ๋ฅ์ ์์ ํ ์ ํ์ํต๋๋ค.
๊ทธ๋ฌ๋ ์ํฉ์ ์ธ๋ป ๋ณด์ด๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. ์์น์ ์ผ๋ก ์ธ์คํด์ค๊ฐ ์คํจ ํ ๋ค์ ์์๋๋ฉด ํ์ฌ ํ์ฑํ๋ ์ ๊ธ์ ๋ ์ด์ ์ฐธ์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์์ด ์ ์ง๋ฉ๋๋ค.
์ด๋ฅผ ๋ณด์ฅํ๋ ค๋ฉด ์ฅ์ ํ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ต๋ TTL์ ์ฝ๊ฐ ์ด๊ณผํ๋ ๊ธฐ๊ฐ ๋์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํ๋ก ์ ์งํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ค๋ฅ ๋ฐ์ ์ ํ์ฑํ๋ ๋ชจ๋ ํค์ ๋ง๋ฃ ๋ ์ง์ ์๋ ํด์ ๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ง์ฐ๋ ์ฌ์์์ ์ฌ์ฉํ๋ฉด ์์น์ ์ผ๋ก Redis์ ์ฅ๊ธฐ๊ฐ ์ง์์ฑ์ด ์๋๋ผ๋ ๋ณด์์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๋ค๋ง, ์ ๊ทผ์ฑ ์๋ฐ์ผ๋ก ์ธํด ๋ฒ๊ธ์ด ๋ถ๊ณผ๋ ์ ์์ผ๋ ์ฃผ์ํ์๊ธฐ ๋ฐ๋๋๋ค. ์๋ฅผ ๋ค์ด ๋๋ถ๋ถ์ ์ธ์คํด์ค๊ฐ ์คํจํ๋ฉด ์์คํ ์ TTL ๋์ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค(์ด ์๊ฐ ๋์ ์ด๋ค ๋ฆฌ์์ค๋ ์ฐจ๋จ๋ ์ ์์ต๋๋ค).
์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฉ์ฑ์ ๋์ ๋๋ค. ์ฐจ๋จ ๊ธฐ๋ฅ์ ํ์ฅํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ํํ๋ ์์ ์ด ์์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ ๊ธ ๊ธฐ๊ฐ์ ์ค์ด๊ณ ์ ๊ธ ์ฐ์ฅ์ ์ํ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์์น์ ์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ๊ณ์ฐ ์ค์ด๊ณ ์ ๊ธ ๋ง๋ฃ ๊ฐ์ด ์ํํ ์ ๋๋ก ๋ฎ์ ๊ฒฝ์ฐ ํค๊ฐ ์ฌ์ ํ ์กด์ฌํ๊ณ ํด๋น ๊ฐ์ด ์ฌ์ ํ ์์์ ๊ฐ์ผ ๋ ํค์ TTL์ ํ์ฅํ๋ ๋ชจ๋ ์ธ์คํด์ค์ Lua ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ์ ๊ธ์ ํ๋ํ์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์ ํจ ๊ธฐ๊ฐ ๋ด์ ๋๋ถ๋ถ์ ์ธ์คํด์ค๋ฅผ ์ ๊ทผ ๊ฒฝ์ฐ์๋ง ์ ๊ธ์ ๋ค์ ํ๋ํด์ผ ํฉ๋๋ค.
์ฌ์ค, ๊ธฐ์ ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ์ ๊ธ์ ํ๋ํ๋ ค๋ ์ต๋ ๋ฐ๋ณต ์๋ ํ์๋ ์ ํ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๊ทผ์ฑ ์์ฑ์ด ์๋ฐ๋ฉ๋๋ค.
์ถ์ฒ : habr.com