..
Transaction: 데이터의 무결성을 지키는 마법
1. 트랜잭션(Transaction)이란?
데이터베이스의 상태를 변경시키는 하나의 논리적인 작업 단위를 말합니다. 트랜잭션 내에서 수행되는 여러 작업은 모두 성공(Commit)하거나, 하나라도 실패하면 모두 없던 일로 되돌려져야(Rollback) 합니다.
2. 왜 필요한가?
가장 대표적인 예시는 송금 시스템입니다.
- 단계 1: A의 계좌에서 1만 원을 차감합니다.
- 단계 2: B의 계좌에 1만 원을 가산합니다.
만약 ‘단계 1’은 성공했는데 시스템 장애로 ‘단계 2’가 실패한다면, 1만 원은 공중 분해됩니다. 트랜잭션은 이런 상황에서 ‘단계 1’의 작업까지 취소하여 데이터의 모순을 막아줍니다.
3. Spring에서의 선언적 트랜잭션
스프링에서는 복잡한 설정 없이 @Transactional 어노테이션 하나로 트랜잭션 관리를 자동화할 수 있습니다.
@Transactional
public void transferMoney(Long fromId, Long toId, Long amount) {
// 이 안의 모든 로직은 하나의 트랜잭션으로 묶입니다.
accountService.withdraw(fromId, amount);
accountService.deposit(toId, amount);
}
@Transactional이 선언된 메소드가 호출되면 스프링은 해당 객체를 감싸는 프록시(Proxy)를 생성하여, 로직 실행 전 트랜잭션을 시작하고 종료 후 성공 여부에 따라 커밋 또는 롤백을 알아서 처리해 줍니다.