본문 바로가기
Spring

Spring Annotation 7. @Transactional

by Status Code 2023. 4. 19.

스프링에서 @Transactional 사용법 및 예제
@Transactional은 스프링(Spring) 프레임워크에서 제공하는 어노테이션으로, 트랜잭션 관리를 선언적으로 처리할 수 있게 해줍니다. 이 어노테이션을 사용하면 메서드가 트랜잭션 경계에서 실행되며, 예외가 발생하면 자동으로 롤백됩니다. 이를 통해 데이터베이스 작업을 안전하게 처리할 수 있습니다.

예제
1. 스프링 데이터 JPA를 사용하는 Customer 엔티티와 CustomerRepository 인터페이스 생성

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String firstName;
    private String lastName;

    // 생성자, getter, setter 생략
}
import org.springframework.data.jpa.repository.JpaRepository;

public interface CustomerRepository extends JpaRepository<Customer, Long> {
}

 

 

2. CustomerService 클래스 생성 및 @Transactional 사용

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class CustomerService {

    @Autowired
    private CustomerRepository customerRepository;

    @Transactional
    public void saveTwoCustomers(Customer customer1, Customer customer2) {
        customerRepository.save(customer1);

        // 중복된 고객 ID로 인해 예외가 발생합니다.
        if (customer1.getId().equals(customer2.getId())) {
            throw new RuntimeException("중복된 고객 ID");
        }

        customerRepository.save(customer2);
    }
}

위의 예제에서 @Transactional 어노테이션을 사용하여 saveTwoCustomers() 메서드가 트랜잭션 경계에서 실행되게 합니다. 만약 중복된 고객 ID로 인해 예외가 발생하면, 트랜잭션은 자동으로 롤백되어 데이터베이스에 저장되지 않습니다.

이처럼 @Transactional을 사용하면 데이터베이스 작업을 안전하게 처리할 수 있습니다. 이를 통해 데이터 일관성을 유지하고, 애플리케이션의 안정성을 높일 수 있습니다.

'Spring' 카테고리의 다른 글

Spring Annotation 9. @Component  (0) 2023.04.19
Spring Annotation 8. @ComponentScan  (0) 2023.04.19
Spring Annotation 6. @Autowired  (0) 2023.04.19
Spring Annotation 5. @RequestParam  (0) 2023.04.19
Spring Annotation 4. @PathVariable  (0) 2023.04.19

댓글