[Mybatis] 캐시 무효화(캐시 관련 처리) 개념과 예제

캐시 무효화(Cache Invalidation)는 캐시에 저장된 데이터를 갱신하거나 제거하는 과정을 의미합니다. 데이터베이스나 외부 소스로부터 가져온 데이터를 캐시에 저장해 놓았을 때, 해당 데이터가 변경되거나 만료되었을 때 캐시를 갱신하거나 삭제하여 항상 최신 데이터를 유지하는 작업입니다.

MyBatis에서는 여러 가지 방법으로 캐시 무효화를 할 수 있습니다.

예제: 캐시 무효화

  1. 캐시 옵션 설정: MyBatis 설정 파일에서 캐시 관련 옵션을 설정합니다.
<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>` 
  1. 캐시 무효화: SqlSessionclearCache() 메서드를 호출하여 캐시를 모두 제거할 수 있습니다.
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    // 데이터 조회 및 캐시
    sqlSession.selectList("selectAllBooks");

    // 캐시 무효화
    sqlSession.clearCache();
} finally {
    sqlSession.close();
}` 
  1. 특정 캐시 무효화: 특정 쿼리에 대한 캐시만 무효화하려면 namespace.statementId를 지정하여 clearCache() 메서드를 호출합니다.
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    // 특정 쿼리에 대한 캐시 무효화
    sqlSession.clearCache("com.example.BookMapper.selectBookById");
} finally {
    sqlSession.close();
}` 
  1. 자동 캐시 무효화: 데이터를 추가, 수정 또는 삭제하는 쿼리를 실행할 때 자동으로 캐시가 무효화됩니다.
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
    // 데이터 추가, 수정, 삭제
    sqlSession.insert("insertBook", newBook);
    sqlSession.update("updateBook", updatedBook);
    sqlSession.delete("deleteBook", bookId);
    
    // 자동 캐시 무효화
} finally {
    sqlSession.close();
}` 

캐시 무효화는 캐시를 효율적으로 관리하여 데이터의 일관성을 유지하고 최신 데이터를 보여주는 데 중요한 역할을 합니다. MyBatis는 다양한 방식으로 캐시 무효화를 지원하며, 프로젝트의 요구 사항에 맞게 선택하여 사용할 수 있습니다.