inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 2편 - 데이터 접근 활용 기술

스프링 트랜잭션 전파4 - 전파 예제

내부 트랜잭션이 여러 개 있을 때 롤백 실험

535

en chick
0

내부 트랜잭션이 여러 개 있을 때 앞쪽 내부 트랜잭션이 롤백될 경우 이후의 내부 트랜잭션은 로직을 수행하는지, 아니면 이후 로직은 수행되지 않고 바로 물리 트랜잭션을 롤백시키는지 의문이 들어 확인해보았습니다.

 

구조

외부 트랜잭션

내부 트랜잭션 1

내부 트랜잭션 2

 

코드: 내부 트랜잭션1 - 롤백, 내부 트랜잭션2 -커밋

결과

결과를 확인해보면 내부 트랜잭션1을 롤백하는 코드가 실행될 때 물리 트랜잭션을 rollback-only로 마킹하고 해당 내부 트랜잭션이 실패합니다. -> 트랜잭션 동기화 매니저에 마킹을 합니다.(이후 강의 내용)

하지만 이후 로직을 수행하러 갑니다.

수행하러 가서 내부 트랜잭션2 커밋 호출문을 만나면 글로벌(물리) 트랜잭션이 rollback-only로 마킹되어있기 때문에 커밋할 수 없다고 합니다.

 

계속 가서 마지막에 외부 트랜잭션 커밋이 호출되면 UnexpectedRollbackException 예외가 발생하면서 "rollback-only로 마킹되어있기 때문에 해당 트랜잭션은 롤백되었다"는 로그가 뜹니다.

 

해당 예외의 조상에는 발생시 트랜잭션이 롤백되는 RuntimeException 예외가 있었습니다.

 

결론

내부 트랜잭션 수행 중 롤백 발생시에 바로 물리 트랜잭션이 롤백되는게 아니다.

물리 트랜잭션 -> 트랜잭션 동기화 매니저가 rollback-only의 체크 유무로 롤백 여부를 판단하고, 예상치 못한 상황(rollback-only 마킹돼 있는데 물리 트랜잭션을 커밋하려고 할 때)에서 UnexpectedRollbackException을 발생시켜 롤백을 수행한다.

 

아직 모르는게 많아서 결론이 맞지 않을 수도 있습니다! 이후 강의를 수강하면서 부족한 점을 채우러 가겠습니다~!

 

 

spring

답변 0

MVC 패턴을 정확히 익힐려면 어떻게 해야할까요?

0

362

1

선생님 조언 부탁드립니다.

0

290

0

WebFlux를 실무에 적용하기 전에 고민이 있습니다.

0

312

0

커리큘럼 고민

0

371

1

스프링 백엔드 개발 로드맵

0

456

1

Spring 공부 어떤 강의 순서로 듣는게 좋은가요?

0

649

1

프로젝트와 강의 우선 순위 관련 질문드립니다!

1

470

1

코틀린 개발자로 취업하게 되면서 고민이 생겼습니다.

0

407

1

강의 구입에 관한 질문입니다(설연휴 할인 관련)

0

386

1

학습 방향에 고민이 있습니다.

0

502

1

관리자권한으로 실행 자체가 뜨지 않으면 어떻게 해야할까요?

0

402

1

스프링 선수학습이 필요한가요?

1

514

1