โจ Mybatis Cache
์บ์ ๊ธฐ๋ฅ ํ์ฉ
- ๋์ ์ ์์ ์๊ฐ ๋ง์์ ์ฑ๋ฅ์ด ๋ฌธ์ ๊ฐ ๋๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ๊ฐ์ ์ MyBatis ์บ์๊ฐ ํจ๊ณผ์
- ์กฐํ๊ฐ ํจ์ฌ ๋ ๋ง์ ํ ์ด๋ธ or Mapper๋ฅผ ํตํด์๋ง ๊ทธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ๊ฒฝ์ฐ
์ ๋ณด ์์คํ ์์ ๋ณ๋ชฉ ์ง์ ์ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ์ด ์ ๋ณด์์คํ ์ฑ๋ฅ์ ๊ด๊ฑด์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์(cache)๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ํฅ์์ ์์ฃผ ํฐ ๋์์ด ๋๋ค.
Mybatis์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์๋ mapper ๋ง๋ค ๋ฐ๋ก ์์ฑ๋๋ค.
โจ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์บ์ ์ ์ฐจ
- mapper์ ์กฐํ ๋ฉ์๋๋ @select(…) ์ ์ ์๋ SELECT SQL ๋ช ๋ น์ DB์์ ์คํํ๋ค.
- ์กฐํ ๊ฒฐ๊ณผ๋ฅผ mapper์ ์บ์์ ์ ์ฅํ๋ค. ์บ์๋ HashMap ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์กฐํ ๋ฉ์๋ ์ด๋ฆ๊ณผ ํ๋ผ๋ฏธํฐ ๊ฐ์ ํค ๋ก, ์กฐํ ๊ฒฐ๊ณผ value๋ก ์บ์์ ์ ์ฅํ๋ค.
- mapper์ ์กฐํ ๋ฉ์๋๋ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.
- mapper์ ์กฐํ ๋ฉ์๋๊ฐ ๋ ํธ์ถ๋๋ฉด, ์กฐํ ๋ฉ์๋ ์ด๋ฆ๊ณผ ํ๋ผ๋ฏธํฐ ๊ฐ์ ํค(key)๋ก, ์ ์ ์ ์ฅํด๋ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์บ์์์ ์ฐพ๋๋ค.
- ์บ์์์ ์ฐพ์๋ค๋ฉด, DB์์ ๋ค์ ์กฐํํ์ง ์๊ณ , ์บ์์์ ์ฐพ์ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๋ค.
- ์บ์์์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ์ ์ฐจ 1๋ฒ์ผ๋ก ๋์ด๊ฐ์, DB์์ ์กฐํํ๋ค.
*DB ์์ ๋ค์ ์กฐํํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฅ ๋ฆฌํดํ๊ฒ ๋๋ฏ๋ก ์ฑ๋ฅ ํฅ์ ํจ๊ณผ๊ฐ ํฌ๋ค.
โจ ๋ฐ์ดํฐ ์์
์๋ฅผ ๋ค์ด ํ๊ธธ๋ ํ์ ๋ฐ์ดํฐ๊ฐ StudentMapper์ ์บ์์ ์์ ๋,
DB์์ ํ๊ธธ๋ ํ์ ๋ ์ฝ๋๊ฐ ์์ ๋๋ฉด,
์์ ๋ ํ๊ธธ๋ ํ์ ๋ ์ฝ๋์, ์บ์์ ์๋ ํ๊ธธ๋ ํ์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์์ ๊ฒ์ด๋ค.
์ด ๋ถ์ผ์น ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ๋๋ค.
- mapper ์์ insert/update/delete ๋ฉ์๋๊ฐ ํ๋๋ผ๋ ์คํ์ด ๋๋ฉด, ๊ทธ mapper์ ์บ์๋ฅผ ์ ๋ถ ๋น์ด๋ค.
- ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก mapper์ ์บ์๋ฅผ ์๋์ผ๋ก ๋น์ด๋ค.
DB์์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ๊ฒ์ mybatis๊ฐ ํ๋จํ ๋,
mybatis๋ ์ค์ง mapper์ ๋ฉ์๋๋ง ๋ณด๊ณ ํ๋จํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, mapper์ ๋ฉ์๋๋ฅผ ํตํ์ง ์๊ณ DB ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ๊ฒฝ์ฐ์๋,
DB์์ ๋ฐ์ดํฐ๊ฐ ์์ ๋์๋ค๋ ์ฌ์ค์ mybatis๋ ์ ์ ์๋ค.DB์์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ๊ฒ์ mybatis๊ฐ ํ๋จํ ๋,
mybatis๋ mapper์ @select, @insert, @update, @delete ์ด๋ ธํ ์ด์ ์ข ๋ฅ๋ง ๋ณด๊ณ ํ๋จํ๋ค.
@select ์ด๋ ธํ ์ด์ ์ด ๋ถ์ mapper ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ง ์๋ ๊ฒ์ผ๋ก ํ๋จํ๊ณ ,
@insert, @update, @delete mapper ๋ฉ์๋๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋์ง์ ์๊ด ์์ด,
์ค์ง ๊ทธ mapper์ ์บ์๋ง ๋น์ด๋ค.
์๋ฅผ ๋ค์ด StudentMapper์ insert ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด,
StudentMapper์ ์บ์๋ง ๋น์์ง๊ณDepartmentMapper์ ์บ์๋ ๋น์์ง์ง ์๋๋ค.
๋ง์ฝ StudentMapper์ insert ๋ฉ์๋์์ Department ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค๋ฉด,
DepartmentMapper์ ์บ์๋ ๋น์์ง์ง ์๊ธฐ ๋๋ฌธ์ ์์ ๋๊ธฐ ์ ๋ฐ์ดํฐ๊ฐ ์บ์์ ๋ค์ด์๊ฒ ๋๋ค.
๊ทธ๋์ DepartmentMapper์ ์บ์์ Department ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ถ์ผ์นํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
โ๏ธ๋ฐ๋ผ์ mapper๋ฅผ ๊ตฌํํ ๋ ๋ค์ ๊ท์น์ ์ง์ผ์ผ ํ๋ค.
- ํ ์ด๋ธ ๋ง๋ค mapper๋ฅผ ๋ฐ๋ก ๊ตฌํํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ SQL๋ฌธ์ ๊ทธ ํ ์ด๋ธ์ mapper์๋ง ๊ตฌํํ๋ค.
*์์ ์ํฉ์ ๋ค ์ง์ผ๋ ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์๋ค. ( ํ ์ด๋ธ JOIN )
๋์ ์ ์์๊ฐ ๋ง์ ๋ค์ด๋ฒ ๋ด์ค์ ์ฒซ ํ์ด์ง๊ฐ, 1์ด ๋์ ํ๊ท ๋ง๋ฒ ์กฐํ๋๋ค๊ณ ํ ๋,
1์ด ์๊ฐ ๊ฐ๊ฒฉ์ DB ์บ์๊ฐ ์๋ค๋ฉด,
1์ด์ 1๋ง ๋ฒ์ด ์๋๋ผ ํ ๋ฒ๋ง DB์์ ๊ธฐ์ฌ ๋ชฉ๋ก์ ์กฐํํ๋ฉด ๋๊ณ ,
9999๋ฒ์ ์บ์์์ ๊ธฐ์ฌ ๋ชฉ๋ก์ด ๋ฆฌํด๋ ๊ฒ์ด๋ค.
1์ด ๋์ 1๋ง๋ฒ์ ์กฐํ๊ฐ 1๋ฒ์ผ๋ก ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ํฅ์ ํจ๊ณผ๊ฐ ๋งค์ฐ ํฌ๋ค.
๋์ ์ ์์ ์๊ฐ ๋ง์ ์๋ก ๊ทธ๋ฆฌ๊ณ ์์ฃผ ์์ ๋์ง ์๋ ํ ์ด๋ธ์ผ ์๋ก
๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์์ ์ฑ๋ฅ ๊ฐ์ ํจ๊ณผ๊ฐ ํฌ๋ค.
๋ค์ด๋ฒ์ ์นดํ ๊ฒ์ํ, ๋ธ๋ก๊ทธ, ๋ด์ค ์ฌ์ดํธ๋ค์ ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ ์์ ์ ์์ฃผ ๋๋ฌผ๊ณ , ๋์ ์ ์์ ์๋ ์์ฃผ ๋ง๋ค.
์นดํ, ๋ธ๋ก๊ทธ, ๋ด์ค ๋ชจ๋ ์ต์ ๋ฐ์ดํฐ ์์ฃผ๋ก ์กฐํ๋๋ค.
๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ ์์ฒญ ๋ง์ง๋ง ๊ฑฐ์ ์กฐํ๋์ง ์๋๋ค.
๋ด์ค์ ๊ฒฝ์ฐ ์กฐํ๊ฐ ๋ชฐ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ๋ช ๊ฐ ๋์ง ์๋๋ค.
์์ ๊ฐ์ ์ฌ์ดํธ๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์์ ์ฑ๋ฅ ๊ฐ์ ํจ๊ณผ๋ ๋งค์ฐ ํด ๊ฒ์ด๋ค.
โจ ์บ์ ๊ตฌํ
mybatis mapper ํด๋์ค์ @CacheNamespace ์ด๋ ธํ ์ด์ ๋ง ๋ถ์ฌ์ฃผ๋ฉด ์บ์ ๊ธฐ๋ฅ์ด ํ์ฑํ ๋๋ค.
*(์บ์ฌ ๊ธฐ๋ฅ ๊ตฌํ์ ์ฌ์ํ ์ ๋๋ก ๊ฐ๋จํ๋ค. ์ด ๊ธฐ๋ฅ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์)
mapper ํด๋์ค ์์
- @CacheNamespace(flushInterval=1000, size=2048)
- flushInterval์ ์บ์๊ฐ ์๋์ผ๋ก ๋น์์ง๋ ์๊ฐ ๊ฐ๊ฒฉ์ด๋ค. (๋จ์ ๋ฐ๋ฆฌ์ด)
- size - ์บ์์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ค. ์บ์์ ์ ์ฅํ ์กฐํ ๊ฒฐ๊ณผ์ ์ (์๋ต ๊ฐ๋ฅ)
- ์๊ฐ ๊ฐ๊ฒฉ์ด ์งง์ ์๋ก ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฐ์ ๊ธฐ๊ฐ์ด ์งง์์ง๋ค.
DTO ํด๋์ค ์์
- implements Serializable
- private static final long serialVersionUID = 1L;
mybatis cache ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- select ํ๊ทธ๋ก ์ ์๋ ๋ชจ๋ mapper ๋ฉ์๋์ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ์บ์์ ์ ์ฅ๋๋ค.
- insert/update/delete ์ด๋ ธํ ์ด์ ๋ก ์ ์๋ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ๊ทธ mapper์ ์บ์๊ฐ ์ ๋ถ ๋น์์ง๋ค.
- ์กฐํ ๊ฒฐ๊ณผ๋ ์ต๋ 1024๊ฐ๋ง ์ ์ฅ๋๋ค.
- ์บ์๊ฐ ๊ฝ ์ฐจ๋ฉด ๋จผ์ LRU(Least Recently Used) ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ์ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ค.
- LRU = ๋ฐ์ดํฐ ์ฌ์ฉ ์๊ฐ์ด ๊ฐ์ฅ ์ค๋๋ ํญ๋ชฉ
๋ ๊ด๋ จ ํ ์ด๋ธ์ด๋,
์๊ฐ์ ์ฒญ ํ ์ด๋ธ ์ฒ๋ผ ์ ๊น์ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ ํ์ฉํ ์ ์๋ ํ ์ด๋ธ์๋ cache ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์๋๋ค.โํ๊ณผ๋ช ํ ์ด๋ธ์ด cache๋ฅผ ์ฌ์ฉํ ๋งํ ํ ์ด๋ธ์ด๋ค.
ํ๊ณผ๋ช ์ ๊ฑฐ์ ์์ ๋์ง ์๊ณ , ๋ง์ฝ ์์ ๋์ด๋ 1์ด ์ ๋ ํ๊ณผ๋ช ๋ถ์ผ์น๋ ๋ณ ๋ฌธ์ ์๋๋ค.
'FrameWork > MyBatis' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[MyBatis] ๊ฒ์ํ ํ์ด์ง (Pagination) Mysql&Oracle (0) | 2022.06.02 |
---|