CS

[JPA] 영속성 컨텍스트 및 이점(5가지)

KJihun 2023. 10. 27. 16:09
728x90

 

 

JPA(Java Persistence API)에서 영속성 컨텍스트(Persistence Context)

영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다.

영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다.

엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다.

 

 

EntityManager

JPA의 핵심 인터페이스 중 하나로, 영속성 컨텍스트를 관리하고 엔티티를 DB에 저장하거나 조회하는 역할을 한다.

1. 엔티티 영속화(Persist): 새로운 엔티티를 영속성 컨텍스트에 저장하고 DB에 반영한다.

2. 엔티티 수정 및 삭제: 영속성 컨텍스트에 있는 엔티티의 상태를 수정 및 삭제하고, 이를 데이터베이스에 반영한다.

 

3. 엔티티의 조회: 데이터베이스에서 엔티티를 조회하여 영속성 컨텍스트에 저장한다.

4. 쿼리 실행: JPQL(Query Language) 쿼리나 네이티브 SQL 쿼리를 실행할 수 있다.

5. 트랜잭션 관리: 트랜잭션을 시작, 커밋, 롤백하는 역할도 수행한다.

 

 

 

이점 5가지


1. 1차 캐시 (First Level Cache)
영속성 컨텍스트는 엔티티를 관리하는 캐시를 가지고 있다.

DB를 조회하기 이전에 1차 캐시를 조회하여 DB에 접근하는 횟수를 줄일 수 있다.

같은 엔티티를 다시 조회할 경우 DB에 직접 접근하지 않고 캐시에서 가져오므로 성능이 향상된다.

2. 데이터 변경 추적 및 Dirty Checking

영속성 컨텍스트는 엔티티의 상태를 추적한다.

엔티티를 수정할 때마다 변경 내용을 추적하고, 트랜잭션이 커밋될 때 이를 데이터베이스에 반영한다.

이를 "Dirty Checking"이라고 한다.

3. 지연 로딩 (Lazy Loading)
연관된 엔티티가 실제로 사용될 때까지 데이터베이스에서 로딩되지 않고, 필요한 순간에 로딩된다.

이를 통해 불필요한 데이터 로딩을 방지하고 성능을 최적화할 수 있다.

4. 동일성 보장

찾아볼 것


5. 쓰기 지연 (Write Behind)한 트랜잭션 내에서 일어나는 모든 엔티티 변경은 트랜잭션이 커밋될 때 한꺼번에 데이터베이스에 반영된다.

이를 통해 데이터베이스에 대한 효율적인 일괄 처리가 가능해진다

영속성 컨텍스트는 트랜잭션이 커밋될 때까지 엔티티의 변경 내용을 모아서 일괄 처리한다. 이를 통해 효율적인 데이터베이스 쓰기 작업이 가능하며, 데이터베이스 연산의 효율을 높인다.

 

 

 

 

[DB] 트랜잭션(Transaction)

트랜잭션(Transaction) DB에서 사용되는 업무 처리의 최소 단위 트랜잭션의 특성 : ACID Atomicity: 원자성 트랜잭션을 구성하는 연산 전체가 모두 정상 실행되거나 모두 취소되어야 한다 Consistency: 일관

developerhun.tistory.com