스프링에서 JPA를 사용하게 되면
스프링 컨테이너가 트랜잭션과 PersistenceContext를 관리
스프링 컨테이너의 기본 전략은 '트랜잭션 범위의 PersistenceContext' 이다.
트랜잭션 범위의 PersistenceContext
트랜잭션의 범위와 PersistenceContext의 생존 범위를 맞추는 전략으로
트랜잭션이 시작하는 순간 PersistenceContext도 생성되고
, 트랜잭션이 끝나는 순간에 PersistenceContext도 종료됨.
트랜잭션이 같으면, 같은 영속성 컨텍스트를 사용한다.

트랜잭션이 다르면, 다른 영속성 컨텍스트를 사용한다.

스프링 컨테이너는
스레드마다 각각 다른 트랜잭션을 할당하여
영속성 컨텍스트가 스레드 간에 공유되지 않아
멀티스레드 상황에 안전하다.
트랜잭션 AOP
@Transaction어노테이션이 있으면
호출한 메소드를 실행하기 직전에 스프링의 트랜잭션 AOP가 먼저 동작
트랜잭션의 대상 메소드가 정상 종료되면
트랜잭션을 커밋하면서 종료( 만약 예외가 발생한다면 트랜잭션을 롤백하고 종료 )
트랜잭션을 커밋하게 되면
JPA는 영속성 컨텍스트를 플러시해서 변경 내용을 데이터베이스에 반영한 후에
, 데이터베이스 트랜잭션을 커밋

'Spring > DB연동' 카테고리의 다른 글
| JPA Entity 연관관계 걸어야 하나 (1) | 2025.04.27 |
|---|---|
| @Transactional 붙은 메소드 (0) | 2025.04.15 |
| @Transactional , JPA , SimpleJpaRepository (0) | 2025.04.15 |
| JPA 즉시로딩(EAGER), 지연로딩(LAZY) (0) | 2025.04.02 |
| JPA기본( EntityManager, PersistenceContext ) (0) | 2025.04.02 |