[Spring] @Transactional의 8가지 함정
·
Framework/Spring
안녕하세요.지난 글에서는 @Transactional의 개념과 동작 원리에 대해 정리했습니다.@Transactional은 Spring AOP 기반의 프록시 방식으로 동작하며, 기본 롤백 정책이 RuntimeException과 Error에만 적용된다는 점을 살펴봤습니다.이제 실제 운영 환경에서 트랜잭션이 어떻게 문제로 이어지는지 살펴보겠습니다.대부분의 트랜잭션 이슈는 결국 두 가지 원인에서 시작됩니다.@Transactional은 프록시가 메서드 호출을 가로채는 방식으로 동작한다.체크 예외(Exception 및 하위)는 기본적으로 롤백되지 않는다.[Caller] ↓[프록시] ↓ 트랜잭션 시작[실제 Bean] ↓[프록시] ↓ 커밋 / 롤백이번 글에서는 운영에서 자주 마주치는 @Transaction..
[Spring] @Transactional
·
Framework/Spring
안녕하세요.오늘은 Spring의 annotation 중에 @Transactional이 무엇이며 내부적으로 어떻게 동작하는지를 정리해보려고 합니다.사용법은 단순해 보이지만 동작 방식을 모르고 쓰면 데이터 정합성 사고로 이어지기 쉬운 어노테이션입니다.이 글에서는 트랜잭션의 기본 개념부터 @Transactional이 내부적으로 어떤 방식으로 동작하는지까지 차근차근 살펴보겠습니다. Transaction이란?Transaction은 하나의 논리적 작업 단위로 묶인 데이터베이스 연산들의 집합입니다.핵심은 "전부 성공하거나, 전부 실패한다"는 점입니다. 가장 자주 인용되는 예시는 계좌 이체입니다.1. A 계좌에서 10만원 출금2. B 계좌에 10만원 입금1번이 성공한 뒤 2번이 실패하면 A의 돈만 사라지고 B는 받지..