[스프링] 트랜잭션 처리 방법
스프링은 트랜잭션 처리를 위해 여러 가지 방법을 제공합니다. 여기에는 선언적 트랜잭션 관리, 프로그래밍 방식의 트랜잭션 관리, 트랜잭션 템플릿을 사용한 트랜잭션 관리 등이 포함됩니다.
선언적 트랜잭션 관리
이 방법은 트랜잭션을 선언적으로 처리할 수 있게 해줍니다. 이를 위해 @Transactional 애노테이션을 사용하며, 예를 들어 서비스 레이어의 메서드에 이 애노테이션을 추가하여 트랜잭션을 선언적으로 처리할 수 있습니다.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void updateUser(User user) {
// 사용자 업데이트 로직
userRepository.update(user);
}
}
프로그래밍 방식의 트랜잭션 관리
이 방법은 TransactionTemplate을 사용하여 프로그래밍 방식으로 트랜잭션을 처리하는 방법입니다. 이를 통해 개발자는 트랜잭션을 직접 제어할 수 있습니다.
@Service
public class UserService {
@Autowired
private TransactionTemplate transactionTemplate;
public void updateUser(User user) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
// 트랜잭션 내에서 수행할 로직
}
});
}
}
트랜잭션 템플릿을 사용한 트랜잭션 관리
스프링에서는 JdbcTemplate과 같은 방식으로 트랜잭션을 처리할 수도 있습니다. 이를 통해 개발자는 JDBC 코드 내에서 트랜잭션을 처리할 수 있습니다.
@Service
public class UserService {
@Autowired
private PlatformTransactionManager transactionManager;
public void updateUser(User user) {
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(status -> {
// 트랜잭션 내에서 수행할 로직
return null;
});
}
}
이러한 다양한 방법을 사용하여 스프링에서 트랜잭션을 처리할 수 있으며, 개발자는 상황에 맞게 적절한 방법을 선택하여 사용할 수 있습니다.
참고 문헌: