TIL 37. What is transaction?

Drageon Lee·2022년 1월 25일
0

SQL

목록 보기
1/1

Today's topic

Transaction은 상호작용이다. DB에서도 transaction은 상호작용으로 쓰이는데, 이번 posting에서는 DB와 관련된 내용인 transaction에 대해 자세히 다뤄보고자 한다.

👉 What is "Transaction"?

데이터베이스 관리 시스템(DBMS) 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 transaction이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.

이론적으로 데이터베이스 시스템(DBMS)은 각각의 transaction에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장하며 이 성질을 첫글자를 따 ACID라 부른다. 그러나, 실제로는 성능향상을 위해 이런 특성들이 종종 완화되곤 한다.

그럼 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)가 뭔지에 대해서 알아보도록 하자!

👉 What is "ACID"?

ACID에 대한 설명을 계좌이체를 예로들어 설명하겠다.

  • Atomicity(원자성)
    - Transaction과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다.
    예를 들어, 계좌이체 과정에서는 송신과 수신이 한번에 이루어져야 한다. 한 쪽에서만 성공하고 한 쪽에서는 실패하는 일이 없어야 하기에, 둘다 성공하거나 둘 다 실패하도록 한다. 즉, 중간단꼐까지만 진행되지 않도록 해준다.
  • Consistency(일관성)
    - Transaction이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다.
    예를 들어, 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반,하는 트랜잭션은 중단된다.
  • Isolation(독립성)
    - Transaction을 수행 시 다른 transaction의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다.
    이것은 transaction 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다.
    예를 들어, 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 독립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다.
    하지만, 독립성은 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다.
  • Durability(지속성)
    - 성공적으로 수행된 transaction은 영원히 반영되어야 함을 의미한다.
    즉, 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 한다. 전형적으로 모든 transaction은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. Transaction은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.

👉 What is purpose of transaction?

Transaction의 기능은 사용자가 데이터베이스 완전성(integrity) 유지를 확신하게 한다.
단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다. 이때, 중요한 것은 데이터베이스가 수행된 일부 쿼리만 남지 않는 것이다. 위에서 설명한 바와 같이, 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요하다. 또한, 트랜잭션은 서로 간섭하지 않아야 한다.

Transaction은 아래의 양식의 SQL문으로 데이터베이스 내에서 실행된다.

  • Begin the transaction : SQL server or PostgreSQL
    Start transaction : in MySQL
    → Transaction 시작 시 사용하는 command
  • Execute several queries
    → DB내 갱신이 아직 적용되지 않는다.
  • Commit the transaction
    → Transaction이 성공적이며, 갱신이 실제 적용된다.

만약 쿼리 하나가 실패하면, 데이터베이스 시스템은 전체 transaction 또는 실패한 쿼리를 rollback한다. 이것은 DBMS가 어떻게 사용되고 셋업 되었느냐에 따라 다르다. Transaction은 커밋전에 언제든지 수동으로 롤백될 수 있다.

❗️ 여기서 잠깐 ❗️
Transaction의 원리는 transaction 내에서 실행된 SQL 명령은 임시데이터 영역에서 수행되다가, commit 명령을 내리면 임시 데이터 영역에서 정식 데이터 영역으로 변경이 적용된다.
Rollback 명령을 내리면 임시 데이터 영역에서의 처리는 버려진다.

📖 출처 :

My opinion

이번 포스팅을 통해 DB 내에서 일어나는 transaction에 대해 좀 더 자세히 알아보았다. Transaction 기능이라는게 중요한 기능인 것을 다시 한 번 느꼈다.

profile
운동하는 개발자

0개의 댓글