Transaction( 트랜잭션 )이란?
사전적인 의미로는 Logical Unit of Process in a DBMS 로서 DBMS Process의 논리적 단위를 뜻한다.
( SELECT, INSERT, UPDATE, DELETE )
이게 무슨말인가 하면...
ㆍ A가 B에게 10만원을 송금하는 예시를 들어보자.
1) A는 10만원을 송금할 B의 은행과 계좌번호를 입력 후 '송금'버튼을 클릭한다.
2) A의 계좌에서는 10만원의 현금이 UPDATE SQL이 동작함에 따라 차감될 것이다.
3) B의 계좌에서는 A가 보낸 10만원의 현금이 UPDATE SQL이 동작함에 따라 추가 될 것이다.
4) A는 송금이 정상적으로 완료됨을 확인하고 메인페이지로 이동하게 되며 SELECT SQL이 동작함에 따라 10만원이 차감된 잔액이 조회된다.( 이건 은행 어플에 따라 다르겠지만... )
위와 같이 하나의 동작을 통해 여러 SQL이 연쇄적으로 동작하는 것을 하나의 Transaction이라고 한다.
그렇다면 ACID표준은 무엇인가?
ACID표준은 Transaction이 동작함에 따라 반드시 보장되어야 하는 표준이다.
ㆍ Automically( 원자성 )
Client가 몇개의 여러 작업을 수행하고자 할 때 일부 작업에 결함이 발생(process, network, disk오류 등)하여 COMMIT을 하면 안되는 상황일 때 DB는 지금까지 한 작업을 무시/취소(abort) 해야한다. 위 작업을 Automically라고 한다.
!! 작업 내용이 전부 반영되거나 아무것도 반영되지 않아야 한다. !!
ㆍ Consistency( 일관성 )
INTEGER COLUMN에 문자열이 저장되지 않도록 보장하는 등 정해진 규칙 내에서만 수정이 가능한 특성을 의미한다.
하지만 DB에 유입되는 데이터에 대한 유효성 검사에 대하 DB 단독적으로는 일관성이 달성되긴 어렵고 사실상 Application이 해야할 일에 가깝다.( DB는 주는 데이터를 저장할뿐... )
(* Joe Hellerstein이라는 컴퓨터공학 교수의 말에 따르면 C는 약어를 만들어내기 위해 끼워넣었다 봐도 무방하다고 한다...)
ㆍ Isolation( 고립성 )
여러개의 Transaction이 실행될 때 각자의 Transaction은 독립/격리된 상태로 실행되어야 함을 의미한다.
예를 들어 DML에 의해 변형이 된 데이터가 COMMIT이 되지 않은 상태에서 다른 Client가 DB에 DML을 시도할 시에 서로간의 데이터가 일치하지 않거나 작업을 진행할 수 없는 경우가 발생한다.
ㆍ Durability( 영구성, 지속성 )
반영된(COMMIT) Transaction의 내용은 H/W의 결함이나 DB가 죽더라도 보존되어야 하며, 비휘발성 저장소(SSD와 같은)에 저장되어 영구/지속성이 보존되어야 한다.
'DB & SQL' 카테고리의 다른 글
Oracle XML (0) | 2024.06.26 |
---|---|
Oracle JSON (0) | 2024.06.26 |
DBMS System Language( DDL, DML, DCL, TCL ) (0) | 2023.01.31 |
MySQL Comments(주석) (0) | 2023.01.17 |
MySQL IFNULL() / COALESCE() (0) | 2023.01.17 |