영속성 컨텍스트

황희윤·2023년 7월 23일

JPA

자바 객체와 데이터베이스를 연결해 데이터를 관리하는 JPA의 중요한 컨셉 두 가지가 있다.

1. 엔티티 매니저 (entity manager)

엔티티(entity) : DB의 테이블과 매핑되는 객체
엔티티 매니저 : 엔티티를 관리해 데이터베이스와 어플리케이션 사이에서 객체를 생성, 수정, 삭제하는 역할
엔티티 매니저 팩토리 : 엔티티 매니저를 만드는 곳

예시
회원 A의 정보를 저장하고 관리할 엔티티 매니저를 엔티티 매니저 팩토리가 생성하면 데이터베이스에 회원 A의 정보를 저장하고 관리할 수 있다.

스프링 부트는 내부에서 엔티티 매니저 팩토리를 하나만 생성하고 관리한다. 따라서 개발자가 직접 생성하거나 관리할 필요가 없다.


2. 영속성 컨텍스트

엔티티를 관리하는 가상의 공간

영속성 컨텍스트 덕분에 데이터베이스에서 쉽게 데이터를 가져올 수 있고 엔티티를 편하게 사용할 수 있다.

특징

1. 1차 캐시

  • 엔티티를 조회하면 1차 캐시에서 데이터를 조회하고 값이 있으면 반환한다.

  • 이를 통해 캐시된 데이터를 조회할 때에는 데이터베이스를 거치지 않아도 되서 매우 빠르게 데이터를 조회할 수 있다.

2. 쓰기 지연 (transactional write-behind)

  • 트랜잭션을 커밋하기 전까지는 데이터베이스에 실제로 질의문을 보내지 않고 쿼리를 모았다가 트랜잭션을 커밋하면 모았던 쿼리를 한번에 실행

  • 이를 통해 적당한 묶음으로 쿼리를 요청할 수 있어 데이터베이스 시스템의 부담을 줄일 수 있다.

3. 변경 감지

  • 트랜잭션을 커밋하면 1차 캐시에 저장되어 있는 엔티티의 값과 현재 엔티티의 값을 비교해서 변경된 값이 있다면 변경 사항을 감지해 변경된 값을 데이터베이스에 자동 반영

  • 이를 통해 적당한 묶음으로 쿼리를 요청할 수 있어 데이터베이스 시스템의 부담을 줄일 수 있다.

4. 지연 로딩 (lazy loading)

  • 쿼리로 요청한 데이터를 애플리케이션에 바로 로딩하는 것이 아니라 필요할 때 쿼리를 날려 데이터를 조회

⭐️ 영속성 컨텍스트의 장점

DB의 접근을 최소화해 성능을 높인다.

profile
HeeYun's programming study

0개의 댓글