Dazzling 개발 노트

[Spring] @Transactional 어노테이션 사용 이유 본문

Develop/Spring

[Spring] @Transactional 어노테이션 사용 이유

dj._.dazzling 2024. 1. 25. 21:02

 

스프링 프레임워크에서 제공하는 @Transactional 어노테이션은 데이터의 일관성과 무결성을 유지하기 위해 트랜잭션을 선언적으로 관리하는 강력한 메커니즘을 제공한다. 

트랜잭션(Transaction)이란?

트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 작업 단위로, 여러 작업들이 모두 성공적으로 완료되거나, 하나라도 실패할 경우 전체 작업이 취소(롤백)되는 것을 보장한다. 트랜잭션은 일반적으로 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 만족해야 한다.

@Transactional 어노테이션의 역할

@Transactional 어노테이션은 메소드나 클래스 레벨에 적용되어, 해당 범위의 실행을 하나의 트랜잭션으로 묶는다. 이 어노테이션을 사용함으로써 개발자는 트랜잭션의 경계를 명확히 정의하고, 스프링 컨테이너가 트랜잭션의 생성, 커밋, 롤백 등을 자동으로 관리하도록 할 수 있다.

사용 이유 및 장점

데이터의 일관성 유지

  • @Transactional을 사용하면 여러 작업을 포함하는 비즈니스 로직을 실행할 때 모든 작업이 성공적으로 완료되거나, 실패 시 롤백을 통해 데이터의 일관성을 유지할 수 있다.

개발 편의성

  • 트랜잭션 관리를 코드 대신 선언적으로 처리함으로써, 개발자는 비즈니스 로직에 더 집중할 수 있으며, 코드의 가독성과 유지보수성이 향상된다.

유연한 트랜잭션 설정

  • @Transactional 어노테이션은 전파 행위(propagation behavior), 격리 수준(isolation level), 롤백 규칙 등 트랜잭션의 세부적인 설정을 조정할 수 있는 다양한 속성을 제공한다.

 

조회 작업에서의 @Transactional 활용

조회 작업과 @Transactional

  • 일반적으로, 데이터 조회 작업에서는 @Transactional을 사용할 필요가 없으나, 일관된 데이터 읽기가 필요하거나 지연 로딩과 같은 JPA 기능을 활용할 경우에는 사용할 수 있다.

readOnly 속성의 활용

  • 조회 작업에 @Transactional을 사용하는 경우, readOnly=true 속성을 설정함으로써 트랜잭션을 읽기 전용으로 명시할 수 있다. 이는 트랜잭션의 오버헤드를 줄이고 성능을 최적화하는 데 도움이 된다. 읽기 전용 트랜잭션에서는 데이터를 변경하는 작업이 발생하면 예외가 발생할 수 있으므로, 데이터의 무결성 보호에도 기여한다.

 

 

호기심 해결

@Transactional을 조회 요청에서도 사용하는지 궁금했는데, 이번 기회에 변경 작업뿐만 아니라 특정 상황에서 조회 작업에도 적절히 활용될 수 있다는 사실을 알았다.

 

 

 

참고 링크

https://blog.neonkid.xyz/289
https://kafcamus.tistory.com/30
https://hungseong.tistory.com/74