영속성 관리

2024. 3. 27. 16:56JAVA/스프링 데이터 JPA

JPA 분류

1. 설계 부분

2. 실제 사용하는 부분

 

엔티티 매니저 주의사항

엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 스레드 간에 절대 공유하면 안된다.

 

영속성 컨텍스트

'엔티티를 영구 저장하는 환경'이라는 뜻으로 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

DB와는 다른 개념이다!

 

엔티티의 생명주기

엔티티에는 비영속, 영속, 준영속, 삭제 총 4가지의 상태가 존재한다.

 

- 비영속 상태 : 엔티티 객체를 생성할 때 나온 순수한 객체이다. 따라서 영속성 컨텍스트와 데이터베이스와는 전혀 관련이 없다.

 

- 영속 상태 : 엔티티 매니저를 통해 엔티티를 영속성 컨텍스트에 저장하게 되는데 이렇게 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 한다. 참고로 em.find()나 JPQL을 사용해서 조회한 엔티티도 영속 상태이다.

 

- 준영속 : 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 된다.

 

- 삭제 : 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제하는 것을 의미한다.

 

영속성 컨텍스트의 특징

- 영속성 컨텍스트의 식별자 값 : 영속 상태는 식별자 값으로 구분하므로 식별자 값이 반드시 있어야 한다.

- 커밋을 하면 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다.

 

엔티티 조회 순서

1차 캐시에서 조회 -> 데이터베이스에서 조회

 

엔티티 등록

내부 쿼리 저장소에 INSERT SQL을 차곡차곡 모아두었다가 트랜잭션을 커밋할 때 모아둔 쿼리를 데이터베이스에 보내는데 이것을 트랜잭션을 지원하는 쓰기 지연이라 한다.

 

엔티티 수정의 문제점

수정 쿼리는 상황에 따라 계속해서 추가되는데 이렇게 되면 비즈니스 로직을 분석하기 위해 SQL을 계속 확인해야 한다. 결국 비즈니스 로직이 SQL에 의존적이게 되는 것이다. 다행히 JPA는 '변경 감지'를 통해 변경사항을 데이터베이스에 자동으로 반영한다.

'JAVA > 스프링 데이터 JPA' 카테고리의 다른 글

연관관계 매핑 기초  (0) 2024.04.11
엔티티 매핑  (2) 2024.04.04
데이터베이스 스키마 자동 생성  (0) 2023.12.27
객체와 테이블 매핑  (0) 2023.12.24
준영속 상태  (2) 2023.11.20