티스토리 뷰
안녕하세요 강정호입니다. 오늘은 영속성 컨텍스트에 대해 공부해 볼게요.
JPA를 이해하기 위해서는 영속성 컨텍스트와 엔티티 매니저에 대한 이해가 필수입니다.
영속성 컨텍스트란?
- Server side와 Database 사이에 엔티티를 저장하는 논리적인 영역이라고 할 수 있다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
- 영속성 컨텍스트는 엔티티 매니저(Session)를 생성할 때 하나 만들어진다. 그리고 엔티티 매니저(Session)을 통해서 영속성 컨텍스트에 접근할 수 있고 영속성 컨텍스트를 관리할 수 있다.
영속성 컨텍스트가 왜 좋은가?
1차 캐시
- Map 객체로 저장 : 엔티티를 식별자 값(@Id 맵핑)으로 구분한다. Key-value로 관리하는데 이때 key 값이 @Id 값이 된다.
- 식별자 값 필요 : 영속상태의 엔티티는 반드시 식별자 값이 있어야 한다.
동일성 보장
- 동일한 객체 반환 : Collection에서 객체를 빼오듯이 같은 객체를 반환하게 되면 새로운 객체가 나오는 것이 아니라 동일한 객체가 반환된다.
변경 감지
- 자동 Update : 영속성 상태의 객체는 객체의 데이터가 변경이 되면, 자동 update 된다.
- EntityManager에서 flush가 되고, commit이 됩니다.
** flush가 되는 시점
1) 강제 Flush : EntityManager.flush()
2) 트랜잭션 종료시 : 영속성 컨텍스트는 트랜잭션 범위로 만들어지기 때문이다.
3) JPQL 쿼리 실행 : JPQL은 실제 Database side에서 데이터를 가져오기 때문에 동기화를 위해 JPQL 쿼리가 실행 전에 flush 된다.
트랜잭션으로 인한 쓰기 지연
- 쓰기 지연 : 영속성 컨텍스트는 트랜잭션 범위 안에서 동작한다. 그래서 트랜잭션이 끝나야 Commit이 이루어지고 반영된다.
Lazy 로딩
- N+1 쿼리라고 부른다. 엔티티와 관계가 맺어진 엔티티의 데이터를 가져올 수 있다.
** 성능저하의 원인이 될 수도 있다.
참고 링크 : 엔티티 매니저
엔티티 매니저란 무엇인가?
'Back-end' 카테고리의 다른 글
N:M 관계(다대다 관계) (0) | 2018.10.28 |
---|---|
패스트캠퍼스 스프링부터 4번쨰 수업 (0) | 2018.10.27 |
[Spring Boot] 엔티티 맵핑과 테스트 코드 작성 (0) | 2018.10.21 |
[Spring Boot] JPA (0) | 2018.10.20 |
[Spring Boot] JPA(강사님 수업 내용) (0) | 2018.10.20 |
- Total
- Today
- Yesterday
- Inception
- 깃허브
- 인셉션
- 관계대수
- 파라메터
- 항해플러스후기
- push_back
- GIT
- 부동산공부
- 월부닷컴
- 개발자 회고
- github
- 월급쟁이부자들
- pop_back
- 2023년
- front
- 열반스쿨기초반
- 폭포수
- 항해플러스백엔드
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- Use case
- 재테크공부
- docker
- Spring boot
- 내년은 빡세게!!
- 유즈케이스
- 도커
- 항해솔직후기
- 깃
- resize
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |