EhCache๋ž€?

J_Eddyยท2022๋…„ 3์›” 13์ผ
0

๐Ÿ’ก EhCache๋ž€ ์บ์‹œ๋ฅผ ์บ์‹œ์ €์žฅ์†Œ์— ๋งŒ๋ฃŒ์‹œ๊ฐ„๊ณผ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ณ , ์‚ฌ์šฉ์ž ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ๋งŒ๋ฃŒ์‹œ๊ฐ„ ์ „ ์ด๋ผ๋ฉด ํ•ด๋‹น ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์›น๋ทฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ DB์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์™€ ํ•ด๋‹น ๊ฐ’์„ ID๋ณ„๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•ด ํ™”๋ฉด์— ๋ฟŒ๋ ค์ฃผ๋Š” ์ž‘์—…์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์ด ํŽ˜์ด์ง€์— ์ ‘์† ํ•  ๋•Œ ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด ์˜ค๊ธฐ ์œ„ํ•ด์„œ ๋งค๋ฒˆ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค DB์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ DB์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์ž˜ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋ผ๋ฉด ์บ์‹œ์— ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋ผ๋Š”๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

์บ์‹œ๋ž€?

์บ์‹œ๋Š” ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ , ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•˜์—ฌ ์ž„์‹œ์ €์žฅ์†Œ์— ๋„ฃ์–ด๋‘๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ณต์ ์œผ๋กœ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ
  • DB์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ

Spring Boot์—์„œ ์บ์‹œ ์‚ฌ์šฉ๋ฒ•

EnableCaching ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€

Spring์—์„œ Cacheable ๊ณผ ๊ฐ™์€ ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ์„ ์–ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. EnableCaching ์–ด๋…ธํ…Œ์ด์…˜์„ Config ํŒŒ์ผ์— ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

@EnableCaching
@Configuration
public class cacheConfig {
	...
}

์บ์‹œ Xml ์„ค์ •

EhChache๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ์˜ ์ด๋ฆ„, ์บ์‹œ์— ์ €์žฅํ•  ์‹œ๊ฐ„ ๋“ฑ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<ehcache>
...
<cache name='getData' eternal="true" maxElementsInMemory="300" overflowTodisk=false" timeToIdleSeconds="600" memoryStoreEvictionPolicy="LFU"></cache>

</ehcache>

maxElementsInMemory๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑ ๋˜์–ด์งˆ ์ตœ๋Œ€ ๊ฐ์ฒด์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

overflowTodisk๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋˜๋Š” ๊ฐ์ฒด๋“ค์„ ๋””์Šคํฌ์— ์ €์žฅ ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

timeToIdleSeconds๋Š” ํ•ด๋‹น ์‹œ๊ฐ„๋™์•ˆ ๊ฐฑ์‹  ํ•  ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

memoryStoreEvictionPolicy๋Š” maxElementsInMemory์— ๋„๋‹ฌ ํ–ˆ์„ ๋•Œ ๊ฐ์ฒด๋“ค์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • FIFO(First In First Out) ๊ฐ์ฒด๋“ค์„ ๋“ฑ๋ก์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฐ์ฒด๋ฅผ ์ง€์šฐ๊ณ  ์‹ ๊ทœ ๋“ฑ๋กํ•œ๋‹ค
  • LFU(Leat Frequently Used) ํ˜ธ์ถœ ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์‹ ๊ทœ ๋“ฑ๋กํ•œ๋‹ค.
  • LRU(Least Recently Used) ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ์ด ์•ˆ๋œ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์‹ ๊ทœ ๋“ฑ๋กํ•œ๋‹ค.
profile
๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ฌ๊ณ ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€