캐시란?
데이터베이스와의 직접적인 상호작용을 최소화하여 응답 시간을 줄이고 자원 소모를 줄이는 데 도움을 준다.
Hibernate에서는 1차 캐시와 2차 캐시라는 두 가지 캐시 레벨을 제공한다.
1차 캐시는 Hibernate 세션 단위로 제공되며, 세션이 유지되는 동안만 유효하다.
1. 트랜잭션 범위 내에서 유효: 1차 캐시는 세션이 시작될 때 자동으로 생성되며, 세션이 종료되면 캐시된 데이터도 함께 사라집니다. 따라서 트랜잭션이 끝나면 캐시된 데이터는 더 이상 유효하지 않다.
2. 자동 관리: 개발자가 특별히 설정하지 않아도 세션이 시작될 때 자동으로 생성되고 관리된다. Hibernate는 동일한 세션 내에서 동일한 엔티티를 여러 번 조회할 때 1차 캐시를 사용하여 데이터베이스 접근을 최소화한다.
3. 세션 내 데이터 캐싱: 1차 캐시는 해당 세션 내에서만 유효하므로, 다른 세션에서는 캐시된 데이터를 사용할 수 없다.
참고 링크 :https://cococotea.tistory.com/10
2차 캐시는 애플리케이션 레벨에서 제공되며, 여러 세션에 걸쳐 데이터를 캐시할 수 있다.
1. 애플리케이션 범위 내에서 유효: 2차 캐시는 애플리케이션이 실행되는 동안 유효하며, 애플리케이션이 종료될 때까지 데이터를 유지한다. 따라서 여러 세션에서 동일한 데이터를 참조할 수 있다.
2. 수동 설정 필요: 2차 캐시는 기본적으로 비활성화되어 있으며, 개발자가 수동으로 설정해야 한다. 이는 주로 `yml` 파일 설정이나 엔티티 클래스에 어노테이션을 추가하는 방식으로 이루어진다.
3. 1차 캐시 우선 조회: 엔티티를 조회할 때 Hibernate는 먼저 1차 캐시를 확인하고, 1차 캐시에 데이터가 없을 경우에만 2차 캐시를 조회한다. 2차 캐시에도 데이터가 없으면 최종적으로 데이터베이스를 조회한다.
4. 다양한 캐시 제공자: 2차 캐시는 다양한 캐시 제공자(예: Ehcache, Hazelcast 등)를 통해 구현할 수 있으며, 설정에 따라 캐시 전략을 다양하게 구성할 수 있다.

이 두 가지 캐시를 적절히 활용하면 Hibernate 애플리케이션의 성능을 크게 향상시킬 수 있다. 1차 캐시는 트랜잭션 내에서의 효율성을, 2차 캐시는 애플리케이션 전체의 효율성을 높이는 데 기여한다.
| JPA 지연로딩, 즉시로딩, N+1문제 (1) | 2024.06.08 |
|---|---|
| FetchType.LAZY/FetchType.EAGER 에서의 N+1문제? (0) | 2024.06.01 |
| 연관 관계(OneToMany, ManyToOne) (0) | 2024.06.01 |
| JPA에서 Cascade Type을 지정하지 않으면? (0) | 2024.06.01 |
| [JPA/Hibernate] Flush란? (0) | 2024.05.30 |