[스프링] 스프링 트랜잭션

스프링 프레임워크는 트랜잭션 처리를 지원하기 위한 다양한 기능을 제공합니다. 스프링의 트랜잭션 관리기능을 사용하면 데이터베이스 연산을 안전하게 처리하고 데이터 일관성을 유지할 수 있습니다.

트랜잭션 소개

트랜잭션이란 한 논리적 작업을 수행하기 위한 일련의 연산을 말합니다. 이러한 연산은 모두 하나의 단위로 처리되어야 하며, 모든 연산이 성공적으로 완료된 경우에만 커밋되어야 합니다. 그렇지 않으면 모든 연산은 롤백되어야 합니다.

스프링의 트랜잭션 처리

스프링은 Declarative 방식과 Programmatic 방식으로 트랜잭션을 처리할 수 있습니다.

Declarative 방식

Declarative 방식에서는 코드 내에서 트랜잭션 관련 로직을 명시적으로 작성하지 않습니다. 대신 @Transactional 어노테이션을 이용하여 트랜잭션을 적용할 메서드를 지정합니다. 이를 통해 트랜잭션 처리를 간단하게 할 수 있습니다.

예시:

@Transactional
public void performTask() {
    // 트랜잭션을 적용할 비즈니스 로직
}

Programmatic 방식

Programmatic 방식에서는 트랜잭션 관련 로직을 코드 내에서 명시적으로 작성합니다. 트랜잭션 시작, 커밋, 롤백 등의 작업을 직접 수행해야 합니다.

예시:

TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
    // 트랜잭션 처리 로직
    transactionManager.commit(status);
} catch(Exception ex) {
    transactionManager.rollback(status);
}

트랜잭션 관리자

스프링에서는 PlatformTransactionManager 인터페이스를 통해 다양한 종류의 트랜잭션 관리자를 제공합니다. 이를 통해 다양한 데이터베이스나 트랜잭션 환경에 맞게 트랜잭션을 처리할 수 있습니다.

참고 자료