일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 메모리구조
- Selection Sorting
- stream
- 윤성우의 열혈 자료구조
- 알기쉬운 알고리즘
- 윤성우 열혈자료구조
- coding test
- 이스케이프 문자
- Graph
- C programming
- insertion sort
- R
- 혼자 공부하는 C언어
- list 컬렉션
- Algorithm
- buffer
- s
- C 언어 코딩 도장
- datastructure
- JSON
- Stack
- 이것이 자바다
- Serialization
- Today
- Total
Engineering Note
[JPA] JPA 동작 원리 중요 개념 정리(영속성 컨텍스트 생명주기와 더티체킹) 본문
[JPA] JPA 동작 원리 중요 개념 정리(영속성 컨텍스트 생명주기와 더티체킹)
Software Engineer Kim 2025. 10. 6. 19:42
EntityManagerFactory는 애플리케이션 마다 하나가 존재하고, EntityManagerFactory가 EntityManager를 생성한다. 그리고 EntityManager는 영속성 컨텍스트를 관리하는데, 요청 트랜잭션 마다 영속성컨텍스트를 생성하고 소멸시킨다.
영속성 컨텍스트만 자세히 살펴보면 아래와 같다.
영속성 컨텍스트는 JPA에서 가장 중요한 개념으로 Entity를 관리하는 공간이고 트랜잭션과 생명주기를 함께한다.
메모리에 존재하면서 DB 테이블의 캐시 역할을 하는데, 실행부터 테이블이 캐시화돼서 존재하는 건 아니고 트랜잭션 내에서 한 번이라도 조회되거나 persist된 엔티티가 key:value 형태로 저장된다. key는 PK, value는 **엔티티 객체(DB 테이블의 row를 표현하는 인스턴스)**가 저장된다.
그래서 한 트랜잭션 내에서 PK가 같으면 같은 인스턴스로 인식해서 동일성이 보장되고, 트랜잭션이 종료되면서 같이 사라진다.
여기서 더티 체킹 개념도 같이 등장하는데, 트랜잭션이 commit 시 자동으로 flush가 호출되고, 변경된 내용이 있다면 쓰기 지연 저장소에 저장된 UPDATE 쿼리가 실행된다.
영속성 컨텍스트의 데이터 저장 방식
영속성 컨텍스트는 key:value 형태로 데이터를 저장하는데, key는 id vlaue로 Entity 객체 로우로 저장되었다고 했는데, key를 저장하려면 일단 DB에 값이 있어야 한다. JPA ID GeneratedValue Identity 전략(AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID 값을 알 수 있음)에서만 예외적으로 em.persist로 최초 호출한 시점에 insert 쿼리가 전송된다. 이외의 모든 케이스는 em.persist이후 commit 시점에 SQL 쓰기 지연저장소에 저장된 SQL이 전송된다.
'Server > JPA ORM' 카테고리의 다른 글
[JPA] 연관관계 주인 (0) | 2025.10.10 |
---|---|
[JPA] 기본 키 매핑 방법 (0) | 2025.10.08 |
[JPA] 영속성 컨텍스트 생명주기와 @Transacional의 동작 원리: 영속성 컨텍스트 유지 (0) | 2025.10.05 |
[JPA] 영속성 전이와 고아객체 제거 (0) | 2025.09.14 |
[JPA] JPA save 쿼리메소드 실행시 내부 동작 흐름 정리 (0) | 2025.09.14 |