[์ ๋ณด] Spring Boot Cache ์ฌ์ฉ๋ฐฉ๋ฒ ๋ฐ ์ฃผ์ ์ฌํญ
์ฃผ์์ฌํญ
์บ์ฑ์ค์ธ ๋ฐ์ดํฐ์ save ๋ฑ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ํ ๋ ๋น๊ต๊ตฌ๋ฌธ์ด ์์ผ๋ฉด ๋ฐ๋์ @CacheEvict ์ด๋ ธํ ์ด์ ์ผ๋ก ์บ์๋ฅผ Purgeํ๊ณ ํด์ผ ๊ฐ์ ์ค๋ณต์ฝ์ ์ ๋ฐฉ์งํ ์์๋ค.
์ค์ ๋ฐฉ๋ฒ
Spring Boot์์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด, ๋จผ์ @EnableCaching ์ด๋
ธํ
์ด์
์ ํตํด ์บ์ฑ์ ํ์ฑํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ํฐํด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์บ์ฑ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
1.์บ์ฑ์ ํ์ฑํํ๋ ค๋ฉด, ๋ฉ์ธ ๋ฉ์๋์ ์๋ ํด๋์ค์ @EnableCaching ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํฉ๋๋ค.
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.์กฐํํ๋ Repository ๋ฉ์๋์ @Cacheable ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์บ์๋ฅผ ์ ์ฉํฉ๋๋ค. ์ด ์์์๋ 'articles' ์บ์๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ์ต๋๋ค.
@Repository
public interface ArticleRepository extends JpaRepository<Article, Long> {
@Cacheable(value = "articles")
List<Article> findAll();
}
3.์๋ก์ด ์ํฐํด์ ์ ์ฅํ๊ฑฐ๋ ๊ธฐ์กด ์ํฐํด์ ์์ ํ ๋, ์บ์๋ฅผ ๋น์์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด @CacheEvict ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์์์๋ ์บ์๋ฅผ ๋น์ฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ํฐํด์ ์ ์ฅํ๋ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
@Service
public class ArticleService {
private final ArticleRepository articleRepository;
public ArticleService(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
@CacheEvict(value = "articles", allEntries = true)
public Article save(Article article) {
return articleRepository.save(article);
}
}
์ด๋ ๊ฒ ์ค์ ํ๋ฉด, ์ํฐํด์ ์กฐํํ ๋๋ง๋ค ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ํ, ์ํฐํด์ ์ ์ฅํ๊ฑฐ๋ ์์ ํ ๋๋ง๋ค ์บ์๋ฅผ ๋น์์ ํญ์ ์ต์ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.