JPA (Java Persistence API)
- 자바 진영의 ORM 표준
- 오픈소스 Hibernate가 떡상하자 자바에서 그거 만든 개발자 잡아와서 만든 표준이다.
ORM (Object-relational mapping) 객체 관계 매핑
- 객체는 객체대로
- 관계형 데이터베이스는 DB대로
- ORM이 중간에서 연결해줌
JPA에서 가장 중요한 것은?
1. 객체와 관계형 데이터베이스 매핑하기
2. 영속성 컨텍스트
영속성 컨텍스트
- 논리적인 개념
- 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다.
영속성 컨텍스트의 생명주기
1. 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계없는 새로운 상태
2. 영속 (managed) : persist()를 통해 객체를 저장, 영속성 컨텍스트에서 관리중
3. 준영속 (detached) : 저장되었다가 분리된 상태
4. 삭제 (removed) : 말그대로 삭제
특징
- 영속성 컨텍스트는 1차 캐시를 들고 있다.
- 클라이언트가 10명이면 각자 1차 캐시를 가진다. 트랙잭션 내에서만 공유되는 개념
- id가 key, entity객체가 value가 된다.
- find하면 1차 캐시를 먼저 확인 → 1차캐시에 없으면 db조회 → 1차 캐시에 저장 → 반환
- 영속 엔티티의 동일성을 보장
- 쓰기 지연 SQL 저장소
- 변경감지 (Dirty Checking)
- 영속 상태 엔티티의 속성 변화를 JPA가 추적하여 트랜잭션 커밋 시점에 변경된 내용을 자동으로 UPDATE 쿼리로 만들어 DB에 반영하는 기능
- flush()하면 엔티티 스냅샷과 비교한다.
- 스냅샷은 값을 최초에 읽어왔을때 데이터 그리고나서 commit 시점에 바뀐 값이 있다면 UPDATE SQL을 생성한다.
플러시
- 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것
- 플러시발생 → 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록 → 저장소 쿼리를 데이터베이스에 전송
- 영속성 컨텍스트를 비우는게 아님! 1차 캐시는 남아있다는 것 중요!
- 트랜잭션이라는 작업 단위가 중요한 것.
수업 다 듣고나서 궁금했던 것 정리
영속성 컨텍스트의 메모리 위치
핵심: 서버 측 JVM 힙 메모리에 저장
클라이언트(브라우저) ❌
↓ HTTP 요청
서버 JVM 힙 메모리 ✅
├── 영속성 컨텍스트
│ ├── 1차 캐시 (Map<ID, Entity>)
│ └── 쓰기 지연 SQL 저장소 (List<SQL>)
'커리어 > 백엔드' 카테고리의 다른 글
| [JPA] Entity 매핑 (0) | 2025.10.19 |
|---|---|
| [Spring] 빈 생명주기 콜백, 빈 스코프 (4) | 2025.10.09 |
| [Spring] 컴포넌트 스캔, 의존관계 주입 (0) | 2025.10.08 |
| [Spring] 싱글톤을 스프링에서 보장하는 방법 (2) | 2025.10.07 |
| [Spring] IoC, DI, 컨테이너 (0) | 2025.10.06 |