영속성 컨텍스트
2024. 6. 24. 17:45ㆍJava/Spring
영속성 컨텍스트(pesistent context)
- 자바에서 객체 지향 프로그래밍과 관계형 데이터베이스를 연결하는 기술인 ORM(Object-Relational Mapping)에서 중요한 개념입니다. 주로 JPA(Java Persistence API)를 사용하는 경우에 많이 언급되는 개념이며, 데이터베이스와의 상호작용을 추상화하여 개발자가 객체를 사용하여 데이터를 관리할 수 있게 합니다.
영속성 컨텍스트의 주요 개념
- 엔티티 관리:
- 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에서 엔티티(Entity)를 관리합니다. 엔티티는 데이터베이스에 저장되거나 데이터베이스에서 로드되어 애플리케이션의 도메인 로직에서 사용될 수 있는 자바 객체를 말합니다.
- 생명 주기 관리:
- 영속성 컨텍스트는 엔티티의 생명 주기를 관리합니다. 즉, 엔티티가 생성되고, 영속화되고, 수정되고, 삭제될 때 영속성 컨텍스트가 관여하여 데이터베이스와의 일관성을 유지하고 변경 사항을 추적합니다.
- 동일성 보장:
- 영속성 컨텍스트는 같은 식별자(ID)를 가진 엔티티 객체가 같은 인스턴스로 유지되도록 보장합니다. 따라서 애플리케이션에서 동일한 엔티티를 여러 곳에서 조회하더라도 하나의 인스턴스만 유지됩니다.
- 지연 로딩(Lazy Loading):
- 영속성 컨텍스트는 지연 로딩을 지원하여 연관된 엔티티 객체가 실제로 사용될 때까지 연관된 객체를 데이터베이스에서 가져오지 않습니다. 이는 성능 최적화에 도움을 줍니다.
영속성 컨텍스트의 주요 특징
- 트랜잭션 범위:
- 영속성 컨텍스트는 트랜잭션 범위 내에서 동작합니다. 트랜잭션이 시작되면 영속성 컨텍스트가 생성되고, 트랜잭션이 커밋되거나 롤백될 때 영속성 컨텍스트가 제거됩니다.
- 쓰기 지연:
- 영속성 컨텍스트는 트랜잭션 내에서 엔티티를 수정하거나 저장하는 변경 사항을 모았다가 최적의 시점에 데이터베이스에 쓰기를 수행합니다. 이를 통해 효율적인 데이터베이스 작업을 가능하게 합니다.
- 캐시:
- 영속성 컨텍스트는 내부적으로 엔티티를 캐시로 관리하여 같은 엔티티에 대한 다중 조회에서 성능을 향상시킵니다. 따라서 같은 엔티티를 여러 번 로드해야 할 경우 데이터베이스에 접근하지 않고 캐시에서 바로 가져올 수 있습니다.
영속성 컨텍스트 예시
@Service
@Transactional
public class UserService {
@Autowired
private EntityManager entityManager;
public void updateUser(User user) {
// 영속성 컨텍스트에 엔티티를 저장
entityManager.merge(user);
}
public User getUserById(Long userId) {
// 영속성 컨텍스트에서 엔티티를 조회
return entityManager.find(User.class, userId);
}
public void deleteUser(Long userId) {
// 영속성 컨텍스트에서 엔티티를 삭제
User user = entityManager.find(User.class, userId);
entityManager.remove(user);
}
}
위의 예시에서 EntityManager를 사용하여 영속성 컨텍스트를 직접 제어하고, 엔티티의 CRUD 작업을 수행하는 방법을 보여줍니다. 영속성 컨텍스트는 @Transactional 어노테이션과 함께 사용되어 트랜잭션 범위 내에서 엔티티의 변경 사항을 관리하고 데이터베이스와 동기화합니다.
'Java > Spring' 카테고리의 다른 글
[Redis] 레디스 사용 및 배포 (0) | 2024.08.12 |
---|---|
MVC (Model-View-Controller) 구조 (0) | 2024.06.25 |
DTO, DAO, VO, Record 개념 및 차이 (0) | 2024.06.24 |
@Controller와 @RestController 의 설명 과 차이 (0) | 2024.06.24 |
@Transactional (0) | 2024.06.24 |