๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
FrameWork/MyBatis

MyBatis Cache ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

by yunamom 2022. 3. 10.
๋ฐ˜์‘ํ˜•

โœจ Mybatis Cache 

 ์บ์‹œ ๊ธฐ๋Šฅ ํ™œ์šฉ 

  • ๋™์‹œ ์ ‘์†์ž ์ˆ˜๊ฐ€ ๋งŽ์•„์„œ ์„ฑ๋Šฅ์ด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์— MyBatis ์บ์‹œ๊ฐ€ ํšจ๊ณผ์ 
  • ์กฐํšŒ๊ฐ€ ํ›จ์”ฌ ๋” ๋งŽ์€ ํ…Œ์ด๋ธ” or Mapper๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ทธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒฝ์šฐ

์บ์‹œ ์‹คํ–‰ ์ ˆ์ฐจ

์ •๋ณด ์‹œ์Šคํ…œ์—์„œ ๋ณ‘๋ชฉ ์ง€์ ์€ ๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ •๋ณด์‹œ์Šคํ…œ ์„ฑ๋Šฅ์˜ ๊ด€๊ฑด์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹œ(cache)๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์•„์ฃผ ํฐ ๋„์›€์ด ๋œ๋‹ค.

Mybatis์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹œ๋Š” mapper ๋งˆ๋‹ค ๋”ฐ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

โœจ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์บ์‹œ ์ ˆ์ฐจ

  1. mapper์˜ ์กฐํšŒ ๋ฉ”์†Œ๋“œ๋Š” @select(…) ์— ์ •์˜๋œ SELECT SQL ๋ช…๋ น์„ DB์—์„œ ์‹คํ–‰ํ•œ๋‹ค.
  2. ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ mapper์˜ ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค. ์บ์‹œ๋Š” HashMap ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  3. ์กฐํšŒ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ํ‚ค ๋กœ, ์กฐํšŒ ๊ฒฐ๊ณผ value๋กœ ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค.
  4. mapper์˜ ์กฐํšŒ ๋ฉ”์†Œ๋“œ๋Š” ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  5. mapper์˜ ์กฐํšŒ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋˜ ํ˜ธ์ถœ๋˜๋ฉด, ์กฐํšŒ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ํ‚ค(key)๋กœ, ์ „์— ์ €์žฅํ•ด๋‘” ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์—์„œ ์ฐพ๋Š”๋‹ค.
  6. ์บ์‹œ์—์„œ ์ฐพ์•˜๋‹ค๋ฉด, DB์—์„œ ๋‹ค์‹œ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ , ์บ์‹œ์—์„œ ์ฐพ์€ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  7. ์บ์‹œ์—์„œ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์ ˆ์ฐจ 1๋ฒˆ์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ, DB์—์„œ ์กฐํšŒํ•œ๋‹ค.

*DB ์—์„œ ๋‹ค์‹œ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ ํšจ๊ณผ๊ฐ€ ํฌ๋‹ค.


โœจ ๋ฐ์ดํ„ฐ ์ˆ˜์ • 

์˜ˆ๋ฅผ ๋“ค์–ด ํ™๊ธธ๋™ ํ•™์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ StudentMapper์˜ ์บ์‹œ์— ์žˆ์„ ๋•Œ,

DB์—์„œ ํ™๊ธธ๋™ ํ•™์ƒ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด,

์ˆ˜์ •๋œ ํ™๊ธธ๋™ ํ•™์ƒ ๋ ˆ์ฝ”๋“œ์™€, ์บ์‹œ์— ์žˆ๋Š” ํ™๊ธธ๋™ ํ•™์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

์ด ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋œ๋‹ค.

  1. mapper ์—์„œ insert/update/delete ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์‹คํ–‰์ด ๋˜๋ฉด, ๊ทธ mapper์˜ ์บ์‹œ๋ฅผ ์ „๋ถ€ ๋น„์šด๋‹ค.
  2. ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ 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๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋‹ค์Œ ๊ทœ์น™์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

  1. ํ…Œ์ด๋ธ” ๋งˆ๋‹ค mapper๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” SQL๋ฌธ์€ ๊ทธ ํ…Œ์ด๋ธ”์˜ mapper์—๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค.

*์œ„์˜ ์ƒํ™ฉ์„ ๋‹ค ์ง€์ผœ๋„ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ๋‹ค. ( ํ…Œ์ด๋ธ” JOIN )

 

๋™์‹œ ์ ‘์†์ž๊ฐ€ ๋งŽ์€ ๋„ค์ด๋ฒ„ ๋‰ด์Šค์˜ ์ฒซ ํŽ˜์ด์ง€๊ฐ€, 1์ดˆ ๋™์•ˆ ํ‰๊ท  ๋งŒ๋ฒˆ ์กฐํšŒ๋œ๋‹ค๊ณ  ํ•  ๋•Œ,

1์ดˆ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์˜ DB ์บ์‹œ๊ฐ€ ์žˆ๋‹ค๋ฉด,

1์ดˆ์— 1๋งŒ ๋ฒˆ์ด ์•„๋‹ˆ๋ผ ํ•œ ๋ฒˆ๋งŒ DB์—์„œ ๊ธฐ์‚ฌ ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๋ฉด ๋˜๊ณ ,

9999๋ฒˆ์€ ์บ์‹œ์—์„œ ๊ธฐ์‚ฌ ๋ชฉ๋ก์ด ๋ฆฌํ„ด๋  ๊ฒƒ์ด๋‹ค.

1์ดˆ ๋™์•ˆ 1๋งŒ๋ฒˆ์˜ ์กฐํšŒ๊ฐ€ 1๋ฒˆ์œผ๋กœ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ํ–ฅ์ƒ ํšจ๊ณผ๊ฐ€ ๋งค์šฐ ํฌ๋‹ค.

๋™์‹œ ์ ‘์†์ž ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๊ทธ๋ฆฌ๊ณ  ์ž์ฃผ ์ˆ˜์ •๋˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”์ผ ์ˆ˜๋ก

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹œ์˜ ์„ฑ๋Šฅ ๊ฐœ์„  ํšจ๊ณผ๊ฐ€ ํฌ๋‹ค.

๋„ค์ด๋ฒ„์˜ ์นดํŽ˜ ๊ฒŒ์‹œํŒ, ๋ธ”๋กœ๊ทธ, ๋‰ด์Šค ์‚ฌ์ดํŠธ๋“ค์˜ ๊ฒฝ์šฐ์— ๋ฐ์ดํ„ฐ ์ˆ˜์ •์€ ์•„์ฃผ ๋“œ๋ฌผ๊ณ , ๋™์‹œ ์ ‘์†์ž ์ˆ˜๋Š” ์•„์ฃผ ๋งŽ๋‹ค.

์นดํŽ˜, ๋ธ”๋กœ๊ทธ, ๋‰ด์Šค ๋ชจ๋‘ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์œ„์ฃผ๋กœ ์กฐํšŒ๋œ๋‹ค.

๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋Š” ์—„์ฒญ ๋งŽ์ง€๋งŒ ๊ฑฐ์˜ ์กฐํšŒ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‰ด์Šค์˜ ๊ฒฝ์šฐ ์กฐํšŒ๊ฐ€ ๋ชฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ ๋˜์ง€ ์•Š๋Š”๋‹ค.

์œ„์™€ ๊ฐ™์€ ์‚ฌ์ดํŠธ๋“ค์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์บ์‹œ์˜ ์„ฑ๋Šฅ ๊ฐœ์„  ํšจ๊ณผ๋Š” ๋งค์šฐ ํด ๊ฒƒ์ด๋‹ค.

 

โœจ ์บ์‹œ ๊ตฌํ˜„ 

mybatis mapper ํด๋ž˜์Šค์— @CacheNamespace ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋ถ™์—ฌ์ฃผ๋ฉด ์บ์‹œ ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™” ๋œ๋‹ค.

*(์บ์‰ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„์€ ์‚ฌ์†Œํ•  ์ •๋„๋กœ ๊ฐ„๋‹จํ•˜๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์ž˜ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”)

 mapper ํด๋ž˜์Šค ์ˆ˜์ • 

  •  @CacheNamespace(flushInterval=1000, size=2048)
  • flushInterval์€ ์บ์‹œ๊ฐ€ ์ž๋™์œผ๋กœ ๋น„์›Œ์ง€๋Š” ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด๋‹ค. (๋‹จ์œ„ ๋ฐ€๋ฆฌ์ดˆ)
  • size - ์บ์‹œ์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์บ์‹œ์— ์ €์žฅํ•  ์กฐํšŒ ๊ฒฐ๊ณผ์˜ ์ˆ˜ (์ƒ๋žต ๊ฐ€๋Šฅ)
  • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์งง์„ ์ˆ˜๋ก ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฐœ์ƒ ๊ธฐ๊ฐ„์ด ์งง์•„์ง„๋‹ค.

 

mapper

 DTO ํด๋ž˜์Šค ์ˆ˜์ • 

  • implements Serializable
  • private static final long serialVersionUID = 1L;
dto

mybatis cache ์˜ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. select ํƒœ๊ทธ๋กœ ์ •์˜๋œ ๋ชจ๋“  mapper ๋ฉ”์†Œ๋“œ์˜ ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์บ์‹œ์— ์ €์žฅ๋œ๋‹ค.
  2. insert/update/delete ์–ด๋…ธํ…Œ์ด์…˜๋กœ ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๊ทธ mapper์˜ ์บ์‹œ๊ฐ€ ์ „๋ถ€ ๋น„์›Œ์ง„๋‹ค.
  3. ์กฐํšŒ ๊ฒฐ๊ณผ๋Š” ์ตœ๋Œ€ 1024๊ฐœ๋งŒ ์ €์žฅ๋œ๋‹ค.
  4. ์บ์‹œ๊ฐ€ ๊ฝ‰ ์ฐจ๋ฉด ๋จผ์ € LRU(Least Recently Used) ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  5. LRU = ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ์‹œ๊ฐ์ด ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํ•ญ๋ชฉ

 

๋ˆ ๊ด€๋ จ ํ…Œ์ด๋ธ”์ด๋‚˜,

์ˆ˜๊ฐ•์‹ ์ฒญ ํ…Œ์ด๋ธ” ์ฒ˜๋Ÿผ ์ž ๊น์˜ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋„ ํ—ˆ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ…Œ์ด๋ธ”์—๋Š” cache ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.โŒ

ํ•™๊ณผ๋ช… ํ…Œ์ด๋ธ”์ด cache๋ฅผ ์‚ฌ์šฉํ• ๋งŒํ•œ ํ…Œ์ด๋ธ”์ด๋‹ค.

ํ•™๊ณผ๋ช…์€ ๊ฑฐ์˜ ์ˆ˜์ •๋˜์ง€ ์•Š๊ณ , ๋งŒ์•ฝ ์ˆ˜์ •๋˜์–ด๋„ 1์ดˆ ์ •๋„ ํ•™๊ณผ๋ช… ๋ถˆ์ผ์น˜๋Š” ๋ณ„ ๋ฌธ์ œ ์•„๋‹ˆ๋‹ค.

 

300x250

'FrameWork > MyBatis' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[MyBatis] ๊ฒŒ์‹œํŒ ํŽ˜์ด์ง• (Pagination) Mysql&Oracle  (0) 2022.06.02

์ฝ”๋“œ