트랜잭션(Transaction)이란 데이터베이스와 같은 시스템에서 처리되고 있는 업무 중 반드시 묶여서 처리되어야 하는 묶음의 최소단위이다. 일상생활에서 많이 사용되고 있는 트랜잭션 중 하나가 바로 송금 서비스이다. 이 과정을 들여다보면 A라는 사람이 B에게 송금을 한다고 가정해 보자.
트랜잭션(Transaction)으로 구성하는 이유
- A의 잔고 : 금액 차감
- B의 잔고 : 금액 증가
이러한 두 과정은 각각의 업무이지만 하나의 트랜잭션(Transaction)으로 구성되어 처리된다.
만약 위의 두 과정을 트랜잭션(Transaction)으로 구성하지 않고 시스템을 운영하면 어떤 일이 벌어질까? 단일 사용자이고, 두 개의 업무가 순서대로 처리된다면 문제가 없을 것이다. 하지만 대부분에 시스템에는 여러 개의 클라이언트가 동시에 접근한다. 이렇게 된다면 업무가 처리되는 사이에 잘못된 데이터가 들어와 데이터의 부정합을 야기한다. 이러한 이유로 저 일련의 과정들을 트랜잭션(Transaction)으로 구성하여 부정합을 방지한다.
DB 트랜잭션(Transaction)
위의 설명한 개념은 데이터베이스에서도 똑같이 적용된다. 데이터베이스는 DML(SELECT, INSERT, DELETE, UPDATE)를 사용하여 데이터베이스의 상태를 변형시킬 수 있다. 즉 한 번에 변형이 한 번의 업무와 같은 셈이다. 위의 예시를 데이터베이스에서 어떻게 수행되는지 확인하겠습니다.
- A의 잔고 : 금액 차감 - 출금 - UPDATE
- B의 잔고 : 금액 증가 - 입금 - UPDATE
두 개의 업무를 하나의 트랜잭션(Transaction)으로 구성하였다.
트랜잭션(Transaction) 특징
- 원자성 : 트랜잭션 결과는 항상 commit 또는 rollback이어야 한다.
- 일관성 : 트랜잭션은 일관성 있는 상태를 유지해야 한다
- 지속성 : 성공한 트랜잭션은 영원히 기록된다.
- 독립성 : 각각의 트랜잭션은 독립적으로 수행되어야 한다.
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]동시성 문제를 해결할 FOR UPDATE 알아보기 (1) | 2023.07.09 |
---|---|
[MySQL]WITH ROLLUP(그룹 소계 함수)와 GROUP BY와 비교하기 (4) | 2023.07.04 |
[MySQL]문자열의 대소문자를 변경하는 방법(UPPER, LOWER함수) (4) | 2023.06.25 |
[MySQL]WITH문을 사용하여 가상의 테이블을 만들어 사용하기 (3) | 2023.06.25 |
[MySQL]소수점 다루기 - 반올림(ROUND)과 버림(TRUNCATE) (2) | 2023.06.18 |