영속성 컨텍스트(Persistence Context)는 엔터프라이즈 자바빈(Enterprise JavaBeans, EJB) 또는 자바 퍼시스턴스 API(Java Persistence API, JPA)와 같은 프레임워크에서 객체를 영속 상태로 관리하는 메커니즘입니다. 간단히 말해, 데이터베이스와 상호작용하는 엔터티 객체(Entity Object)를 관리하는 일종의 '캐시' 역할을 합니다. 이를 통해 애플리케이션은 데이터베이스와 효율적으로 상호작용할 수 있습니다.
주요 개념
- 엔터티(Entity): 데이터베이스의 테이블에 대응되는 클래스입니다. 각 인스턴스는 데이터베이스의 한 행(row)을 나타냅니다.
- 영속 상태(Persistent State): 엔터티 객체가 영속성 컨텍스트에 의해 관리되고 있는 상태입니다. 이 상태에서는 엔터티의 변경 사항이 자동으로 데이터베이스에 반영됩니다.
- 비영속 상태(Transient State): 엔터티 객체가 영속성 컨텍스트에 의해 관리되지 않는 상태입니다. 즉, 데이터베이스와 아무런 관계가 없는 상태입니다.
- 준영속 상태(Detached State): 한때 영속 상태였지만 현재는 영속성 컨텍스트에 의해 관리되지 않는 엔터티 객체의 상태입니다. 이러한 객체는 데이터베이스와 동기화되지 않습니다.
영속성 컨텍스트의 주요 기능
- 엔터티 관리: 영속성 컨텍스트는 엔터티의 상태를 관리하고 추적합니다. 이를 통해 엔터티 객체의 변경 사항을 자동으로 감지하고 데이터베이스에 반영할 수 있습니다.
- 1차 캐시(First-Level Cache): 영속성 컨텍스트는 엔터티 객체를 1차 캐시로 관리하여 데이터베이스 접근을 최소화하고 성능을 향상시킵니다. 같은 트랜잭션 내에서는 동일한 엔터티에 대해 데이터베이스에 재조회하지 않고 캐시된 엔터티 객체를 사용합니다.
- 변경 사항 추적: 영속성 컨텍스트는 관리되는 엔터티 객체의 변경 사항을 추적합니다. 트랜잭션이 커밋될 때 이러한 변경 사항이 데이터베이스에 반영됩니다.
- 지연 로딩(Lazy Loading): 필요한 시점까지 데이터베이스에서 엔터티를 로드하지 않는 방식입니다. 이는 성능 최적화에 도움이 됩니다.
- 동일성 보장: 같은 영속성 컨텍스트 내에서는 동일한 엔터티 객체에 대해 동일한 인스턴스를 반환합니다. 이를 통해 엔터티의 동일성을 보장합니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters and setters
}
public void someMethod(EntityManager em) {
em.getTransaction().begin();
User user = new User();
user.setName("John");
em.persist(user); // user는 이제 영속 상태
user.setName("Doe"); // 변경 사항이 자동으로 추적됨
em.getTransaction().commit(); // 변경 사항이 데이터베이스에 반영됨
}
이 예시에서 EntityManager는 영속성 컨텍스트를 관리하는 주요 인터페이스입니다.
persist 메서드를 호출하면 user 객체가 영속성 컨텍스트에 의해 관리되기 시작하며, 이후의 변경 사항이 자동으로 추적됩니다. 트랜잭션이 커밋될 때 이러한 변경 사항이 데이터베이스에 반영됩니다.
영속성 컨텍스트는 데이터베이스와의 상호작용을 효율적으로 관리하고 애플리케이션의 성능을 최적화하는 데 중요한 역할을 합니다.
'기술면접 준비' 카테고리의 다른 글
클래스와 인스턴스의 차이 (0) | 2024.08.06 |
---|---|
그림으로 보는 자바 코드의 메모리 영역(스택 & 힙) (0) | 2024.08.06 |
가비지 컬렉션(Garbage Collection, GC) 이란? (0) | 2024.07.30 |
Java가 컴파일 되는 과정은 어떻게 되는지? (0) | 2024.07.30 |
JVM 이란 무엇이고 왜 필요한지? (0) | 2024.07.30 |