일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- git commit 협업
- 리팩토링2판4장
- 가상면접3장
- 테스트코드책
- git squash
- 헤드퍼스트전략패턴
- 시스템설계면접팁
- git commit merge
- gitsquash
- 리액트구글애널리틱스
- FirebaseAnalytics
- 디자인패턴
- awss3
- 가상면접2장
- cypressBDD
- s3이미지다운로드됨
- react-ga
- react
- formik submitting not working
- 가상면접으로대규모시스템
- 시스템설계방법
- 전략패턴
- 시스템설계면접예시
- formik react-query submitting not working
- Git commit 합치기
- 리팩터링2판테스트
- 시스템설계면접
- file not found Error
- cypress React
- 시스템설계
- Today
- Total
mingg IT
[Jpa] @transactional 격리수준과 전파속성 본문
우선 우리가 아는 @transactional annotation은 붙여주게되면 해당 메소드 시작부터 메소드 끝까지 하나의 transaction으로 관리하게 됨을 의미한다.
조금 자세히 공부해보니 해당 개념을 정확히 알지못하면 유지보수나 이슈 해결에 어려움을 겪을것 같아 정리해 두려고 한다.
우선 격리수준, 전파속성 두가지에 대해 알아보려고 한다.
격리수준
Read uncommitted
transaction이 아직 끝나지 않은 경우에 다른 transaction이 데이터를 읽을 수 있는 상황
Transaction lock 발생 가능성 있음.
만약 commit을 하지않고 rollback을 하게된다면?
Update 된 값을 보여줌. Dirty data를 보여줌(rollback 이 안먹음)
-> 해결법은 entity에 @DynamicUpdate 사용
일반적으로 많이 사용안함
Read committed
-> dirty data 발생하지 않음
그렇다면 read commited는 문제가 없을까 ?
JPA 영속성 컨텍스트의 1차캐시기능으로 인해 phantom read 문제가 발생한다.
SERIALIZABLE
read uncommit, read commited 의 문제를 모두 해결할 수 있지만 성능상의 문제로 잘 사용하지 않는다.
현업에서 Read uncommitted, SERIALIZABLE 은 잘 사용하지 않음
전파속성
여러 transaction간의 교통정리를 해줌. 즉 여러 메소드에 transaction의 설정이 되어 있을 때 각각 어떤방식으로 동작할 것인지.
Default 는 required
transaction이 있으면 사용하고 없으면 만들어서 사용하고. Save 메소드가 required임.
더 위에서 transaction써주고 내부에서 또 transaction써주면 하나가 exception발생하면 둘다 rollback됨
Requires new
매번 transaction을 생성하기 때문에 별도의 transaction이라고 판단함.
Nested
하나의 transaction 이지만 분리되어서 사용됨
종속적이지만 상위에 영향을 주지 않는다는 것이 (requires new와의 차이점)
'BackEnd' 카테고리의 다른 글
[MongoDB]MongooseServerSelectionError: connect ECONNREFUSED ::1:27017 에러 해결 (4) | 2022.02.05 |
---|---|
[Spring] AOP 개념 정리 (ver 2022년) (0) | 2021.12.29 |
[JPA] 영속성 컨텍스트 와 EntityManager (0) | 2021.12.24 |
[JPA] deleteAll(), deleteAllInBatch(), deleteInBatch() 차이점 (0) | 2021.12.09 |
[Spring] AOP custom annotation 사용하기 (0) | 2021.11.18 |