여니의 프로그래밍 study/Spring & Spring Boot

[스프링부트] 트랜잭션의 의미와 사용 이유

여니's 2022. 3. 22. 00:10

 

트랜잭션이란?

> 데이터베이스의 상태를 변경시키기 위해 

수행하는 작업의 단위를 의미합니다.

 

데이터베이스의 상태를 변경시킨다는 의미는

select, update, delete, insert와 같은 행동을 의미합니다.

 

이러한 트랜잭션은 상황에 따라 여러개가 만들어질 수 있습니다.

그 하나의 트랜잭션은 commit(저장)되거나

rollback(철회) 될 수 있습니다.

 

 

A가 B에게 만원을 송금한다고 가정하면,

A는 먼저 통장에서 만원을 인출하고,

B의 통장에 만원을 입금해야합니다.

이때 인출과 입금의 두 가지 작업이 합쳐져서

'송금'이라는 하나의 논리적인 기능을 이루게 됩니다. 

 

A의 통장에서 만원이 인출이 되었는데,

B의 통장으로 입금하는 과정이 실패하면?

다시 송금 기능을 수행해야 합니다. 

잘못된 처리니까요

 

그래서 다시 인출부터 시작을 하게되면

A의 통장에서는 만원이 아닌 2만원이 인출되게 됩니다.

 

이런 문제점을 위해 트랜잭션은

commit과 rollback을 이용합니다. 

 

 

개념만 봤을 땐,

이게 무슨 말인지 이해가 되지 않았습니다. 

 

그러나 위 예시를 보니 

어떤 의미인지 감이 오기 시작했습니다.

 


트랜잭션 기본 방식

: 트랜잭션은 2개 이상의 쿼리(예를 들면 인출, 입금)를 

하나의 커넥션으로 묶어 db에 전송하고,

이 과정에서 에러가 발생할 경우

자동으로 모든 과정을 원래대로 되돌려놓습니다.

 

 


트랜잭션의 특징 (ACID)

트랜잭션의 성질(특징)에 대해 알아보겠습니다.

 

1. 원자성 (Atomicity)

: 트랜잭션이 DB에 모두 반영되거나,

전혀 반영되지 않거나를 의미합니다.

All or Nothing!

 

 

2. 일관성 (Consistency)

: 트랜잭션 작업 처리 결과가 항상 일관되어야 합니다.

데이터의 타입이 반환 전과 후가 항상 동일해야 합니다.

즉, 트랜잭션이 성공적으로 완료되면

일관적인 데이터를 유지합니다.

 

 

3. 독립성 (Isolation)

: 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고,

마찬가지로 독립적임을 의미합니다.

따라서 각각의 트랜잭션은 

독립적이라 서로 간섭이 불가능합니다.

 

 

4. 영구성 (Durability)

: 트랜잭션이 성공적으로 완료되면

영구적으로 결과에 반영되어야 합니다. 

 

 

 

 


트랜잭션 연산

트랜잭션 연산인 commit과 rollback에 대해 알아보겠습니다.

1. 롤백 (rollback)

- 트랜잭션 작업 중 오류가 발생하면,

트랜잭션 처리를 시작하기 이전의 상태로 되돌립니다.

 

 

 

2. 커밋 (commit)

- 트랜잭션 작업을 성공적으로 마치고

데이터베이스에 영구적으로 반영합니다. 

 

 

 


 

참고 출처

https://sunnyk.tistory.com/15

 

[Java] 트랜잭션 처리하기

트랜잭션이란? 트랜잭션(Transaction)이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. A가 B에게 만원을 송금한다고 가정한다. 먼저 A의 통장에

sunnyk.tistory.com

https://sunnyk.tistory.com/15

 

[Java] 트랜잭션 처리하기

트랜잭션이란? 트랜잭션(Transaction)이란 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. A가 B에게 만원을 송금한다고 가정한다. 먼저 A의 통장에

sunnyk.tistory.com