Spring Boot/Framework

[JPA] 영속성 컨텍스트

오늘도개발 2024. 3. 11. 15:48

 

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에 의하여 관리

 

  1. Transient(비영속) 상태:
    • 객체가 생성되었지만 영속성 컨텍스트와 관련이 없는 상태 (데이터베이스에 저장되지 않은 상태)
    • 영속성 에서 제외 (new)
  2. Managed(영속) 상태:
    • 엔티티가 영속성 컨텍스트에 저장되고 있는 상태
    • 영속성 컨텍스트가 엔티티를 추적하고 있으며, 데이터베이스에 저장되거나 로드될 때 사용
    • 영속상태의 엔티티가 수정되는 경우 자동으로 Update가 일어남
    • Dirty Check : Load한 데이터의 수정이 있는지 확인
  3. Detached(준영속) 상태:
    • 영속성 컨텍스트와의 연관을 끊은 상태
    • 일반적으로 트랜잭션이 종료되거나, 영속성 컨텍스트가 제거된 후에 발생
    • 이 상태의 엔티티는 데이터베이스에 변경 사항을 반영하지 않음
    • detach 메서드로 영속 상태의 엔티티를 해제 할 수 있으며, merge가 일어날 경우 다시 영속상태로 관리
    • clear 메서드로 영속 상태의 엔티티를 해제 할 수 있으며, 수정된 사항은 반영이 일어나지 않음 필요한 경우 clear 이전 flush를 사용하여 수정사항을 반영 후 clear 사용
  4. Removed(삭제) 상태:
    • 엔티티가 영속성 컨텍스트에서 삭제되었지만, 아직 데이터베이스에서는 삭제되지 않은 상태
    • 트랜잭션이 커밋될 때 데이터베이스에서 삭제

'Spring Boot > Framework' 카테고리의 다른 글

[Springboot] Swagger  (0) 2024.02.04
[Springboot] JUnit TEST  (0) 2024.02.03
[Springboot] naver-api 연동  (0) 2024.02.03
[Springboot] REST Template  (0) 2024.02.03
[Springboot] Vailidation  (0) 2024.01.30