Spring Framework의 @Transaction 소개
@Transactional 주석과 응용프로그램에서 트랜잭션을 관리하는 데 도움이 되는 방법에 대해 살펴보자.
transation이란?
트랜잭션(transaction)은 컴퓨터 과학에서 하나의 작업 단위로 실행되는 연산의 집합이다. 트랜잭션은 데이터 일관성과 무결성을 보장하기 때문에 일반적으로 데이터베이스 작업 시 사용ㄷ뇌다.. 트랜잭션을 통해 작업 그룹을 단일 엔터티로 성공 또는 실패하도록 만들 수 있다.
트랜잭션은 일반적으로 ACID(원자성, 일관성, 격리 및 내구성)라는 네 가지 속성으로 구성되는데, 이러한 속성은 트랜잭션이 올바르게 완료되고 데이터가 일관되도록 하는 데 사용된다.
@Transactional이란?
@Transactional 주석은 응용프로그램의 트랜잭션을 쉽게 관리할 수 있는 Spring Framework 기능이다. 코드에서 트랜잭션 관리를 구현하는 선언적인 방법이다. 이 주석을 사용하면 트랜잭션을 처리하기 위해 코드를 작성할 필요 없이 트랜잭션을 쉽게 관리할 수 있다.
@트랜잭션 주석은 클래스 또는 메서드에 적용할 수 있으며, 백그라운드에서 트랜잭션 관리를 담당한다. @Transactional 주석을 사용하면 Spring이 자동으로 트랜잭션을 생성하고 트랜잭션 수명 주기를 관리한다. 따라서 트랜잭션을 수동으로 시작하거나 커밋할 필요가 없다.
@Transactional 사용법은?
@Transaction 주석은 메서드 또는 클래스에 적용할 수 있다. 주석이 클래스에 적용되면 클래스의 모든 메서드에 적용된다. @Transactional 주석을 사용하는 방법은 다음과 같다:
@Service
@Transactional
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
@Autowired
public UserServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void createUser(User user) {
userRepository.save(user);
}
public User getUserById(Long id) {
return userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
}
}
이 예시에서는 @Transactional 주석이 UserServiceImp 클래스에 적용된다. 즉, 이 클래스의 모든 메서드가 트랜잭션 내에서 실행된다. createUser 메서드가 호출되면 사용자가 트랜잭션 내에 저장되고, 예외가 발생하면 트랜잭션이 롤백되고 변경 내용이 데이터베이스에 저장되지 않는다.
@Transactional은 메서드에도 사용이 가능하다.
@Transactional
public void createUser(User user) {
userRepository.save(user);
}
이 예시에서는 @Transactional 주석이 createUser 메서드에 적용된다. 즉, 이 메서드가 호출될 때마다 새 트랜잭션이 생성되고 이 트랜잭션 내에서 메서드가 실행된다. 메서드에서 예외가 발생하면 트랜잭션이 롤백되고 변경 내용이 데이터베이스에 저장되지 않는다.
결론
@Transactional 주석은 응용프로그램에서 트랜잭션을 쉽게 관리할 수 있도록 해주는 Spring Framework의 강력한 기능이다. 이 주석을 사용하면 데이터 일관성과 무결성을 보장할 뿐만 아니라 코드를 더 읽기 쉽고 유지 관리할 수 있다. @Transactional 주석을 사용할 때는 전파 및 분리에 사용할 수 있는 다양한 옵션을 이해하는 것이 중요하다. 이러한 개념을 확실하게 이해하면 Spring Framework를 사용하여 강력하고 확장 가능한 애플리케이션을 구축할 수 있다.
'spring > study' 카테고리의 다른 글
[Spring] MockitoExtension에 대해서 알아보자 (0) | 2023.02.18 |
---|---|
[Spring] @EnableWebSecurity 에 대해서 알아보자 (0) | 2023.02.16 |
[Spring] @OnDelete 에 대해서 알아보자 (0) | 2023.02.16 |
[Spring] @Query 에 대해서 알아보자 (0) | 2023.02.15 |
[Spring] @Autowired 에 대해서 알아보자 (0) | 2023.02.14 |