데이터베이스

트랜잭션 (Transaction)

린예라 2024. 4. 9. 22:51

트랜잭션 (Transaction) 이란?

영어뜻을 그대로 해석하면 거래라는 뜻 이다.

내가 물건을 고르고, 고른 물건에 대해 대금을 지불하는 이런 행동들들 하나로 묶어서 우리는 '산다'라고 말한다.

그리고 이런 '물건을 산다'와 '물건을 판다'를 하나로 묶어서 '거래' 라고 한다. 이런식으로 DB의 동작을 단위로 묶은것이다.

 

컴퓨터적으로 가져와서 다시 해석하면 DB에서 일어나는 일련의 작업의 단위이다.

위에서 거래에서 일어나는 행동이 하나가 아니듯이, DB에서의 트랜잭션도 SQL문 하나만을 뜻하지는 않는다.

 

여러가지 작업들을 하나의 의미있는(논리적인) 단위로 묶은 느낌이다.

 

트랜잭션의 4가지 특징 ACID에 대해 알아보자!

원자성, 일관성, 독립성(격리성), 지속성

 

1.원자성 (Atomicity)

트랜잭션 내에서 실행한 작업들 혹은 SQL문들은 모두 성공하거나, 모두 실패해야한다.

즉 더이상 쪼갤 수 없는 물질의 최소단위인 원자처럼,  트랜젝션에 속한 모든 동작들도 하나의 원자처럼 동작해야한다.

 

예를 들어, 송금한다라는 트랜잭션이 있다고 해보자.

A -> B 이렇게 송금한다고 하면,

1.A의 통장의 잔고를 조회

2.A의 통장의 잔고에서 송금금액을 차감

3.B의 통장에 A의 통장 잔고에서 차감된 금액만큼 더함

 

이런 과정을 거친다. 여기서 원자성에 의해 2번은 실행되고 3번은 실패하고 하는 일은 일어나지 않는 다는 것이다.

성공하면 1,2,3 번 모두 동작이 일어나고, 실패하면 1,2,3번 모두 없던 일이 되버린다(Roll back).

이런 원자성은 회복제어와 큰 연관이 있다.

 

 

2.일관성 (Consistency)

 

DB가 트랜잭션 실행 전과 후에 일관된 상태, 즉 무결성 제약조건이 준수되는 상태를 유지해야한다.

 

무결성 제약조건 준수 : 예를 들어 은행에서 송금하고 나서 잔액이 음수로 나온다던가 하는 일이 일어나면 안된다.

 

트랜잭션사이의 일관성: 여러 트랜잭션이 동시에 실행되도 무결성 제약조건이 준수되어야 한다.

 

트랜잭션이나 데이터 조작 작업을 수행할 때 항상 일관된 상태를 유지하고, 모든 제약조건이 만족되게 한다.

이를 통해 데이터의 무결성과 신뢰성 그리고 동시성제어를 보장할 수 있다.

 

 

3.독립성 (Isolation) 혹은 격리성

 

동시에 여러 트랜잭션이 실행될 때 각 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않고, 독립적으로 실행되는 것을 보장하는 것을 말한다.

 

격리 수준 (Isolation Level) : 트랜잭션 간의 격리 수준을 결정한다.

 

1.Read Uncommitted : 다른 트랜잭션에서 수정 중인 데이터를 읽을 수 있다. 가장 낮은 레벨의 격리이다.

 

2.Read Committed : 다른 트랜잭션에서 수정 중인 데이터는 읽을 수 없고, 커밋되지 않은 변경사항은 볼 수 없다. 가장 일반적으로 많이 사용하는 격리레벨이다.

 

3.Repeatable Read : 동일한 쿼리를 여러 번 실행해도 동일한 결과를 보장한다. 트랜잭션이 시작될 때 읽은 데이터는 다른 트랜잭션이 변경해도 동일한 값을 유지한다.

 

4.Serializable : 가장 높은 격리수준. 모든 트랜잭션을 순차적으로 실행하는 것과 유사한 결과를 제공한다. 이 레벨에서는 여러 트랜잭션이 동시에 실행되는것이 제한적이다.

 

DB의 동시성과 안정성 독립성 레벨에 관여한다.

 

 

4.영속성 (Durability)

 

DB에 저장된 데이터가 영구적으로 보존되고 유지되는 것을 의미한다.

데이터의 안전한 보존을 보장하는데 관련이 있다.

 

1.데이터의보존 : 시스템이 종료되거나 장애가 발생해도 데이터가 보존되어야 함.

2.디스크에저장 : 디스크에 저장함으로 DB프로그램이 종료되어도 데이터가 보존됨.

3.트랜잭션로깅 : DB에 발생한 모든 변경사항을 기록하여 복구 가능하게 만들어준다.

 

 

'데이터베이스' 카테고리의 다른 글

SQL문 간단 정리  (1) 2024.11.14
동시성 제어  (0) 2024.04.12
스키마 (Schema)  (0) 2024.04.08
관계형 데이터베이스 관계  (1) 2024.04.07
기본키 (Primary Key), 외래키 (Foreign Key)  (1) 2023.09.04