포스트

Spring 트랜잭션 전파(Propagation) 속성 치트시트

@Transactional의 propagation 옵션 7가지를 표로 정리한 짧은 치트시트입니다. 개념 설명과 예시 코드는 이전 트랜잭션 정리 글에 있습니다.

Spring 트랜잭션 전파(Propagation) 속성 치트시트

개념 설명과 예시 코드는 스프링 트랜잭션 개념 정리 글에 있습니다. 이 글은 propagation 옵션 7가지만 빠르게 찾아보기 위한 치트시트입니다.

한눈에 보는 표

옵션기존 트랜잭션 있음기존 트랜잭션 없음물리 트랜잭션
REQUIRED (기본값)참여새로 시작참여 시 공유
REQUIRES_NEW기존을 보류(suspend)하고 새로 시작새로 시작항상 별도
NESTED부모 안에 savepoint 생성새로 시작부모와 동일 물리 트랜잭션
SUPPORTS참여트랜잭션 없이 실행참여 시 공유
NOT_SUPPORTED기존을 보류하고 트랜잭션 없이 실행트랜잭션 없이 실행없음
MANDATORY참여예외 발생참여 시 공유
NEVER예외 발생트랜잭션 없이 실행없음

롤백 전파 여부

옵션자식 실패 시 부모 영향부모 실패(롤백) 시 자식 영향
REQUIRED같은 트랜잭션이라 부모도 롤백자식도 함께 롤백
REQUIRES_NEW부모에 영향 없음 (독립 트랜잭션)자식은 이미 커밋됐다면 영향 없음
NESTEDsavepoint까지만 롤백, 부모는 계속 진행 가능자식도 함께 롤백 (부모 물리 트랜잭션에 속함)

실무 사용 빈도

  • REQUIRED: 기본값, 대부분의 경우
  • REQUIRES_NEW: 감사 로그, 알림 발송 등 “바깥이 실패해도 반드시 남아야 하는 작업”
  • NESTED: JDBC savepoint 지원 필요 + JPA 환경 제약으로 실무에서 드묾
  • SUPPORTS / NOT_SUPPORTED / MANDATORY / NEVER: 거의 안 씀 — 특정 아키텍처 제약을 강제하고 싶을 때만

참고 자료

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.