개요
- 트랜잭션의 ACID에 대해 이해하고 파악할 수 있습니다
트랜잭션 이란?
- 여러개의 작업을 하나로 묶은 실행 유닛을 말한다
- 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다
- ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질이다
- 각 트랜잭션은 하나의 특정 작업으로 시작을 해서 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료된다
- 만약 하나의 트랜잭션에 속해있는 여러 작업중에서 하나라도 실패하면 롤백하고, 전부 성공해야 커밋된다
ACID
- ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질 이다
- 주식거래,금융엽에서는 RDB를 사용한다
- RDB의 경우 데이터베이스와 상호작용하는 방식을 정확하게 규정할 수 있기떄문에, 예외적인 상황이나 데이터의 무결성을 보장 할 수 있다
A (Atomicity - 원자성)
- 트랜잭션이 안전성 보장을 위해 가져야 할 성질 중의 하나이다
- 한 트랜잭션의 연산들이 모두 성공,실패하는 성질을 말한다
- 작업이 모두 반영되거나,반영되지 않음으로서 결과를 예측 할 수 있어야 한다
- 하나의 단위로 묶여있는 여러 작업이 부분적으로 실행된다면, 데이터의 오염 가능성을 야기한다
- 예시를 하나 들어보자
- A계좌에서 출금한다
- B계좌에서 입금한다
- A계좌에서 출금이 성공적으로 이루어졌다
- B계좌에서 입금이 실패하였다
- 이 상황에서 만약 원자성이 지켜지지않았다면 데이터의 오염을 볼 수 있는것이다
C (Consistency - 일관성)
- 데이터베이스의 상태가 일관되어야 한다는 성질이다
- 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다
- 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다는 뜻이다
- 모든 고객은 이름을 가지고 있어야 한다, 라는 제약이 존재할때
- 이름 없는 고객을 추가하는 쿼리
- 기존 고객의 이름을 삭제하는 쿼리
- 등은 제약을 위반하는 사례가 된다
I (Isolation - 격리성,고립성)
- 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다는 뜻이다
- 실제로 동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜잭션은 고립되어 있어 연속으로 실행한것과 동일한 결과를 나타낸다
- 계좌에 만원이 있다고 가정해보자
- B계좌로 6000원을 보내는 트랜잭션 C계좌로 6000원을 보내는 트랜잭션이 존재할때, 계좌 B에 먼저 송금한 뒤 계좌 C에 보내는 결과와 동일해야 한다
- 동시에 트랜잭션이 시작된다고해서, 마이너스 통장이 되는것이 아니다
- 각각의 송금 작업을 연속으로 실행하는 것과 동일한 결과가 나타나야 한다
- 만일 고립성이 없었다면, B,C계좌에서 출금되는 트랜잭션이 계좌 만원일때를 보고 동시에 빼버리면서 -2000원이 되버리지만, 그러한 불상사를 막아주는것이다
- 고립성이 존재하는한 한 트랜잭션이 종료되고 커밋되야 접근가능하고 데이터를 읽을 수 있기 떄문이다 (격리수준이 READ COMMITTED 인 경우)
D (Durability - 지속성)
- 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 하는 성질을 말한다
- 런타임오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적 이어야 한다는 뜻이다
- 예를 들어 은행에서 게좌이체를 성공적으로 실행한 뒤에, 해당 은행 데이터베이스에 오류가 발생해 종료되더라도 계좌이체 내역은 기록으로 남아야 한다.
나는 오늘 무엇을 알았는가?
- A:
- 트랜잭션 내의 작업은 하나의 단위로 처리됨으로써, 원자성을 띄고있습니다
- C:
- 데이터베이스의 데이터는 하나의 일관된 상태를 유지해야한다
- I:
- 각각의 트랜잭션은 고립성을 띄고있어, 안전하게 동시성을 제어하고 데이터의 무결성을 띄고있다
- 동일한 데이터에 대해 A트랜잭션에서의 작업이 종료되고 커밋되는 순간 (READ_COMMIT 기준) B트랜잭션에서 데이터를 읽어오기 때문에 데이터의 정합성 문제가 생기지 않는다
- D:
- 하나의 트랜잭션이 성공적으로 수행되었다면, 그 결과는 영구적으로 데이터베이스에 반영되야 함
참조 블로그
https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/