[스프링] JPA 캐시

스프링 프레임워크에서 JPA를 사용할 때 캐시를 효율적으로 활용하는 방법에 대해 알아보겠습니다.

1. JPA 캐시란

JPA 캐시는 엔티티나 쿼리 결과를 메모리에 저장해두고 재사용함으로써 데이터베이스와의 불필요한 통신을 줄여 성능을 향상시키는데 사용됩니다.

2. JPA 캐시 종류

2.1. 엔티티 캐시

JPA에서는 엔티티를 조회할 때 그 결과를 캐시에 저장해두고, 동일한 엔티티가 다시 조회될 때 캐시된 결과를 반환함으로써 성능을 향상시킵니다.

2.2. 쿼리 캐시

JPA는 실행된 쿼리의 결과를 캐시에 저장해두고, 같은 쿼리가 실행될 때 캐시된 결과를 반환함으로써 성능을 향상시킵니다.

3. JPA 캐시 설정

JPA 캐시를 활성화하려면 persistence.xml 파일에 다음과 같이 프로퍼티를 추가합니다.

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>

4. JPA 캐시 활용

JPA 레파지토리나 엔티티 클래스에 @Cacheable 애노테이션을 사용하여 엔티티 캐시를 활성화할 수 있습니다.

@Entity
@Cacheable
public class Product {
    // 엔티티 클래스 내용
}

쿼리 캐시는 createQuery 메서드를 사용한 JPQL 쿼리에 대해 활성화할 수 있습니다.

TypedQuery<Product> query = entityManager.createQuery("SELECT p FROM Product p", Product.class);
query.setHint("org.hibernate.cacheable", true);
List<Product> products = query.getResultList();

JPA 캐시를 효과적으로 활용하여 어플리케이션의 성능을 향상시킬 수 있습니다.

참고 자료