m1ndy5's coding blog

영속성 컨텍스트 본문

CS Study

영속성 컨텍스트

정민됴 2024. 3. 6. 18:10

JPA를 사용하면서 영속성 컨텍스트를 모른다??

이건 말이 안된다!!!! 지금 알아보자~~

영속성 컨텍스트(Persistence Context)?

JPA에서 사용되는 개념 중 하나로 엔티티 인스턴스를 관리하고 데이터베이스와의 상호작용을 효율적으로 처리하기 위한 환경을 제공한다.

영속성 컨텍스트는 엔티티의 생명주기를 관리하고 쿼리 결과를 캐시하는 등의 역할을 수행한다.

영속성 컨텍스트는 여러개 존재할 수 있으며 각각의 영속성 컨텍스트는 특정 트랜잭션 범위 내에서 독립적으로 동작한다.

 

1. 엔티티의 생명주기 관리

- 비영속 상태 (New/Transient)

데이터베이스에 저장되지 않은 상태로, 객체를 생성한 직후의 상태이다.

// 비영속 상태
Employee employee = new Employee();

 

- 영속 상태 (Managed)

영속성 컨텍스트가 관리하는 상태로, EntityManager를 통해 데이터베이스에 저장되었거나 조회된 상태이다.

// 영속 상태
entityManager.persist(employee);

 

- 준영속 상태 (Detached)

이전에 영속 상태였지만, 영속성 컨텍스트가 더 이상 관리하지 않는 상태이다.

// 준영속 상태
entityManager.detach(employee);

 

- 삭제 상태 (Removed)

엔티티가 데이터베이스에서 삭제되었지만, 아직 트랜잭션이 커밋되지 않은 상태다.

// 삭제 상태
entityManager.remove(employee);

 

2. 동일성 보장

동일한 엔티티 식별자에 대해 영속성 컨텍스트는 항상 동일한 엔티티 인스턴스를 반환하기 때문에 동일성이 보장된다.

따라서 동일한 엔티티를 여러 번 조회해도 메모리 사용을 효과적으로 관리할 수 있다.

 

3. 캐시

영속성 컨텍스트는 조회한 엔티티를 캐시하여 높은 성능을 제공한다.

같은 엔티티를 다시 조회할 때 데이터베이스에 직접 접근하는 것이 아니라 캐시에서 가져와서 성능을 향상시킨다.

 

4. 트랜잭션 범위

영속성 컨텍스트는 트랜잭션 범위 내에서 동작한다.

트랜잭션이 시작되면 영속성 컨텍스트가 엔티티를 관리하고, 트랜잭션이 종료되면 컨텍스트가 플러시되고 엔티티 변경 내용이 DB에 반영된다.

 

5. Dirty Checking

트랜잭션 커밋 시 영속성 컨텍스트는 엔티티의 변경 상태를 감지하여 자동으로 데이터베이스에 반영한다.

이를 더티 체킹이라고 하며, 개발자가 별도로 업데이트 쿼리를 작성하지 않아도 변경된 내용이 반영된다.

'CS Study' 카테고리의 다른 글

Garbage Collector  (1) 2024.03.07
Java의 메모리 영역  (0) 2024.03.07
JVM, JRE, JDK & 자바 프로그램의 실행 과정  (0) 2024.03.07
JPA 도입 시 고려해 볼 사항  (0) 2024.03.06
Call by Value / Call by Reference in Java  (1) 2024.03.06