본문 바로가기

JPA

1차 캐시와 2차 캐시

1. 캐시를 사용하는 이유

  • 애플리케이션 서버 내부 메모리에 접근하는 시간보다 네트워크를 통해 데이터베이스에 접근하는 시간 비용은 수만에서 수십만 배 이상 비싸다.
  • 그래서 조회한 데이터를 내부 메모리에 캐시 하면 서버의 성능을 획기적으로 올릴 수 있다.

 

2. 1차 캐시

1) 1차 캐시란?

  • 영속성 컨텍스트 내부에 엔티티를 보관하는 저장소를 1차 캐시라고 함.

2) 특징

  • 트랜잭션을 시작하고 종료할 때까지만 1차 캐시가 유효.
  • 클라이언트 요청 후 응답하기 전까지 1차 캐시가 유효.

3) 단점

  • scope가 너무 작다.
  • 즉, 애플리케이션 전체 범위가 아니므로, 성능을 획기적으로 향상하지는 못 함.

4) 내부 동작

  • 영속성 컨텍스트 내부 저장소에 보관되어 있음.
  • 클라이언트 요청을 받고 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 1차 캐시에 엔티티를 저장해놓는다. 그 후 응답을 하면, 영속성 컨텍스트가 종료되고 1차 캐시도 사라진다. **
  • 1차 캐시는 옵션이 아니라 필수이다. 즉, 영속성 컨텍스트 자체를 1차 캐시라고 할 수 있다.

 

3. 2차 캐시(공유 캐시)

1) 2차 캐시

  • 애플리케이션 범위의 캐시를 지원해주는 것을 의미.

2) 2차 캐시 특징

  • 애플리케이션에서 공유하는 캐시
  • 즉, 애플리케이션이 종료될 때까지 캐시가 유지된다.
  • 영속성 유닛(단위) 범위의 캐시
  • 조회한 객체의 복사본을 만들어서 반환
  • 데이터베이스 기본 키를 기준으로 캐시하지만 영속성 컨텍스트가 다르면 객체 동일성(a == b)을 보장하지 않는다.

 

3) 2차 캐시 동작 방식

(1) 2차 캐시에 찾는 데이터가 없는 경우

  1. 엔티티 매니저를 통해 데이터를 조회할 때, 우선 2차 캐시에서 찾는다.
  2. 데이터가 2차 캐시에 없다면, 데이터베이스에서 찾는다.
  3. 그 찾은 데이터를 2차 캐시에 보관한다.
  4. 2차 캐시는 그 저장된 데이터를 복사하여 객체를 리턴해준다.

(2) 2차 캐시에 찾는 데이터가 있는 경우

  1. 그 객체를 복사하여 리턴해준다.

4) 2차 캐시가 복사본을 만들어서 리턴하는 이유

  • 여러 곳에서 같은 객체를 동시에 수정하는 문제가 발생할 수 있으므로

 

 

 

'JPA' 카테고리의 다른 글

JPA  (0) 2021.11.02