본문 바로가기
Spring/DB연동

트랜잭션 범위의 PersistenceContext

by doriver 2025. 4. 20.

스프링에서 JPA를 사용하게 되면 
스프링 컨테이너가 트랜잭션과 PersistenceContext를 관리
스프링 컨테이너의 기본 전략은 '트랜잭션 범위의 PersistenceContext' 이다.

 

트랜잭션 범위의 PersistenceContext

트랜잭션의 범위와 PersistenceContext의 생존 범위를 맞추는 전략으로
트랜잭션이 시작하는 순간 PersistenceContext도 생성되고

, 트랜잭션이 끝나는 순간에 PersistenceContext도  종료됨.


트랜잭션이 같으면, 같은 영속성 컨텍스트를 사용한다.


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

스프링 컨테이너는 
스레드마다 각각 다른 트랜잭션을 할당하여
영속성 컨텍스트가 스레드 간에 공유되지 않아 
멀티스레드 상황에 안전하다.

 

 

트랜잭션 AOP

@Transaction어노테이션이 있으면 
호출한 메소드를 실행하기 직전에 스프링의 트랜잭션 AOP가 먼저 동작

트랜잭션의 대상 메소드가 정상 종료되면 
트랜잭션을 커밋하면서 종료(  만약 예외가 발생한다면 트랜잭션을 롤백하고 종료 )

트랜잭션을 커밋하게 되면 
JPA는 영속성 컨텍스트를 플러시해서 변경 내용을 데이터베이스에 반영한 후에
, 데이터베이스 트랜잭션을 커밋