Day08 JPA 심화 - 영속성
JPA 영속성
개념
JPA 영속성 컨텍스트(Persistence Context)는 엔티티를 영구 저장소(데이터베이스)에 저장하기 전까지 엔티티를 관리하는 일종의 메모리 공간입니다. 영속성 컨텍스트는 엔티티 매니저(EntityManager)에 의해 관리되며, 엔티티의 상태를 추적하고 변경 사항을 데이터베이스에 반영합니다. 주요 특징은 다음과 같습니다:
1차 캐시: 영속성 컨텍스트는 1차 캐시 역할을 하여 동일한 트랜잭션 내에서 동일한 엔티티를 조회할 때 데이터베이스를 다시 조회하지 않고 캐시된 엔티티를 반환합니다. 변경 감지: 영속성 컨텍스트는 엔티티의 변경 사항을 감지하고, 트랜잭션이 커밋될 때 변경된 내용을 데이터베이스에 반영합니다. 지연 로딩: 영속성 컨텍스트는 필요한 시점까지 데이터베이스 조회를 지연시켜 성능을 최적화합니다. 동일성 보장: 동일한 트랜잭션 내에서는 동일한 엔티티 인스턴스를 반환하여 엔티티의 동일성을 보장합니다. 예를 들어, JPA를 사용하여 엔티티를 저장하고 조회하는 코드는 다음과 같습니다:
더티체킹
N+1 문제
- LAZY : N+1문제 발생
- 개념
- @Onetomay
- eager
- 개념
- @manytoon
- pofile설정 파일 옵션 추가
- default-batch-size : 100
@Transactional 어노테이션 사용
Service 클래스에 @Transactional(readOnly = true) 사용
메서드 단에서는 생성, 수정, 삭제에 @Transactional 어노테이션 사용
영속성 컨텍스트
중복작업 효율적으로 처리
더티체킹으로 수정 삭제 가능
N + 1 문제
@OneToMany 어노테이션 사용
default_batch_fetch_size 100 옵션 추가
@ManyToOne(fetch = FetchType.LAZY) 어노테이션 사용