스프링 부트에서 영속성 컨텍스트는 Persistence Context라 하며, 데이터베이스와 관련된 작업을 할 때 사용되는 중요한 개념입니다.
영속성 컨텍스트는 엔티티 객체를 관리하고 데이터베이스와의 상호작용을 관리하는 역할을 합니다.
이를 통해 데이터베이스와의 효율적인 상호작용 및 데이터 변경을 추적할 수 있습니다.
※ 여기서 엔티티는 데이터베이스에서 가져온 데이터를 나타내는 자바 객체를 말합니다.
일반적으로 스프링 부트는 JPA, Hibernate와 같은 영속성 프레임워크를 사용하여 엔티티를 관리합니다.
위 이미지에 대해 제가 간략히 이해한바로 말씀드리자면,
- JDBC: java로 데이터베이스를 조작할 수 있게 해주는 인터페이스
- Hibernate: JDBC를 보다 더 간단하고 쉽게 사용할 수 있게 해주는 인터페이스
- JPA: Hibernate를 보다 더 간단하고 쉽게 사용할 수 있게 해주는 인터페이스
※ EntityManager는 영속성 컨텍스트에서 엔티티를 관리하는 객체입니다.
영속성 컨텍스트 특징
1. 엔티티 관리
애플리케이션에서 작업하는 엔티티 객체를 관리하여, 객체의 상태 변화를 추적하고, 데이터베이스와의 동기화를 담당합니다.
2. 엔티티 캐싱
데이터베이스로부터 가져온 엔티티를 key는 id값, value는 entitiy인 Map 형태로 캐싱하여 성능을 향상시킵니다.
이렇게 캐싱하는 것을 1차 캐싱이라고도 합니다.
따라서 동일한 엔티티 조회 시에는 캐시된 엔티티를 반환하여 데이터베이스 부하를 줄일 수 있습니다.
3. 트랜잭션 지원
영속성 컨텍스트는 트랜잭션 범위 내에서 동작합니다.
즉, 트랜잭션이 시작되고 종료될 때까지 영속성 컨텍스트는 엔티티 상태를 추적하고, 변경 내용을 데이터베이스에 반영하지 않습니다.
트랜잭션을 롤백할 경우 영속성 컨텍스트도 변경된 상태를 롤백합니다.
4. 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)
영속성 컨텍스트는 연관된 엔티티를 지연 로딩하거나 즉시 로딩하는 방식으로 데이터를 로드합니다.
이를 통해 애플리케이션의 성능을 최적화할 수 있습니다.
5. 더티 체킹(Dirty Checking)
JPA에서 엔티티를 조회하면 해당 엔티티의 조회 상태 그대로 스냅샷을 만들어 놓습니다.
트랜잭션이 끝나는 시점에서 이 스냅샷과 비교해서 다른 점이 있다면 Update 쿼리를 데이터베이스로 전달합니다.
이러한 더티 체킹은 영속성 컨텍스트가 관리하는 엔티티에만 적용됩니다.
'채워가는 지식 > Spring Boot' 카테고리의 다른 글
JPA란? (0) | 2024.04.17 |
---|---|
커넥션 풀이란? (0) | 2024.04.17 |
스프링에서 프록시와 AOP란? (0) | 2024.03.04 |
Bean에 대하여... (0) | 2024.02.16 |