9. 트랜잭션

Spring은 트랜잭션 관리를 위한 다양한 기능을 제공하여 데이터베이스 또는 다른 리소스와의 상호작용 시 일관성과 안정성을 보장합니다. Spring에서의 트랜잭션 관리는 다음과 같은 방법으로 수행됩니다.

1. 선언적 트랜잭션 관리

Spring은 선언적 트랜잭션 관리를 위해 @Transactional 어노테이션을 제공합니다. @Transactional 어노테이션을 메서드 레벨 또는 클래스 레벨에 적용하여 트랜잭션 경계를 설정할 수 있습니다. 이 어노테이션을 사용하면 Spring은 트랜잭션을 시작하고 커밋 또는 롤백을 자동으로 처리합니다.

2. 트랜잭션 경계 설정

Spring은 트랜잭션 경계를 설정하기 위해 PlatformTransactionManager 인터페이스를 사용합니다. 이 인터페이스는 트랜잭션의 시작, 커밋, 롤백 등을 제어하는 메서드를 정의합니다. Spring은 다양한 트랜잭션 관리자를 제공하며, 데이터베이스 트랜잭션의 경우 JpaTransactionManager, DataSourceTransactionManager 등을 사용할 수 있습니다.

3. 롤백과 예외 처리

Spring에서 트랜잭션 롤백은 예외가 발생한 경우 자동으로 수행됩니다. 예외가 발생하면 롤백이 발생하고, 예외가 발생하지 않으면 커밋이 수행됩니다. 또한, @Transactional 어노테이션에서 롤백 조건을 지정할 수 있습니다. 예를 들어, 특정 예외 타입에 대해 롤백을 수행하도록 설정할 수 있습니다.

4. 중첩된 트랜잭션

Spring은 중첩된 트랜잭션을 지원합니다. 중첩된 트랜잭션은 트랜잭션 안에 다른 트랜잭션이 포함되는 형태입니다. 이를 통해 트랜잭션의 단위를 더 작게 나누어 필요한 부분만 롤백 또는 커밋할 수 있습니다. 중첩된 트랜잭션은 @Transactional 어노테이션의 속성인 propagation을 설정하여 사용할 수 있습니다.

Spring에서의 트랜잭션 관리는 데이터베이스뿐만 아니라 메시지 큐, 파일 시스템 등 다양한 리소스와의 상호작용에도 적용할 수 있습니다. 트랜잭션 관리는 애플리케이션의 일관성과 안정성을 보장하며, 예외 상황에서도 데이터의 일관성을 유지할 수 있도록 도와줍니다. Spring의 트랜잭션 관리 기능은 개발자가 트랜잭션의 범위와 동작을 선언적으로 설정하여 코드를 간결하게 유지하고, 트랜잭션 관련 작업을 편리하게 처리할 수 있도록 지원합니다.

Last updated