티스토리 뷰
Spring JPA 영속성 컨텍스트
EntityManager
영속성 컨텍스트
엔티티 생명주기
- 영속성 컨텍스트란, 애플리케이션과 데이터베이스 사이에서 엔티티를 저장하고 관리하는 논리적인 환경이다.
- EntityManager가 생성되면 논리적 개념인 영속성 컨텍스트가 1:1로 생성되고 EntityManager를 통해 접근할 수 있게 된다.
- 처음에 객체를 new 메서드로 생성을 하면 영속성 컨텍스트와 관계가 없는
비영속
상태이다. - entitymanager를 생성하고 persist(객체) 를 하면
영속
상태가 되면서영속성 컨텍스트
에 객체가 올라간다. 이 때 DB에 저장되는 것이 아니라 커밋이나 flush를 해야 DB에 저장되고 그 전까지는 영속성 컨텍스트에만 존재한다. - 영속성 컨텍스트의 주요 역할로는
1차 캐시
와쓰기 지연 저장소
, 그리고변경감지
가 있다. - 먼저 1차 캐시의 역할로는, 조회 요청 시 JPA는 영속성 컨텍스트의 1차 캐시를 먼저 확인하고 있다면 DB까지 가지 않고 바로 반환을 하고, 없다면 DB를 조회해서 값을 가져온 후 1차 캐시에 저장을 한다.
- 그리고 1차 캐시로
반복 가능한 읽기
등급의 트랜잭션 격리 수준을 DB가 아닌 애플리케이션 차원에서 제공하여 엔티티의 동일성을 보장한다. - 그리고 SQL을 생성할 때마다 DB에 전송하는 것이 아니라
쓰기 지연 저장소
에 모아두었다가 트랜잭션이 커밋되는 순간 한 번에 DB에 전송한다. - 또한 JPA는 1차 캐시에 저장을 할 때 저장되는 시점의
스냅샷
또한 보관을 하는데커밋되는 시점
에엔티티와 스냅샷을 비교
하여 변경이 있다면 이를 감지하여update
쿼리를 실행한다.
트랜잭션 격리 수준
- 트랜잭션에서 일관성 없는 데이터를 허용하는 수준
- 트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하도록 막는데(locking) 무조건적인 locking은 DB의 성능을 떨어지게 한다. 따라서 적정한 locking 방법을 적용하는 것이 필요!
- 종류
- Read Uncommitted(레벨 0)
- 트랜잭션이 처리중이거나 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
- DB의 일관성을 유지하는 것이 불가능
- Read Committed(레벨 1)
- Commit이 이루어진 데이터만 접근 가능
- 트랜잭션이 수행되는 동안 다른 트랜잭션은 대기
- Repeatable Read(레벨 2)
- 트랜잭션이 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장함
- 다른 사용자는 트랜잭션 영역에 해당되는 데이터 수정 불가능
- Serializable(레벨 3)
- 완벽한 읽기 읽관성 모드
- 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 및 입력 불가능
- Read Uncommitted(레벨 0)
연관자료
반응형
'CS > CS 14일 프로젝트' 카테고리의 다른 글
[CS 14일 프로젝트] 2022-12-07(JPA N+1문제) (0) | 2022.12.07 |
---|---|
[CS 14일 프로젝트] 2022-12-06(객체지향프로그래밍) (0) | 2022.12.06 |
[CS 14일 프로젝트] 2022-12-05(쿠키와 세션) (0) | 2022.12.05 |
[CS 14일 프로젝트] 2022-12-04(URI과 URL, MVC) (0) | 2022.12.04 |
[CS 14일 프로젝트] 2022-12-03(REST API, 오버라이딩과 오버로딩) (0) | 2022.12.03 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JavaScript
- Nest
- DP
- SQLD
- Algorithm
- 이분탐색
- 스프링
- CS
- 정렬
- 알고리즘
- 자바dp
- BFS
- 해시맵
- 자바bfs
- 프로그래머스
- 타입스크립트
- Spring
- JPA
- SQL
- dfs
- 스프링부트
- 자바스크립트
- 형변환
- 리액트
- 자바트리
- 백준
- 자바
- java
- Comparator
- Queue
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함