
์ต๊ทผ ์ ๋ง ๋นํฉ์ค๋ฌ์ด ๊ฒฝํ์ ํ์ต๋๋ค. ํ์์ฒ๋ผ Java ์๋ฒ๋ฅผ ์ด์ํ๊ณ ์์๊ณ , ์ฌ์ฉ์ ์ธ์ ์ Redis์ ์ ์ฅํ๊ธฐ ์ํด Redisson์ ์ฌ์ฉํ๊ณ ์์์ด์. ๊ทธ๋ฐ๋ฐ ๊ฐ์๊ธฐ ์๋ฒ๊ฐ ํฐ์ก์ต๋๋ค. ์ด์ ๋ ๋ฐ๋ก ์ง๋ ฌํ๋ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋์๋๋ฐ, ์ญ์ง๋ ฌํ๊ฐ ์คํจํ๋ฉด์ ๋ฐ์ํ ๋๊ท๋ชจ ์ฅ์ ๋๋ฌธ์ด์์ต๋๋ค.
์ค๋์ ์ด ์ด์๋ฅผ ์ค์ฌ์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํ, Redisson ์ค์ , ์ค์ ์ฅ์ ์ํฉ, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง๋ฅผ ๊ณต์ ํฉ๋๋ค.
Redisson์ Java์์ Redis๋ฅผ ๋ง์น ๋ก์ปฌ Java ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ Redis ํด๋ผ์ด์ธํธ์ ๋๋ค. Redis๋ฅผ ๋จ์ํ ์บ์ ์๋ฒ๋ฅผ ๋์ด์ ๋ถ์ฐ ๋ฝ, ์ธ์ ์ ์ฅ์, pub/sub, ์๊ฒฉ ์๋น์ค ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
ํนํ Redisson์ Java ๊ฐ์ฒด๋ฅผ Redis์ ์ ์ฅํ ๋ ์๋์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ, ์ฌ๊ธฐ์ ๋ฌธ์ ์ ์์์ด ์์์ต๋๋ค.
| ๊ฐ๋ | ์ค๋ช |
|---|---|
| ์ง๋ ฌํ(Serialization) | Java ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ๋ณํํ์ฌ ํ์ผ, ๋คํธ์ํฌ, Redis ๋ฑ์ ์ ์ฅํ ์ ์๊ฒ ๋ง๋๋ ๊ณผ์ |
| ์ญ์ง๋ ฌํ(Deserialization) | ์ ์ฅ๋ ๋ฐ์ดํธ ๋ฐฐ์ด์ ๋ค์ Java ๊ฐ์ฒด๋ก ๋ณต์ํ๋ ๊ณผ์ |
๋ณดํต Java ๊ฐ์ฒด๊ฐ Serializable์ ๊ตฌํํ๊ณ ์์ผ๋ฉด ์ง๋ ฌํ/์ญ์ง๋ ฌํ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋... ๊ทธ๊ฑด ์ด๋๊น์ง๋ ๊ธฐ๋ณธ ์ง๋ ฌํ ๋ฐฉ์์ ์ฌ์ฉํ ๋ ์ด์ผ๊ธฐ์
๋๋ค.
Redisson์ ๊ธฐ๋ณธ์ ์ผ๋ก Java ์ง๋ ฌํ ๋ฐฉ์์ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ๋์ Codec์ด๋ผ๋ ์ค์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ง๋ ฌํํ ์ง๋ฅผ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
config.setCodec(new JsonJacksonCodec());
์ด๋ ๊ฒ JsonJacksonCodec์ด๋ KryoCodec ๊ฐ์ ์ฝ๋ฑ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ํด๋์ค ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ Java์ ๊ธฐ๋ณธ serialVersionUID ์ฒดํฌ๊ฐ ์๋ํ์ง ์์ต๋๋ค. ์ฆ, Redisson ์
์ฅ์์ "๊ธฐ์กด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๊ตฌ์กฐ์๋์ง"๋ฅผ ๋ชฐ๋ผ๋ฒ๋ฆฌ๋ ๊ฑฐ์ฃ .
๊ทธ๋์ ๊ฐ์ฒด์ ํ๋๋ฅผ ํ๋๋ง ์ถ๊ฐํด๋ ์ญ์ง๋ ฌํ๊ฐ ์คํจํฉ๋๋ค. ์์ธ๋ ๋๊ฐ ์ด๋ฐ ์์ผ๋ก ๋ฐ์ํฉ๋๋ค:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "newField"
๋ฌธ์ ๋ ์ฌ๊ธฐ์ ๋์ด ์๋๋๋ค. ์๋ฒ๋ ์ฌ์ฉ์์ ์ธ์ ์ Redis์์ ๊บผ๋ด์ค๋ฉด์ ์ด ์ญ์ง๋ ฌํ ์์ธ๊ฐ ์์ญ, ์๋ฐฑ ๋ฒ ๋ฐ์ํ๊ณ , ์ฐ๋ฆฌ๋ ๊ทธ๊ฑธ ๋ฌด์ฌ์ฝ try-catch๋ก ๊ฐ์์ต๋๋ค.
try {
Session session = redissonClient.getBucket("session-key").get();
} catch (Exception e) {
logger.error("Session fetch failed", e);
}
ํ์ง๋ง ์ฌ์ฉ์ ์๊ฐ ๋ง๋ค ๋ณด๋ ์์ธ๊ฐ ๊ณ์ ๋ฐ์ํ๊ณ , JVM์์ Exception ๊ฐ์ฒด๊ฐ ๊ณ์ ์์ฑ๋๊ณ GC๋์ง ์์ผ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๊ฒผ์ต๋๋ค. ๊ฒฐ๊ตญ ์๋ฒ๊ฐ OOM(Out Of Memory) ๋ก ์ฃฝ์ด๋ฒ๋ ธ์ต๋๋ค.
๋ฌธ์ ์ ์์ธ์ด ๊ธฐ์กด์ Redis์ ์ ์ฅ๋์ด ์๋ ์ง๋ ฌํ๋ ์ธ์ ๊ฐ์ฒด์๊ธฐ ๋๋ฌธ์, ์์ ํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค:
flushdb)์ฐ๋ฆฌ๋ ๊ณผ๊ฐํ๊ฒ flushdb๋ฅผ ์ ์ฉํ๊ณ , ์๋กญ๊ฒ ์ ์ฅ๋ ๊ตฌ์กฐ๋ถํฐ๋ ์ญ์ง๋ ฌํ์ ์คํจํ์ง ์์์ต๋๋ค.
์ด๋ฒ ์ฅ์ ๋ "๊ทธ๊น ํ๋ ํ๋ ์ถ๊ฐํ์ ๋ฟ์ธ๋ฐ..."๋ผ๋ ๋ฐฉ์ฌ์์ ์์๋ ๋์ฐธ์ฌ์์ต๋๋ค.
ํนํ Redisson์ฒ๋ผ ์ธ๋ถ ์ฝ๋ฑ์ ์ฐ๋ ํ๊ฒฝ์์๋ Java ๊ธฐ๋ณธ ์ง๋ ฌํ์ฒ๋ผ ๋์ํ์ง ์๋๋ค๋ ๊ฑธ ๊ผญ ๊ธฐ์ตํ์ธ์.
์ง๋ ฌํ๋ ๊ธฐ์ ์ด ์๋๋ผ ์ฝ์์ ๋๋ค.
๋ณ๊ฒฝ์ด ์์ ๋ ๋ฐ๋์ ๊ทธ ์ฝ์์ ์งํค๊ณ , ์งํฌ ์ ์๋ค๋ฉด ์๋ก์ด ์ฝ์์ ๋ง๋ค ์ค๋น๊ฐ ํ์ํฉ๋๋ค.
๐ ์ฝ๋๋ฅผ ๋ฐ๊พธ๊ธฐ ์ ์, ์ ์ฅ๋ ๊ฐ์ฒด๊ฐ ์ด๋์ ์๋์ง, ์ด๋ป๊ฒ ์ง๋ ฌํ๋์ด ์๋์ง๋ฅผ ๋จผ์ ํ์ธํด๋ณด๋ ์ต๊ด์ด ํ์ํฉ๋๋ค.