트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다.
여러 개의 작업(쿼리)이 하나의 묶음으로 처리되어, 전부 성공하거나, 전부 실패(롤백) 해야 하는 것이 핵심이다.
@Transactional
public void createOrder() {
orderRepository.save(order); // 주문 저장
paymentService.pay(); // 결제 처리
stockService.decreaseStock(); // 재고 감소
}
Spring에서 트랜잭션을 간편하게 관리할 수 있도록 지원하는 어노테이션
사용 위치
@Service
@Transactional
public class OrderService {
public void createOrder(...) {
// 트랜잭션 적용됨
}
}
조회 전용 서비스에 사용한다면 ?
@Transactional(readOnly = true)
public List<Product> getProducts() {
return productRepository.findAll();
}
장점
@Transactional은 public 메서드에만 적용됨
프록시 기반이므로 같은 클래스 내에서 내부 메서드 호출 시 적용 안 됨
체크 예외(Checked Exception) 발생 시 롤백 안 됨 → rollbackFor 속성으로 명시 필요
트랜잭션은 논리적 작업 단위를 안전하게 처리하기 위한 필수 개념
@Transactional로 트랜잭션을 쉽게 관리할 수 있음
조회만 할 경우 readOnly = true로 성능 최적화 가능
실무에서 서비스 계층(Service Layer)에 가장 많이 사용함