1. 영속성 컨텍스트란? (Persistence Context)
- "영속성"은 데이터를 영구적으로 저장하는 것을 의미
- "컨텍스트"는 상황이나 환경을 나타냄
- 영속성 컨텍스트는 객체들의 영속성 상태를 관리하는 환경을 의미
2. 영속성 컨텍스트 설정
- 다음과 같은 위치에 설정파일을 생성
- persistence.xml
- application.properties 에서 Spring 적용
3. Entity Cashe
- Entity Manager를 통하여 관리 <ㅡ JPA 코드 내부에 관련 내용 존재
- Entity Cashe로 인하여 메모리와 DB 사이에 데이터 차이가 발생함
4. 1차 Cashe
- Map 으로 Key 값과 Entity의 값을 저장하고 있음
- 빈번한 조회시 성능을 높여줌 ( findBy(Id)) 를 사용하는 경우 실제 Select는 1번, 이후 Cashe 에서 Load
- flush 메서드 호출 시 DB에 변경 내용이 적용됨
- @transactional 어노테이션을 사용하는 경우 해당 메서드가 반환될 시, flush가 적용됨
- 복잡한 쿼리문을 사용하는 경우 자동으로 flush가 일어나는 경우도 발생
> entity 내용을 변경 후, findAll()을 수행하여 데이터를 다시 가져오는 경우, 자동으로 update 쿼리 실행 후 Select
5. Entity LifeCycle
- Entity Manager에 의하여 관리
- Transient(비영속) 상태:
- 객체가 생성되었지만 영속성 컨텍스트와 관련이 없는 상태 (데이터베이스에 저장되지 않은 상태)
- 영속성 에서 제외 (new)
- Managed(영속) 상태:
- 엔티티가 영속성 컨텍스트에 저장되고 있는 상태
- 영속성 컨텍스트가 엔티티를 추적하고 있으며, 데이터베이스에 저장되거나 로드될 때 사용
- 영속상태의 엔티티가 수정되는 경우 자동으로 Update가 일어남
- Dirty Check : Load한 데이터의 수정이 있는지 확인
- Detached(준영속) 상태:
- 영속성 컨텍스트와의 연관을 끊은 상태
- 일반적으로 트랜잭션이 종료되거나, 영속성 컨텍스트가 제거된 후에 발생
- 이 상태의 엔티티는 데이터베이스에 변경 사항을 반영하지 않음
- detach 메서드로 영속 상태의 엔티티를 해제 할 수 있으며, merge가 일어날 경우 다시 영속상태로 관리
- clear 메서드로 영속 상태의 엔티티를 해제 할 수 있으며, 수정된 사항은 반영이 일어나지 않음 필요한 경우 clear 이전 flush를 사용하여 수정사항을 반영 후 clear 사용
- Removed(삭제) 상태:
- 엔티티가 영속성 컨텍스트에서 삭제되었지만, 아직 데이터베이스에서는 삭제되지 않은 상태
- 트랜잭션이 커밋될 때 데이터베이스에서 삭제
'Spring Boot > Framework' 카테고리의 다른 글
[Springboot] Swagger (0) | 2024.02.04 |
---|---|
[Springboot] JUnit TEST (1) | 2024.02.03 |
[Springboot] naver-api 연동 (0) | 2024.02.03 |
[Springboot] REST Template (0) | 2024.02.03 |
[Springboot] Vailidation (0) | 2024.01.30 |