담비의 개발블로그

[DB]Persistence Context(영속성 컨텍스트) 본문

DataBase

[DB]Persistence Context(영속성 컨텍스트)

담비12 2024. 9. 2. 20:59
영속성 컨텍스트

 

영속성 컨텍스트(Persistence Context)는 JPA(Java Persistence API)에서 중요한 개념으로, 엔티티 객체의 생명주기를 관리하는 메모리상의 가상 공간을 의미한다. 영속성 컨텍스트는 JPA의 EntityManager에 의해 관리되며, 엔티티를 데이터베이스와 동기화하고 캐싱하는 역할을 담당한다.

 

◆ 주요 기능

1. 1차 캐시: 영속성 컨텍스트는 1차 캐시로 동작한다. 동일한 트랜잭션 내에서 같은 엔티티를 여러 번 조회하면, 영속성 컨텍스트는 데이터베이스에서 새로 조회하는 대신, 캐시에 저장된 엔티티 객체를 반환한다. 이로 인해 성능이 향상되고 불필요한 데이터베이스 접근을 줄일 수 있다.

2. 엔티티의 생명주기 관리: 엔티티 객체는 영속성 컨텍스트에 의해 "비영속(New)", "영속(Managed)", "준영속(Detached)", "삭제(Removed)" 상태로 관리된다.
- 비영속 상태: 엔티티가 아직 영속성 컨텍스트에 포함되지 않은 상태이다.
- 영속 상태: 엔티티가 영속성 컨텍스트에 포함되어 관리되고 있는 상태이다. 이 상태에서 엔티티의 변경 사항은 트랜잭션이 커밋될 때 자동으로 데이터베이스에 반영된다.
- 준영속 상태: 엔티티가 영속성 컨텍스트에서 분리되어 더 이상 관리되지 않는 상태이다.
- 삭제 상태: 엔티티가 영속성 컨텍스트에서 삭제된 상태로, 데이터베이스에서도 삭제가 예정된 상태이다.


3. 변경 감지(Dirty Checking): 영속성 컨텍스트는 트랜잭션이 종료되기 전에 엔티티의 변경 사항을 감지하여, 데이터베이스에 반영할 준비를 한다. 엔티티 객체가 변경되면, 이를 감지하여 업데이트 쿼리를 자동으로 생성하고 실행한다.

4. 동일성(identity) 보장: 영속성 컨텍스트는 같은 엔티티 객체를 동일한 트랜잭션 내에서 동일한 ID를 기준으로 하나의 인스턴스만 유지한다. 즉, find나 getReference 같은 메서드를 통해 같은 ID의 엔티티를 조회할 때, 항상 동일한 객체가 반환된다.

5. 지연 로딩(Lazy Loading): 영속성 컨텍스트는 필요한 시점에 연관된 엔티티를 불러오는 지연 로딩을 지원한다. 이는 성능 최적화에 기여할 수 있다.

 

 

'DataBase' 카테고리의 다른 글

PostgreSQL  (0) 2025.07.05
[DB]JPA - QueryDSL란  (1) 2024.09.05
[DB]EntityManager(엔티티매니저)  (0) 2024.09.02
[DataBase]Hibernate란?  (0) 2024.08.09
[MariaDB]member테이블 관련 알아두면 좋을 내용  (0) 2024.06.20