2025-08-15
1일 1아티클
하이퍼커넥트 테크
스프링 트랜잭션 롤백
@Transactional
- 해당 메서드의 작업을 하나의 트랜잭션 묶음으로 만들고, 메서드 실행 중 문제 발생 시 자동 롤백
기본적으로 RuntimeException (Unchecked Exception) 발생 시에만 롤백
- RuntimeException : 예상치 못한 문제이므로, 데이터 일관성을 위해 즉시 롤백
- Exception (Checked) : 오류가 아니라 정상적인 비즈니스 정책일 수 있으므로, 롤백하지 않고 개발자가 직접 후속 처리하도록 유도
→ But, Checked Exception 상황에서도 롤백이 필요한데 개발자들이 이러한 역할을 이해하지 못하고 실수 유발
롤백 마킹
@Transactional
붙은 메서드 실행 시, 스프링은TransactionInterceptor
(트랜잭션 감시자) 를 내세워 롤백 마킹 진행
결론
- 프록시의 동작 :
@Transactional
은 외부 호출 시에만 작동 - 롤백 마킹 : Uncheked Exception 발생 시 감시자가 롤백 마킹을 남기며, 일단 마킹되면 예외를 try-catch 로 잡아도 롤백됨
- 트랜잭션 전파 : 트랜잭션 분리 시, 롤백 영향 또한 분리된 트랜잭션 안에서만 작동
- ex.
@Transactional(propagation = Peopagation.Requires_NEW)
(해당 메서드는 무조건 새로운 트랜잭션을 만들어서 독립적으로 실행시킬 것)
- ex.
매우 긴 작업은 작은 트랜잭션 단위로 쪼개어, 중간에 실패하더라도 실패한 작은 단위만 롤백할 수 있게 할 것 → 시스템의 안정성 및 효율 향상
많은 프로젝트에서
@Transactional
의 원리를 제대로 이해하지 못하고 덕지덕지 붙였던 것에 대해 돌아보게 되는 아티클..
오늘 배운 것
내일 할 일
- 이력서, 포트폴리오 정리
- 매터모스트 출결체크 알림 공휴일 제거