250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BOJ
- execute
- 일대다
- FetchType
- SQL프로그래밍
- querydsl
- 데코레이터
- 연관관계
- 다대다
- PS
- 이진탐색
- JPQL
- dfs
- fetch
- 다대일
- 유니크제약조건
- 연결리스트
- shared lock
- 스토어드 프로시저
- CHECK OPTION
- exclusive lock
- 지연로딩
- 힙
- eager
- 즉시로딩
- 비관적락
- 스프링 폼
- 백트래킹
- 낙관적락
- 동적sql
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
트랜잭션 범위의 영속성 컨텍스트 본문
728x90
스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다.
이 말은 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다.
트랜잭션을 시작할 떄 영속성 컨텍스트를 생성하고, 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다.
같은 트랜잭션 내에서는 항상 같은 영속성 컨텍스트에 접근한다.
즉, 1트랜잭션 1PC
-- --
보통 서비스 계층에 @Transactional 어노테이션을 선언해서 트랜잭션을 시작한다.
이 어노테이션이 있으면 호출한 메서드를 실행하기 직전에 스프링의 트랜잭션 AOP 가 먼저 동작한다.
# 흐름도
트랜잭션 시작
⬇️
메서드 호출
⬇️
메서드 정상 종료
⬇️
Persistence Context flush
⬇️
DB 트랜잭션 커밋
--
만약 메서드에서 예외가 발생하면 트랜잭션을 롤백하고 종료하는데 이 때는 플러시를 호출하지 않는다.
▶️ 트랜잭션이 같으면 같은 영속성 컨텍스트를 사용한다.
▶️ 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용한다.
- 여러 스레드에서 동시에 요청이 와서 같은 엔티티 매니저를 사용해도 트랜잭션에 따라 접근하는 영속성 컨텍스트가 다르다.
- 스프링 컨테이너는 스레드마다 각각 다른 트랜잭션을 할당한다.
- 따라서 같은 엔티티 매니저를 호출해도 접근하는 영속성 컨텍스트가 다르므로 멀티 스레드 상황에 안전하다.
'JPA' 카테고리의 다른 글
[JPA] 엔티티의 데이터를 변환해서 DB 에 저장하는 @Converter (0) | 2024.04.25 |
---|---|
[JPA] N+1 문제 (실은 1+N 문제) (0) | 2024.04.25 |
[JPA] 영속성 컨텍스트와 JPQL (0) | 2024.04.25 |
[Querydsl] 스프링 데이터 페이징 (0) | 2024.04.20 |
사용자 정의 리포지토리 구성 및 아키텍처 (0) | 2024.04.20 |