영속성 컨텍스트(Persistence Context)
영속성 컨텍스트는 JPA에서 중요한 개념 중 하나로, 엔티티를 영구 저장하는 환경을 말합니다.
영속성 컨텍스트는 EntityManager
인스턴스를 통해 접근하고 관리됩니다.
1. 1차 캐시
영속성 컨텍스트는 내부에 엔티티를 저장하는 1차 캐시를 가지고 있습니다.
EntityManager
를 통해 엔티티를 조회하면 먼저 1차 캐시에서 엔티티를 찾고, 없을 경우에만 데이터베이스에서 데이터를 조회합니다.
이를 통해 같은 트랜잭션 내에서 엔티티를 반복적으로 조회할 때 성능을 향상시킬 수 있습니다.
User user1 = entityManager.find(User.class, userId); // 데이터베이스에서 조회
User user2 = entityManager.find(User.class, userId); // 1차 캐시에서 조회
2. 엔티티 생명주기 관리
영속성 컨텍스트는 엔티티의 생명주기를 관리합니다.
엔티티는 비영속, 영속, 준영속, 삭제 등의 상태를 가질 수 있으며, 이러한 상태 전환은 영속성 컨텍스트를 통해 이루어집니다.
User user = new User(); // 비영속 상태
entityManager.persist(user); // 영속 상태
entityManager.detach(user); // 준영속 상태
entityManager.remove(user); // 삭제 상태
3. Dirty Checking
영속성 컨텍스트는 Dirty Checking이라는 기능을 제공합니다.
이는 영속 상태의 엔티티가 변경될 때, 이 변경 사항을 자동으로 데이터베이스에 반영하는 기능입니다.
User user = entityManager.find(User.class, userId); // 영속 상태
user.setName("John Doe"); // Dirty Check에 의해 자동으로 데이터베이스에 반영됨
4. 트랜잭션 지원
영속성 컨텍스트는 트랜잭션 범위를 가집니다.
트랜잭션이 시작되면 새로운 영속성 컨텍스트가 시작되고, 트랜잭션이 끝나면 해당 영속성 컨텍스트도 종료됩니다.
이를 통해 작업의 일관성을 유지할 수 있습니다.
entityManager.getTransaction().begin(); // 트랜잭션 시작, 영속성 컨텍스트 시작
// 작업 수행
entityManager.getTransaction().commit(); // 트랜잭션 커밋, 영속성 컨텍스트 종료
영속성 컨텍스트는 이처럼 JPA의 핵심적인 동작 원리를 담당하며, 이를 이해하는 것은 JPA를 효과적으로 사용하는 데 중요합니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
H2 DB (0) | 2023.07.11 |
---|---|
JPA의 영속 상태 (0) | 2023.07.11 |
JPA (0) | 2023.07.11 |
DataJpaTest (0) | 2023.07.11 |
@ToString (0) | 2023.07.10 |