트랜잭션이란 단어를 많이 들어봤을 것이다.
그러나 정확한 뜻은 잘 모르고 있었고, 자주 눈에 띄었던 거 같다..
정확히 알고 넘어가야 직성이 풀리니까
정리하면서 공부해보자!!
우선 단어 뜻으로 파악해보자
Transaction은 네이버 영어사전에서 찾아본 결과 처리(과정)이라는 뜻이 있다.
무엇을 처리하는 과정을 나타내는 용어일까?
컴퓨터 용어에서 트랜잭션은 데이터베이스 용어이다.
데이터 처리에 관련된 용어라 추측할 수 있다.
트랜잭션이란?
데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위로서, 데이터베이스 시스템에서 복구 및 병행 시행 시 처리되는 작업의 논리적 단위이다.
다시 말해서
데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
데이터베이스의 상태를 변화시킨다는 것은 무얼 의미하는 것일까?
간단하게 말해서 아래의 질의어(SQL)를 이용하여 데이터베이스를 접근하는 것을 의미한다.
- SELECT
- INSERT
- DELETE
- UPDATE
예를 들어보자!
A 계좌에서 B계좌로 일정 금액을 이체한다고 가정해보자.ㅇ
이를 위해서는 그림과 같이 A 계좌의 잔액을 확인하고
현재 금액에서 인출할 금액을 뺀 나머지 금액을 다시 저장한다.
다음 B계좌의 잔액을 읽어 들인 후 이체된 금액을 더하고
그 합을 다시 저장하면 계좌이체가 완료됩니다.
이러한 과정들이 모두 합쳐져 계좌이체라는 하나의 작업 단위를 구성합니다.
데이터베이스에서는 이와 같은 하나의 논리적인 작업 단위를 구성하는 연산들의 집합을 트랜잭션이라 합니다.
이러한 관점에서 데이터베이스 응용 프로그램은 트랜잭션들의 집합으로 정의할 수 있습니다.
트랜잭션의 특징[4가지]
- 원자성(Atomicity)
트랜잭션 실행 도중에 문제가 발생했을 경우, 중단된 상태가 아닌 모두 실패하거나, 모두 완성 둘 중 하나의 상태가 되어야 한다.
즉 100개 명령어로 구성된 트랜잭션 중 99개 완료 / 1개 실패 가 된다면,
이는 무조건 실패로 간주하여 트랜잭션 시작 전 상태로 돌려야 합니다.
또한, 100개 모두가 성공했을 시 트랜잭션은 성공합니다.
따라서 중간 상태란 없습니다.
- 일관성(Consistency)
일관성이란 트랜잭션 완료 후에도 데이터베이스가 일관된 상태로 유지되어야 함을 뜻한다.
예를 들어 계좌이체를 성공적으로 실행했다면,
A 계좌의 잔액과 B계좌의 잔액의 합이 트랜잭션 실행 전의 합과 동일해야 합니다.
- 고립성(Isolation)
고립성이란 하나의 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성이다.
하나의 트랜잭션이 A라는 계좌에서 작업을 하고 있다면,
다른 트랜잭션이 A 계좌에 대해 참조하거나 관여할 수 없고
작업이 끝날 때까지 대기해야합니다.
- 지속성(Durability)
지속성은 트랜잭션이 완료되면, 주기억장치가 아닌 디스크와 같은 보조기억장치에 저장되거나
그렇지 않더라도 시스템 장애가 회복되고 난 후에 어떠한 형태로든지
그 데이터를 복구할 수 있게 해야 함을 뜻합니다.
트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다는 점이다.
트랜잭션의 COMMIIT과 ROLLBACK 연산
Commit이란 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성 있는 상태에 있을 때,
하나의 트랜잭션이 끝났다는 것을 알려주기 위해 사용하는 연산이다.
이 연산을 사용하면 수행했던 트랜잭션이 로그에 저장되며,
후에 Rollback 연산을 수행했었던 트랜잭션 단위로 하는 것을 도와준다.
Rollback이란 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소시킨다.
후에 사용자가 트랜잭션 처리된 단위로 Rollback을 진행할 수도 있다.
트랜잭션(Transaction)을 사용하며 주의해야 할점
언제나 얻는 것이 있으면 잃는 것도 있다.
트랜잭션은 데이터를 완전성을 보장하기 위해 많은 자원들을 사용하게 된다.
자원을 사용하며 Lock을 걸게 되면 다른 사용자들은 Lock이 해제될 때까지 기다려야한다.
기다린다는 것은 성능에 좋지 않다는 의미이다.
따라서 Transaction의 범위를 최소화하여 적용하는 것이 좋다.