Java/JPA

JPA - 영속성컨텍스트(2)

ta_chan 2023. 9. 20. 00:47

1. 1차캐시

1차 캐시는 영속성 컨텍스트의 핵심 구성 요소 중 하나다. 이는 @Id (Entity의 식별자)를 키로, 해당 Entity 객체를 값으로 가지는 내부 맵 구조를 가지고 있다. 이러한 구조 덕분에, 특정 Entity를 조회할 때 데이터베이스를 직접 조회하기 전에 1차 캐시에서 해당 Entity를 찾을 수 있어 성능 이점을 가져오게 된다. 그러나, 이 1차 캐시의 생명 주기는 트랜잭션과 연결되어 있어 그 이점은 트랜잭션 범위에서만 유효하다.

2. 동일성 보장

JPA는 동일한 트랜잭션 내에서 같은 식별자를 가진 Entity에 대해 동일성(==)을 보장하게 한다. 이는 1차 캐시 덕분에 가능하다.

 

3. 트랜잭션을 지원하는 쓰기 지연

JPA는 Entity를 영속화(em.persist())할 때 즉시 데이터베이스에 쿼리를 전송하지 않는다. 대신, 해당 쿼리는 "쓰기 지연 SQL 저장소"에 임시로 저장되며, 트랜잭션이 커밋되는 시점에 데이터베이스로 전송된다.

4. 변경 감지 (더티 체킹)

JPA는 1차 캐시 내의 Entity 객체의 상태 변화를 감지할 수 있다. 이를 "더티 체킹"이라고 하며, 이 기능 덕분에 개발자는 직접 업데이트 쿼리를 작성할 필요 없이 객체의 상태만 변경하면 JPA가 이를 감지하고 적절한 쿼리를 생성해 데이터베이스에 반영한다.