Programming-[Backend]/Database

트랜잭션이란 2. 트랜잭션의 성질

컴퓨터 탐험가 찰리 2021. 5. 2. 17:19
728x90
반응형

1. 트랜잭션의 범위는 커넥션을 기준으로 한다.

트랜잭션은 클라이언트(app)과 DB간의 연결을 의미하는 커넥션을 기준으로 정의된다. 만약 아래의 그림과 같이 각 커넥션 1, 2를 따라 트랜잭션이 발생하는 과정을 생각해보자. 트랜잭션1 내부의 method에 의해서 커넥션2, 트랜잭션2가 실행되고 commit된 상황이라면 마지막에 트랜잭션1을 롤백하더라도 트랜잭션2의 commit 사항은 롤백되지 않는다. 이것은 트랜잭션의 범위가 커넥션을 기준으로 하기 때문이다.

 

트랜잭션 전파 : 스프링 자바에서의 Transactional

스프링 자바 코드에서 하나의 메서드 내부에서 다른 메서드를 호출하여 사용한다면, 프레임워크에서 지원하는 @Transactional 어노테이션을 이용하여 트랜잭션을 전파할 수 있다. 즉, 여러 메서드의 호출을 하나의 트랜잭션에 묶이도록 처리할 수 있는 것이다.

(원래는 연결을 의미하는 커넥션 객체를 하나의 메서드가 끝나고, 다음 메서드에 계속해서 전달해주어야 하는데, 프레임워크가 이를 대신해준다.)

1
2
3
4
5
6
@Transactional
public void update() {
  실행 코드...
  
  XxxRepository.create();
}
cs

update 메서드가 실행되고, 다른 곳에 있는 create() 메서드를 호출하는 상황에서 @Transactional 어노테이션을 붙여주게 되면 update와 create는 하나의 트랜잭션으로 묶이게 되어 트랜잭션의 원칙들을 지키면서 DB와 통신할 수 있게 된다.


 

2. 외부 연동 로직이 포함되어 있는 경우

 

트랜잭션이 update, insert, 외부 API 호출로 이루어진 상황에서, 외부 API 호출이 실패하여 롤백을 한다면 내부적인 롤백에는 문제가 없을 것이다.

그러나 만약 외부 API 호출을 완료하고 나서 롤백을 하게 되면, 외부 API로 반영된 내용은 롤백하기가 어렵다는 것을 인식하고 롤백 처리에 주의해야한다. 이런 경우 외부 API가 진행된 사항을 롤백하는 방법에 대해서 사전에 방안을 마련해놓아야 한다.

 


3. 참조


1. Youtube 최범균 - DB 트랜잭션 조금 이해하기 01

www.youtube.com/watch?v=qDzCH_jS0Mg

 

2. 블로그 - 데이터베이스 커넥션과 트랜잭션

o-jing.tistory.com/29

728x90
반응형