은행에서 사용자들이 동시에 접속해서 다양한 업무를 수행한다고 가정해 봅시다.
C_account = 100
C_account_by_A_process = 100
C_account_by_B_process = 100
C_account_by_A_process = C_account_by_A_process + 50
C_account_by_B_process = C_account_by_B_process + 30
C_account = C_account_by_A_process
C_account = C_account_by_B_process
print(C_account)
출력값
130
지금까지 잘 사용해 온 Pandas 기반 프로그램은 C 고객의 잔고를 130이라고 있을 가능성이 높습니다. 이건 파일시스템으로만 데이터의 영속성이 잘 관리되기 어렵기 때문입니다. 위 가정의 가장 큰 문제점은 트랜잭선(Transaction)의 개념이 없다는 것입니다. 동일한 데이터를 여러 프로세스가 동시에 접근해서 변경하려고 들 때, 한 프로세스의 변경이 다른 프로세스의 변경을 무효화해서는 안 됩니다.
자료 출처: 트랜잭션
트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
롤백 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산이다.
롤백 시에는 해당 트랜잭션을 재시작하거나 폐기한다.
활동(Active) : 트랜잭션이 실행중인 상태
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태