[JPA] 영속성 컨텍스트 (Persistence Context)
1. 영속성 컨텍스트
1) 영속성
: 데이터가 프로그램이 종료되고 난 뒤에도 남아있는 특성.
- Java에서 만드는 변수와 객체는 전부 휘발성 (Heap에서 관리하다 변수가 사라질 때 객체 데이터를 삭제하게 된다)
>> 영속성이 없다!
- 파일(DB)의 형태로 저장. 서버가 종료되어도 데이터가 남아있음. > 영속성
2) 영속성 컨텍스트
: JPA를 사용하면 데이터베이스와 JPA 사이에 영속성 컨텍스트를 만든다.
- Spring Boot와 데이터베이스 사이의 Entity용 가상 데이터베이스!
- 실제 영속성 컨텍스트와 소통하는 객체는 EntityManager.
>> 이를 편의성 있게 사용할 수 있도록 하는 인터페이스가 Spring Data JPA!
- 1차 캐시 (First Level Cache)
: 어떤 엔티티가 작성/조회될 때 영속성 컨텍스트에서 우선적으로 관리하므로 > 실제로 데이터베이스에 접근하는 횟수를 줄일 수 있다.
- 방금 생성한 데이터나 여러번 조회하는 데이터의 성능 향상.
- 조회한 엔티티의 동일성이 보장된다. (같은 객체이다/같은 Heap 상의 위치)
- 쓰기 지연 (Transactional Write-Behind)
: 엔티티를 저장하는 시점에 바로 INSERT문을 실행하는 것이 아니라, 순서를 기억했다가 트랜잭션이 마무리 되었을 때 한 번에 데이터베이스에 반영. >> 여러 변경사항 한번에 적용/ 입출력 작업의 횟수를 줄임.
- 변경 감지 (Automatic Dirty Checking)
: 트랜잭션 내부에서 엔티티가 수정되면, 개발자가 직접 수정 사항을 저장하지 않아도 트랜잭션 마무리 시점에 자동으로 차이점을 확인해서 반영해줌. (UPDATE문이 자동으로 생성된다)
'Programming > Spring, SpringBoot' 카테고리의 다른 글
[JPA] N+1 (0) | 2024.02.05 |
---|---|
낙관적 락 & 비관적 락 (1) | 2024.02.05 |
@Query (1) | 2024.02.01 |
Relations (M : N 관계) (1) | 2024.02.01 |
[JPA] MappedSuperclass / JpaAuditing (0) | 2024.01.31 |