์ค๋์ Spring Cache์์ ์์ฃผ ์ฐ์ด๋ 3๋ ์ด๋
ธํ
์ด์
์ธ @Cacheable, @CachePut, @CacheEvict์ ๋ํด ์์๋ณด์ โ
Spring Cache๋ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ์บ์์ ์ ์ฅํ๊ฑฐ๋ ๊ฐฑ์ ํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๊ฒ ํด์ฃผ๋ ์ ์ธ์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ค๋์ ๊ทธ ํต์ฌ ์ด๋
ธํ
์ด์
์ธ @Cacheable, @CachePut, @CacheEvict์ ๋ํด ์์๋ณด์
1 . ๐ฒ @Cacheable์ด๋?
- ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด DB๋ API ํธ์ถ ์์ด ์บ์์์ ๋ฐ๋ก ๊บผ๋ด์ค๋ ๋ฐฉ์์ด๋ค.
- ์ฆ, ์ด๋ฏธ ์กด์ฌํ๋ฉด ์บ์์์ ๊ฐ์ ธ์ค๊ณ ์์ผ๋ฉด ์คํ ํ ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅํ๋ค๋ ๊ฐ๋
์ด๋ค.
- ์ฃผ๋ก ์กฐํ( READ ) ์ฑ๊ฒฉ์ด ๊ฐํ ๋ฉ์๋์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
ํต์ฌ ํค์๋ : ์กฐํ ์ต์ ํ
@Cacheable(value = "books", key = "#id")
public Book findBookById(Long id) {
log.info("DB ์กฐํ ์คํ!");
return bookRepository.findById(id).orElseThrow();
}
- ์ฒซ ํธ์ถ ์์๋ DB์์ ๊ฐ์ ธ์ค๊ณ ์บ์์ ์ ์ฅ
- ๊ทธ ๋ค์ ํธ์ถ๋ถํฐ๋ DB๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์บ์์์ ๋ฐํ ( ๋ก๊ทธ๊ฐ ์ฐํ์ง ์๋๋ค. )
2 . ๐ @CachePut์ด๋?
- ์บ์๋ฅผ ๋ฌด์กฐ๊ฑด ๊ฐฑ์ ( update )ํ๋ค.
- ๋ฉ์๋๋ ํญ์ ์คํ๋๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์บ์์ ๋ฐ์๋๋ค.
- ์ฃผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ( update ) ์์
์ดํ ์บ์๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ ๋ ์ฌ์ฉํ๋ค.
ํต์ฌ ํค์๋ : ์บ์ ๋๊ธฐํ
@CachePut(value = "books", key = "#book.id")
public Book updateBook(Book book) {
log.info("DB ์์ + ์บ์ ๊ฐฑ์ ์คํ!");
return bookRepository.save(book);
}
- DB์ ๋ฐ์๋ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ณง ๋ฐ๋ก ์บ์์๋ ๋ฎ์ด์จ์ ์กฐํ ์ ์ค๋๋ ์บ์๊ฐ ๋ฐํ๋๋ ๋ฌธ์ ๋ฅผ ์๋ฐฉ !
3 . ๐งน @CacheEvict๋?
- ์บ์๋ฅผ ์ญ์ ( ๋ฌดํจํ ) ํ๋ค.
- ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋ ๋, ๊ธฐ์กด ์บ์๋ฅผ ์ง์์ฃผ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
- allEntries = true ์ต์
์ ์ฃผ๋ฉด ํด๋น ์บ์ ์์ญ ์ ์ฒด๋ฅผ ๋น์ธ ์๋ ์๋ค.
ํต์ฌ ํค์๋ : ์บ์ ์ ๋ฆฌ
@CacheEvict(value = "books", key = "#id")
public void deleteBook(Long id) {
log.info("DB ์ญ์ + ์บ์ ๋ฌดํจํ ์คํ!");
bookRepository.deleteById(id);
}
- ํน์ ID์ ๋ํ ์บ์๋ง ์ ๊ฑฐ ๊ฐ๋ฅ
- or ํ์์ ์ ์ฒด ์บ์ ๋ ๋ฆฌ๊ธฐ๋ ๊ฐ๋ฅ
4 . ๐ฉ๐ปโ๐ซ ์ธ์ ์ด๋ค ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ผํ ๊น?
- @Cacheable -> ์กฐํ ์ฑ๋ฅ ์ต์ ํ ํ์ํ ๋ฉ์๋ ( ex. ๋์ ์์ธ ์กฐํ, ์ธ๊ธฐ ๊ธ ๋ชฉ๋ก )
- @CachePut -> DB์ ์ ์ฅ/์์ ํ ์บ์๊น์ง ์ต์ ํ๊ฐ ํ์ํ ๋ฉ์๋ ( ex. ๊ฒ์๊ธ ์์ , ์ฌ์ฉ์ ํ๋กํ ๋ณ๊ฒฝ )
- @CacheEvict -> ๋ฐ์ดํฐ ์ญ์ ๋ ๋ณ๊ฒฝ ์ ๋ก์ ์บ์๋ฅผ ๋น์์ผํ๋ ๊ฒฝ์ฐ ( ex. ๊ฒ์๊ธ ์ญ์ , ์๋ฆผ ์ญ์ )
5 . ๋ง๋ฌด๋ฆฌ ๐
Spring Cache๋ ๋จ์ํด ๋ณด์ด์ง๋ง,
์ฌ๋ฐ๋ฅธ ์บ์ ์ ๋ต์ ์ธ์ฐ์ง ์์ผ๋ฉด ์ค๋๋ ๋ฐ์ดํฐ ์ ๊ณต์ด๋ ๋ถํ์ํ ์บ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ค๋ ์์๋ณธ @Cachealbe, @CachePut, @CacheEvict์ ์ญํ ๊ณผ ์ํฉ์ ์ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ค๋ฉด ์กฐํ ์ฑ๋ฅ์ ๋์ด๋ฉด์๋ ํญ์ ์ต์ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฅํ๋ ์ค๋งํธํ ์บ์ฑ ์ ๋ต์ ์ธ์ธ ์ ์์ ๊ฒ์ด๋ค ๐ฏ