본문 바로가기
Computer Science/DataBase

트랜잭션이 왜 필요할까?

by Ray 2021. 5. 17.

1. 트랜잭션이 무엇인가요?

트랜잭션이란 DB의 상태를 변화시키는 하나의 논리적인 작업에 포함된 연산들의 집합입니다.
DB의 상태를 변화시키는 작업은 일반적으로 하나의 작업으로 이루어지지 않습니다.
예를 들어, 은행계좌에서 금액을 이체하려 한다면, 
    1)A계좌의 잔액을 조회
    2)A계좌의 잔액에서 이체할 금액을 빼고 저장
    3)B계좌의 잔액을 조회
    4)B계좌에 이제금액을 더한 뒤 저장
까지 몇가지의 과정들이 필요하고 이를 모두 합쳐 계좌 이체라는 하나의 작업단위를 구성합니다.

이렇듯 DB 상태 변화를 위한 작업에 포함된 과정(연산)의 집합을 트랜잭션이라고 합니다.
그리고 트랜잭션의 모든 과정의 수행 여부에 따라 Commit되거나 Rollback 됩니다.

2. 트랜잭션의 성질에 대해 말해주세요.

트랜잭션의 성질은 ACID로 말할 수 있습니다.
A는 원자성(Atomicity)로 트랜잭션의 연산은 모두 수행되거나 하나도 수행되지 않은 상태를 보장해야 합니다.
C는 일관성(Consistency)로 트랜잭션의 완료된 이후에도 DB가 일관된 상태를 유지해야 합니다.
I는 독립성(Isolation)로 한 트랜잭션이 수행되는 도중 변경한 데이터는 완료될 때까지 다른 트랜잭션이 접근하지 못하도록 해야합니다.
D는 지속성(Durability)로 성공적으로 수행된 트랜잭션은 영원히 반영되어야 합니다.

이렇게 4가지가 트랜잭션의 성질입니다.
  • DBMS와 트랜잭션
    • DBMS는 원자성을 유지하기 위해 회복관리자 프로그램을 작동
    • DBMS는 일관성을 유지하기 위해 동시성 제어 알고리즘과 무결성 제약조건을 활용
    • DBMS는 독립성을 유지하기 위해 동시성 제어 알고리즘을 작동
    • DBMS는 지속성을 유지하기 위해 회복관리자 프로그램을 이용

3. 트랜잭션이 왜 필요할까요?

트랜잭션은 연산과정의 집합입니다.
즉, DB의 상태를 변화시키기 위한 작업에 포함된 모든 연산이 모두 성공적으로 수행될 수도 있지만 그렇지 않을 수도 있습니다.
이러한 경우를 위해 연산의 집합인 트랜잭션으로 관리르 하는 것입니다.
예를 들어, A계좌에서 B계좌로 금액을 이체하는 작업을 진행중에 A계좌에서 이체할 금액을 빼고 저장했습니다.
그러나 그 다음에 예기치 못한상황으로 중단되어 B계좌에 금액을 추가 저장하지 못했습니다.
이러한 상황을 트랜잭션으로 통합관리하지 않은다면, A계좌에서 빠진 금액이 증발해버리고 맙니다.
따라서 이러한 상황을 방지하기 위해 ACID 성질을 갖는 트랜잭션을 사용하는 것입니다. 

4. 트랜잭션의 상태에 대해서 말해주세요.

트랜잭션의 상태는 크게 5개로 구분할 수 있습니다.

Active : 트랜잭션이 동작중인 상태
Failed : 트랜잭션이 더이상 정상적으로 진행할 수 없는 상태
Partially Committed : 트랜잭션의 Commit명령이 도착한 상태 (commit이전의 SQL문은 모두 수행된 상태)
Committed : 트랜잭션이 정상적으로 완료된 상태
Aborted : 트랜잭션이 취소되고 실행 이전으로 돌아간 상태

+ Commit명령이 들어오면 Partially Committed 상태가 되고, 문제없이 Commit을 수행할 수 있으면 Committed상태로 전이된다. 그렇지 않으면 Failed 상태로 전이된다. 

'Computer Science > DataBase' 카테고리의 다른 글

Clustered Index와 Non-Clustered Index??  (0) 2021.05.17
DB를 왜 사용할까?  (0) 2021.05.17
SQL Injection이란??  (0) 2021.04.27