전공공부/데이터베이스 (Database)

[데이터베이스] 트랜잭션 (Transaction)

jooona 2022. 4. 24. 00:10
반응형

트랜잭션이란?

 

트랜잭션이란 데이터베이스의 상태를 변환시키기 위해 수행하는 작업의 논리적 단위를 뜻합니다. 다시 말해 데이터베이스에서 어떤 목적을 수행하기 위한 하나의 작업 단위라고 할 수 있습니다.

 

은행 업무 중 A가 B에게 돈을 보내는 상황을 예시로 들어보겠습니다. 그렇다면 크게 다음과 같은 과정들이 차례로 수행되어야 합니다.

 

1. A의 잔고를 확인한다.

2. A의 계좌에서 돈을 뺀다.

3. B의 계좌에 돈을 넣는다.

 

위와 같은 과정 중 한 과정에서라도 오류가 난다면 A가 B에게 돈을 보내는 업무는 실패했다고 할 수 있고, A의 계좌에서 돈이 빠져서도, B의 계좌에 돈이 들어가서도 안됩니다. 

 

이와 같이, 여러 명령들을 묶어 하나의 작업을 만들 수 있는데, 이를 트랜잭션이라고 부르고, 트랜잭션은 모든 명령이 성공적으로 수행되었는지에 따라 성공 또는 실패가 명확히 결정됩니다.

 

Commit과 Rollback

 

위의 예시를 가지고 계속 설명을 이어가 보도록 하겠습니다.

 

A의 계좌에서 돈을 뺀 후, B의 계좌에 돈을 넣는 과정에서 오류가 발생했다고 가정해 보겠습니다. 그렇다면 A의 계좌에서는 이미 돈이 빠져나간 상태이고, B의 계좌에는 돈이 들어가지 않은 상태입니다. 이 상황에서 그대로 작업이 종료되어 버린다면 A의 계좌에서만 돈이 사라진 상태로 끝나 버릴 것입니다. 당연히 A의 계좌에서 돈을 빼기 전으로 되돌려야겠죠?

 

이런 상황을 방지하기 위해 트랜잭션의 어떤 부분에서라도 오류가 발생하게 된다면 트랜잭션이 아예 시작하기 전으로 되돌려야 합니다. 이를 Rollback이라고 합니다. 

 

반면, 모든 명령이 성공적으로 완수되어 트랜잭션이 성공적으로 끝마쳐졌다면? Commit을 하게 됩니다. 즉 트랜잭션이 성공했다는 것을 확정하고 데이터베이스에 반영되었을 때, 이를 관리자에게 알려주는 활동을 말합니다.

 

SavePoint

 

SavePoint는 게임에서 사용하는 Save Point와 정확히 같은 의미를 갖습니다. Rollback을 통해 트랜잭션을 시작하기 전으로 되돌리는 대신 설정해 둔 Save Point로 되돌아가는 것입니다. 이를 통해 굳이 되돌릴 필요가 없는 부분까지 실행 전으로 돌아가는 일을 방지할 수 있겠죠?

 

트랜잭션의 특성 (ACID)

 

트랜잭션은 다음과 같은 4가지 특성을 갖습니다.

 

1. 원자성 Atomicitiy: 트랜잭션은 데이터에 모두 반영되던지, 전혀 반영되지 않아야 한다.

 

더 이상 쪼갤 수 없는 원자처럼 나누어질 수 없는 작업의 단위이기 때문에 성공 또는 실패 여부에 따라 Commit을 통해 데이터베이스에 반영되던지 Rollback을 통해 아예 반영되지 않던지 둘 중에 하나만 수행되어야 합니다.

 

2. 일관성 Consistency: 트랜잭션의 작업 결과는 일관되어야 합니다.

 

트랜잭션이 수행된 뒤, 데이터베이스는 제약 조건, 데이터 타입 등이 트랜잭션을 수행하기 전과 비교하여 변하지 않은 상태로 유지되어야 합니다.

 

3. 격리성 Isolation: 각각의 트랜잭션은 독립적으로 수행되어야 합니다.

 

모든 트랜잭션은 다른 트랜잭션의 간섭을 받지 않고 독립적으로 수행되어야 합니다.

 

4. 영속성 Durability: 트랜잭션이 성공적으로 완수된 뒤에는 영구적으로 반영되어야 합니다.

 

추후에 시스템에 문제가 발생하더라도 완수된 트랜잭션의 결과는 보존되어야 합니다.

반응형