@Transactional 어노테이션 이해하기카테고리 없음2024. 1. 5. 13:28
Table of Contents
Transaction이란?
데이터베이스 수업시간에 꼭 짚고 넘어가는 내용인데요,
“일련의 데이터 조작 작업을 하나의 단위로 묶어 수행한다.”
라고 이해할 수 있겠습니다.
왜 그렇게 하냐?
은행에서 계좌이체를 한다고 생각해봅시다.
계좌이체에는 크게 두가지 작업이 있습니다.
- 보내는 계좌에서 돈을 인출하기
- 받는 계좌에 돈을 입금하기
이 과정에서, 중간에 어떠한 에러가 발생해서
1번 과정만 수행되고, 2번 과정이 수행되지 않으면?
돈이 공중분해 되는 일이 발생하겠죠.
그래서, 이러한 거래를 하나의 단위로 묶어서 수행하는 것입니다.
Transaction을 활용하면, 하나의 단위는
모든 절차가 잘 완료되면 → Commit
하나라도 문제가 발생하면 → Rollback
으로 구성됩니다.
이를 통해, 데이터의 일관성과 무결성을 보장하며,
항상 계좌의 잔액이 정확하게 유지되도록 도와줍니다.
그럼 이를 Spring에선 어떻게 구현하냐?
@Service
public class TransferService {
@Autowired
private AccountRepository accountRepository;
@Transactional
public void transferFunds(String fromAccount, String toAccount, double amount) {
// 이체하는 과정
Account from = accountRepository.findByAccountNumber(fromAccount);
Account to = accountRepository.findByAccountNumber(toAccount);
// 잔액 체크
if (from.getBalance() < amount) {
throw new InsufficientBalanceException("잔액 부족");
}
// 보내는 계좌에서 출금
from.setBalance(from.getBalance() - amount);
accountRepository.save(from);
// 받는 계좌에 입금
to.setBalance(to.getBalance() + amount);
accountRepository.save(to);
}
}
이와 같이, @Transactional 어노테이션을 통해,
transferFunds 에서 발생하는, 출금과 입금을 하나의 작업단위로 묶는 것을 활용할 수 있습니다.
또한, Transaction의 롤백 및 커밋 기능은 Spring 프레임워크에서 자동으로 처리됩니다.
@찐빵1 :: 위기주도학습
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!