2025-08-15

1일 1아티클

하이퍼커넥트 테크

스프링 트랜잭션 롤백

@Transactional

  • 해당 메서드의 작업을 하나의 트랜잭션 묶음으로 만들고, 메서드 실행 중 문제 발생 시 자동 롤백

기본적으로 RuntimeException (Unchecked Exception) 발생 시에만 롤백

  • RuntimeException : 예상치 못한 문제이므로, 데이터 일관성을 위해 즉시 롤백
  • Exception (Checked) : 오류가 아니라 정상적인 비즈니스 정책일 수 있으므로, 롤백하지 않고 개발자가 직접 후속 처리하도록 유도
    → But, Checked Exception 상황에서도 롤백이 필요한데 개발자들이 이러한 역할을 이해하지 못하고 실수 유발

롤백 마킹

  • @Transactional 붙은 메서드 실행 시, 스프링은 TransactionInterceptor (트랜잭션 감시자) 를 내세워 롤백 마킹 진행

결론

  1. 프록시의 동작 : @Transactional 은 외부 호출 시에만 작동
  2. 롤백 마킹 : Uncheked Exception 발생 시 감시자가 롤백 마킹을 남기며, 일단 마킹되면 예외를 try-catch 로 잡아도 롤백됨
  3. 트랜잭션 전파 : 트랜잭션 분리 시, 롤백 영향 또한 분리된 트랜잭션 안에서만 작동
    • ex. @Transactional(propagation = Peopagation.Requires_NEW) (해당 메서드는 무조건 새로운 트랜잭션을 만들어서 독립적으로 실행시킬 것)

매우 긴 작업은 작은 트랜잭션 단위로 쪼개어, 중간에 실패하더라도 실패한 작은 단위만 롤백할 수 있게 할 것 → 시스템의 안정성 및 효율 향상

많은 프로젝트에서 @Transactional 의 원리를 제대로 이해하지 못하고 덕지덕지 붙였던 것에 대해 돌아보게 되는 아티클..

오늘 배운 것

내일 할 일

  1. 이력서, 포트폴리오 정리
  2. 매터모스트 출결체크 알림 공휴일 제거

참고자료

results matching ""

    No results matching ""