Cache#2 ์บ์์ ๋ํ ์ดํด
by JiwonDev๐ Cache
Cache๋ ์ปดํจํฐ ๊ณผํ์์, ๋ฐ์ด๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด๋๋ ์์ ์ ์ฅ์๋ฅผ ๊ฐ๋ฅดํจ๋ค. ํ๊ธ๋ก๋ ๊ณ ์์์ถฉ๊ธฐ์ต๊ธฐ..์ง๋ง ์๋ฌด๋ ๊ทธ๋ ๊ฒ ์๋ถ๋ฅธ๋ค
์ฑ๋ฅํฅ์์ ์ํด ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑ(์ ์ฅ)ํ์ฌ ๊ฐ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด๋ฉฐ ๋ณดํต ์ฌ์ฉํ๋ ์ ์ฅ์์๋ ์บ์ฑ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.
์ฌ๋ฌ ๋ถ์ผ์์ ๋ค์ํ ์๋ฏธ์ Cache๊ฐ ์ฌ์ฉ๋๊ณ ์์ง๋ง, ์คํ๋ง์์ ๋งํ๋ ์บ์ ์ถ์ํ๋ Java Method์ ๋ฐํ๊ฐ ์บ์ฑ์ ์๋ฏธํ๋ค.
์ฐธ๊ณ ๋ก ์คํ๋ง์ @Cacheable ์ด๋ ธํ ์ด์ ์ ํด๋์ค์ ๋ฌ๋ฉด, ํด๋น ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋์ ์บ์๊ฐ ์ ์ฉ๋๋ค.
๐ Cache ๋ฅผ ์ฌ์ฉํ ๋ ๊ณ ๋ คํด์ผํ ์
1. ์บ์๋ ๋ง๋ฅ์ด ์๋๋ค.
- ์บ์๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ์ฑ๋ฅ์ ํฅ์๊ณผ ์๋ฒ ๋ถํ ๋ฐฉ์ง์ด๋ค. ์์ฃผ ์กฐํ๋๋ ๊ณณ์ ์ฌ์ฉํด์ผ ์๋ฏธ๊ฐ ์๋ค.
- ์บ์๋ ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๋ ์ํฉ์์๋ง ์ ํจํ๋ค. ๋งค๋ฒ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ฑฐ๋ ์ ๋ฐ์ดํธ๋๋ค๋ฉด ์๋ฏธ๊ฐ ์๋ค
- ์บ์์ ์ ํจ์ฑ/์ ํจ์๊ฐ(TTL, Time to Live)๋ ์ ์๊ฐํด์ผํ๋ค. ์บ์ ๋๋ฌธ์ ์ต์ ์ด ์๋ ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ ๊ณตํ๊ณ ์์ ์ ์๋ค.
2. Local Cache ์ Global Cache
๋ก์ปฌ ์บ์๋ ๋ฉ๋ชจ๋ฆฌ, ์ฆ ๋ด๋ถ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์์ง๋ง ์๋ฒ๊ฐ์ ์บ์ ๊ณต์ ๊ฐ ์ด๋ ต๋ค.
๊ธ๋ก๋ฒ ์บ์๋ ์๋ฒ ์ธ๋ถ์ ์บ์์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฒ๊ฐ์ ์บ์ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ ๋คํธ์ํฌ I/O๊ฐ ํ์ํ๋ค๋ ๋จ์ ์ด ์๋ค.
๋จ์ํ '์๋'๋ง ์๊ฐํ๋ค๋ฉด ๋ก์ปฌ์บ์๊ฐ ์ข์๋ณด์ผ ์ ์์ผ๋ ๋ก์ปฌ์บ์๋ Scale-Out ์ ์ทจ์ฝํ๋ค.
- ๋ก์ปฌ ์ฅ๋น์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ์บ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก Was ์ธ์คํด์ค ํฌ๊ธฐ๊ฐ ์ปค์ง๊ฒ ๋๋ค.
- ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ(Sharding)ํ์ฌ ์ ์ฅํ ์ ์๋ค. Scale-Out ์ ์ ์ฒด๋ฅผ ๋ณต์ฌ(Replication) ํด์ผํ๋ค.
- ์บ์ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ด ๊นจ์ง ์ ์๋ค. ๊ฐ์ ์กฐํ์์ ์๋ฒ๋ง๋ค ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์๋ค.
- ์ด๋ฏธ ์บ์์ ์ ์ฅ๋์ด์๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, ์ ์ฒด ์๋ฒ์ ๋ณ๊ฒฝ์ ์ ํํด์ผํ๋ค.
Global Cache๋ ๋คํธ์ํฌ I/O์ ๋ฐ๋ฅธ ์ง์ฐ์๊ฐ์ด ์๊ธฐ์ง๋ง, ํธ๋ ์ด๋ ์คํ๋ฅผ ๊ณ ๋ คํด์ ์ฌ์ฉํด์ผํ๋ค. ์ ๋ต์ ์๋ค. ๋ด ์๋ฒ๊ฐ Scale-Outํ์ง ์๊ณ , ์ถํ ๋์ด๋๋ด์ผ 2๊ฐ ์ ๋๋ผ๋ฉด๋๋ผ๋ฉด ๋ก์ปฌ์บ์๋ฅผ ์ฌ์ฉํ๋๊ฒ ํจ์ฌ ์ข์ ์ ์๋ค.
๋ฌผ๋ก ๊ธฐ๋ฅ์ด๋ ์ํฉ์ ๋ฐ๋ผ ์ฌ๋ฌ๊ฐ์ง ์บ์ ๋ฐฉ๋ฒ์ ์์ด์ ์ฌ์ฉํ ์๋ ์๋ค.
3. ์ด์ ์๋ฒ์ ์บ์ ์ ์ฉ ์ ํ์ธํด์ผํ ์ฒดํฌ๋ฆฌ์คํธ ( ๊ด๋ จ ๊ธ ๋งํฌ )
- โ๏ธ ์บ์ ํํธ์จ (Cache hit ratio)๋ฅผ ๋ชจ๋ํฐ๋งํ์.
์นด๋๋ฆฌ ๋ฐฐํฌํ์ฌ ๋จผ์ hit, miss ํ์ธ ํ ์ ํจ๊ธฐ๊ฐ(TTL)์ด๋ ์บ์ ํฌ๊ธฐ๋ค์ ๊ณ ๋ คํด๋ณผ ์ ์๋ค. ์ด๋ ์๋ฒ ๋ชจ๋ํฐ๋ง์ผ๋ก ์ง์ ํ์ธํ์.
์๋ฅผ ๋ค์ด where in ์ ๋ก ์กฐํํ๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ์บ์ ํํธ์จ์ด ์์ฒญ ๋ฎ์ ์บ์๋ฅผ ๋ถ์ด๋๊ฒ ์คํ๋ ค ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
์ด ๋ ์บ์์์ ๋จผ์ ์กฐํํ ํ, ์๋ ๋ฐ์ดํฐ๋ง ๋ฐ๋ก ์กฐํ/ ์บ์์ ์ถ๊ฐํ๋ ๋ก์ง์ ์ถ๊ฐํด ์บ์ ์ ์ค๋ฅ ์ ๋์ผ ์ ์๋ค.
- โ๏ธ global cache๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์บ์ ๋๋ฌธ์ ์๋ชป๋ ์ ๋ฐ์ดํฐ๊ฐ ์ ๊ณต๋๋๊ฑด ์๋์ง ํ์ธํ์.
- โ๏ธ ์ธ์
์ฒ๋ผ Scale-Out ๋ ๋ชจ๋ ์๋ฒ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผํ๋๊ฑด ์๋์ง ํ์ธํ์
๋ฌผ๋ก global cache๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ์์ง๋ง, ์๋ฒ ์ฌ์ฉ๋์ด ์ ๋ง ๋ง์ ๊ฒฝ์ฐ ๋คํธ์ํฌ ์ง์ฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ์๋ ์๋ค.
์ ํฉ์ฑ์ด ์์ฒญ๋๊ฒ ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, local cache์ TTL์ ์งง๊ฒํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
๋ง์ฝ ์ ํฉ์ฑ์ด ์ค์ํ๋ค๋ฉด ์ด๋ฒคํธ ๋ฒ์ค๋ฅผ ๊ตฌ์ถํ์ฌ ์๋ณธ์ด ๋ณ๊ฒฝ๋์์ ๋, ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
(zookeeper, kafka ๊ฐ์ ๋ฉ์์ง ํ๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ์์ ์ด๋ฒคํธ ๊ตฌ๋ -> local cache ๊ฐฑ์ ) - โ๏ธ ๋ฐ์ดํฐ์ ๋ง๋ฃ์ผ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์บ์๊น์ง ๋ฐ์๋๋์ง ์ ์ฑ๊ฒจ์ผํ๋ค. ( ex 12์ 31์ผ 23์ 59๋ถ๊น์ง๋ง ์ฌ์ฉํ๋ ๋ฐ์ดํฐ)
์๋ฅผ ๋ค์ด DB ์ฟผ๋ฆฌ๋ก endData < '202212312359' ๊น์ง ๋์ํ๊ฒ ํด๋๊ณ , ์ดํ ๋ณ๊ฒฝํ๋ ๋ก์ง์ด ์์ ์ ์๋ค.
์ด ๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋์์ง๋ง, ์บ์๋ ๋ง๋ฃ๋์ง ์์์ผ๋ฏ๋ก ์ฌ์ ํ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค. ์บ์ ๋ฐ์ดํฐ๋ ํ์ธํด์ผํ๋ค.
๋ฐ๋๋ก 1์ 1์ผ 0์ 0๋ถ๋ถํฐ ์ ๊ณตํด์ผํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์บ์ TTL์ ๊ณ ๋ คํด์ ๋ง๋ค์ด์ผํ๋ค. - โ๏ธ ๊ฐ ์บ์์ ๋ํ ์ค์ (๋ง๋ฃ์ ์ฑ
, TTL, ์บ์ํฌ๊ธฐ..) ๋ฑ์ ๋ฌธ์ํํ์ฌ ์ผ๊ด์ ์ผ๋ก ๊ด๋ฆฌํด์ผํ๋ค.
ex) batch ๋ก ๊ฐฑ์ ๋๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ๋ฐฐ์น ์ฃผ๊ธฐ์ 20~30% ์ ๋๋ก TTL์ ์ค์ ์ ๊ถ์ฅํ๋ค. - โ๏ธ ์บ์๊ฐ ๋ณ์กฐ์ ๋ํด ๊ณ ๋ คํด์ผํ๋ค.
๋ก์ปฌ ์บ์์ ๊ฒฝ์ฐ, ์บ์๋ ๊ฐ์ฒด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ค๊ฐ ๋ด๋ถ ๊ฐ์ ์ค์๋ก ๋ณ๊ฒฝํ ์๋ ์๋ค. -> ๋ก์ปฌ ์บ์์์ ๊ฐ๋ ํจ๊ป ๋ณ๊ฒฝ๋ ์ ์๋ค
์บ์๊ฐ์ ๊ฐ๋ฅํ๋ฉด ๋ถ๋ณํ ๊ฐ์ฒด๋ก ์ฌ์ฉํ์. (๋ฌผ๋ก Json์ผ๋ก Serialization ํ์ฌ ์บ์ฑํ ํ, ์ฌ์ฉํ ๋ Deserialization ํ๋ฉด ๊ด์ฐฎ์)
..๊ณ์ํด์ ๋ด์ฉ ์ถ๊ฐํ ์์ ..
'๐ฑ Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Cache#1 ์คํ๋ง์ ์บ์ ์ถ์ํ(@Cacheable) (4) | 2024.05.26 |
---|
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev