Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

IT 개발일지

[Database] 1. ACID - Transaction 본문

카테고리 없음

[Database] 1. ACID - Transaction

맛난밤송이 2024. 4. 3. 00:23

Transaction

- Database에서 Transaction이란 정보의 교환이나 데이터베이스 갱신 등과 연관되는 작업에 대한 일련의 연산

- 쪼갤 수 없는 업무 처리의 최소 단위

- 하나의 쿼리가 아닌 쿼리들의 모음(Collection of Queries) 또한 Transaction이 될 수 있다.

   => 하나의 쿼리에서는 모든 로직의 달성이 어렵기 때문이다.

 

예를 들면, 계좌 송금을 하는 Transaction이 있다. 해당 Transaction은
  1. 송신인의 계좌에 돈이 얼마나 있는지 조회(SELECT)
  2. 송신인의 계좌에서 돈 차감(UPDATE)
  3. 수신인의 계좌에서 돈 추가(UPDATE)
이렇게 3개의 쿼리가 하나의 송금 Transaction이 될 수 있다.

 


Transaction의 Lifespan

1. Transaction BEGIN

- DB에 Transaction이 시작하였다는 것을 명시

- Oracle, DB2에는 Transaction을 시작하는 명령어 따로 없음

-- SQL Server, PostgresSQL
BEGIN TRANSACTION

-- MySQL
START TRANSACTION

-- SQLite
BEGIN

 

 

2. Transaction COMMIT

https://velog.io/@yu-jin-song/DB-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction

- Tranaction을 진행하기 위한 쿼리들이 수행되었다면, Consistency(지속성)을 위해서 해당 transaction을 commit하여 데이터베이스에 반영한다.

- 처리 과정을 데이터베이스에 영구 저장

- Commit을 하는 기준은 다름

  1. 100개의 Query를 진행할 때 마다 100번 Commit

  2. 100개의 Query 모두 진행한 후에 Commit(일반적으로 너무 Query가 길면 권장하지 않음)

 

3. Transaction ROLLBACK

https://velog.io/@yu-jin-song/DB-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction

  - 모든 변경 사항을 일괄적으로 취소 => 마지막 Commit 완료 시점까지 되돌아 감

  - 만약에 Transaction이 예기치 못하게 종료되면, DB를 다시 시작할 때, 해당 Transaction이전까지 rollback

  - 트랜잭션의 일부가 정상적으로 처리되더라도, 해당 연산 포함 모든 연산을 아예 취소

  - DBMS마다 최적화하는 법 다름(Postgres는 commit이 빠른 것으로 알려져 있음)

 


Transaction의 특성

1. Transaction을 일반적으로 데이터를 변경, 수정할 때 사용함

2. 그러나, Read-Only transaction을 진행할 때에도 진행

  - 예를 들어 보고서를 작성해야 할 때, 특정 tranaction의 시간에 기반한 consistent한 snapshot이 필요할 때가 있다.

  - Isolation 부분 참고

 

 


출처

- Fundamentals of Database Engineering, Udemy

- Transaction

- Transaction BEGIN