HyeLog

Spring Boot - 트랜잭션(Transaction) 개념 및 사용법 본문

웹 개발/Spring Boot

Spring Boot - 트랜잭션(Transaction) 개념 및 사용법

shj718 2022. 3. 12. 16:35

개념

💡트랜잭션(Transaction)이란? 한번에 처리되어야하는 일련의 작업을 의미한다. 더이상 쪼개질 수 없는 최소 작업 단위라고 생각하면 된다.

 

❓트랜잭션이 필요한 이유로 가장 많이 드는 예시는 돈을 송금하는 상황이다. 만약 A가 B에게 십만원을 송금하는 도중에 문제가 발생한다면, A의 통장에서는 십만원이 빠져나갔지만, B의 통장 잔액은 그대로인 상황이 발생한다. 이런 일을 방지하기 위해서 트랜잭션 처리가 필요하다.

 

✍️ 트랜잭션의 결과는 2가지가 있다. 하나는 Commit 이고 하나는 Rollback 이다. 말그대로 Commit은 트랜잭션(작업)이 성공했을 때이고, Rollback은 실패했을 때이다. Commit은 모든 작업이 정상적으로 처리되어서 DB에 반영(저장)되는 것이다. 반면에 Rollback은 작업 중 문제가 생겼을 때, 발생한 변경 사항들이 DB에 반영되지 않고 취소되는 것이다. 즉, 작업이 시작되기 이전의 상태로 돌아가는 것이다.

 

사용법

👩‍💻 스프링에서는 비즈니스 로직이 담긴 코드와 트랜잭션 처리 코드를 분리하기 위해서 @Transactional 어노테이션을 제공한다.

 

🔍 스프링의 MVC 구조에서, Dao를 호출하고 핵심적인 비즈니스 로직을 처리하는 부분인 Service에 많이 사용한다. @Transactional 어노테이션은 클래스 단위로도 사용할 수 있고, 메소드 단위로도 사용할 수 있다.

→ 클래스에 @Transactional 선언을 하면, 해당 클래스에 속하는 메소드들에 공통적으로 적용된다.

 

만약, 어떤 클래스 전체에 @Transactional 선언을 한 상황에서 그 클래스 안의 특정 메소드에만 옵션을 설정한 @Transactional 선언을 추가로 하면, 그 메소드는 설정한 옵션이 우선적으로 적용된다.

📌 CRUD 중 R(읽기)에 해당하는 작업에 트랜잭션 선언을 할 때 readOnly=true 옵션을 지정할 수 있다.

 

🚨외부 API를 호출하는 상황에서는 롤백 처리에 주의해야 한다.

 

🔜 트랜잭션의 다양한 속성과 옵션은 공식 문서와 자세한 설명이 담긴 글들을 참고하면 좋을 것 같다.

https://spring.io/guides/gs/managing-transactions/

 

Managing Transactions

this guide is designed to get you productive as quickly as possible and using the latest Spring project releases and techniques as recommended by the Spring team

spring.io