gimmickbutreal
[Spring Boot] 영속성 컨텍스트 (Persistence Context) 본문
저는 JPA에서 가장 중요한 내용이 무엇이냐는 질문에 망설임 없이 영속성 컨텍스트라고 대답할 것입니다.
정의
JPA가 관리하는 엔티티 객체의 집합
엔티티 객체가 영속성 컨텍스트에 들어오게 되면 JPA는 엔티티 객체의 매핑 정보를 가지고 DB에 반영하게 됩니다.
이 때, 엔티티 객체는 영속성 컨텍스트 안에서 관리 대상이 되고 그 객체를 영속 객체라고 부릅니다.
엔티티 객체와 영속 객체는 다른 존재입니다.
영속성 컨텍스트는 세션 단위로 생명주기를 갖고 있습니다. 즉, 세션이 생기면서 만들어지고 세션이 종료되면 없어집니다.
비영속(new) | 영속성 컨텍스트와 아무 관계도 없음(new) |
영속(managed) | 영속성 컨텍스트의 관리(manage)를 받는 상태 |
삭제(removed) | 영속성 컨텍스트에서 삭제됨(removed) |
준영속(detached) | 영속성 컨텍스트에서 분리된 상태(detached) |
영속성 컨텍스트를 사용하기 위해서 EntityManager라는 인터페이스를 사용합니다.
EntityManager는 하나의 세션이며 아래와 같은 방식으로 동작을 구성합니다.
1. DB에 접근하기 위해 EntityManager 생성합니다.
- EntityManager는 팩토리 패턴을 갖고 있어 EntityManagerFactory를 통해 생성합니다.
2. EntityManager가 가지고 있는 트랙잭션(Transaction)을 시작합니다.
- 트랜잭션 안에서 영속성 컨텍스트에 접근합니다.
3. EntityManager를 통해 영속 컨텍스트에 접근하고 객체를 작업합니다.
- 추가, 삭제, 업데이트와 같은 작업을 가능합니다.
4. 트랙잭션을 커밋하여 DB에 반영합니다.
5. Entity를 종료합니다.
주의)
generatedvalue같은 Incremental한 id 값들은 커밋하기 전에도 db에 반영하는 작업을 하기도 함
참고자료
'Programming > Spring Boot' 카테고리의 다른 글
[Springboot/Java] QR 코드 생성/저장/출력 (0) | 2023.03.12 |
---|---|
토스페이먼츠 API Hook 연동 (0) | 2023.03.11 |
[Spring Boot] 타임리프(Thymeleaf) URL (0) | 2022.09.01 |
[Spring Boot] 서비스(Service)가 필요한 이유 (0) | 2022.09.01 |
[Spring Boot] GetMapping 애노테이션 (0) | 2022.08.13 |