728x90
영속성 컨텍스트
- 엔티티를 영구 저장 하는 환경
- 어플리케이션이 데이트베이스에서 꺼내온 데이터 객체를 보관하는 역할
- 엔티티 매니저마다 개별적으로 부여되는 논리적 공간
- 데이터 어플리케이션의 단의 동일성을 보장
자바의 엔티티 객체를 엔티티 매니저마다 가지고 있는 영속성 컨텍스트라는 공간에다 넣고 빼고 하면서 사용
JPA 엔티티의 상태
- 비영속
영속성 컨택스트와 관계가 없는 새로운 상태
해당 객체의 데이터가 변경되거나 말거나 실제 DB 데이터와는 관련 없고 그냥 Java 객체인 상태 - 영속
엔티티 매니저를 통해 엔티티가 영속성 컨텍스트에 저장되어 관리되고 있는 상태
이와같은 경우 데이터의 생성, 변경등을 JPA가 추적하면서 필요하면 DB에 반영 - 준영속
영속성 컨택스터에서 관리되다가 분리된 상태- 엔티티를 영속성 컨택스트에서 분리 em.detach(minsook);
- 영속성 컨텍스트를 비우기 em.clear();
- 영속성 컨택스트를 종료 em.close();
- 삭제
영속성 컨택스트에서 삭제된 상태
1차 캐시
- 사용이유
DB를 이용하는 작업은 부하와 비용이 심한 작업 (자주하는 것을 줄여야함) - 사용순서
- 영속성 컨텍스트 내부에 1차캐시를 둠
- find 로직 진행시 1차캐시 조회
- 있으면 해당 데이터 반환 없을때만 select
- 반환하기 전 1차캐시에 저장하고 반환
쓰기 지연 SQL 저장소
엔티티를 생성할 때 마다 DB를 다녀오는것은 비효율적
→여러번 DB를 방문하지 않도록 내부에 쓰기 지연 SQL 저장소를 둠
- 사용 순서
- 엔티티 객체들을 영속화
- entityManager.commit() 메서드를 호출하면 내부적으로 쓰기 지연 SQL저장소에서 Flush 함
-> Insert A, Insert B와 같은 쓰기 전용 쿼리들이 DB로 흘러감 - commit 명령을 통해 흘려보낸 SQL문을 반영시킴
DirtyChecking
데이터의 변경을 감지하여 자동으로 수정
JPA는 1차캐시와 쓰기지연 SQL 저장소를 이용해서 변경과 수정을 감지
- 사용 순서
- JPA가 조회시점에 데이터 정보를 같이 저장(스탭샷)
- 조회 시점의 데이터와 영속화한 entity 객체를 비교
- 변경이 감지된 부분을 DB에 반영시킬 수 있는 SQL UPDATE문을 쓰기 지연 저장소에 저장해놓음
728x90
'개발일기 > Java' 카테고리의 다른 글
스프링부트 Swagger 사용법 (0) | 2023.03.09 |
---|---|
스프링부트 jwt토큰 사용 시 설정 (0) | 2023.03.04 |
IntelliJ 프로젝트 자동 실행 (1) | 2023.02.28 |
Postman 사용 (0) | 2023.02.27 |
JPA 기초 예제 (0) | 2023.02.26 |