Tiny Finger Point Hand With Heart
본문 바로가기
1일1CS

36. Transaction과 ACID

by yoondii 2023. 1. 12.
728x90
반응형

트랜젝션

트랜젝션

여러작업들을 하나로 묶은 단위. 한 덩어리의 작업들은 모두 실행되거나, 실행되지 않는다. (all-or-nothing)

트랜젝션이 왜 필요할까요?

예를 들면, A 은행 → B은행으로 돈을 보내기 위하여 출금하고 송금한다고 가정합니다. A은행에서 돈을 출금하고나서 B은행으로 송금하려고 하는데 갑자기 시스템이 멈추면 어떻게 될까요? 돈은 출금되었지만, 송금되지 않고 증발하게 되는 끔찍한 상황이 발생합니다.

 

트랜젝션은 이런 상황이 일어나지 않도록 보장해줍니다.

 

대부분의 데이터베이스는 송금이 되다가 마는 상황이 발생하지 않도록 여러가지 방법을 제공하지만, 공통적으로 제공하는 가장 기본적인 방법은 Transaction을 통하여 데이터의 유효성을 보장하는 것 입니다.


트랜잭션의 상태

활동 상태

트랜잭션이 수행을 시작하여 현재 수행중인 상태

 

부분 완료 상태

마지막 연산이 실행된 직후의 상태

연산은 모두 처리한 상태이지만, 수행한 최종 결과를 데이터베이스에 반영하지 않은 상태

 

완료 상태

트랜잭션이 성공적으로 완료되어 commit 연산을 완료한 상태

 

실패 상태

장애가 발생하여 수행이 중단된 상태

 

철회 상태

수행이 실패하여 rollback 연산을 실행한 상태

 


ACID란

ACID는 데이터의 유효성을 보장하기 위한, 트랜젝션의 특징들의 앞글자를 딴 단어이다.

 

>Atomicity(원자성)

모든 작업이 반영되거나 모두 롤백되는 특성이다.

전부반영되거나 전부 반영되지 않거나.

일반적으로 원자적 이라 하면, 더 쪼갤 수 없는 뭔가를 의미하며, 대표적으로 Multi Thread 가 원자적인 연산을 실행할 때 다른 thread 에서 절반만 완료된 연산을 관찰할 수 없는, 그래서 실행 의 상태만 존재하는 경우를 의미한다.
하지만, Transaction 에서 원자성은 이와 연관이 없다(오히려 Isolation 에 가깝다)
ACID 에서 원자성이라 하면, client 가 쓰기 몇 개의 작업을 수행하고자 할 때, 그중 일부만 처리된 후 결함이 발생하여(예를 들어 process 가 죽거나, network 연결이 끊어지거나, 디스크에 문제가 발생하거나, 정합성 조건을 위반하거나 등등) commit 해서 안되는 상황이면 abort (DB는 지금까지 쓴 작업을 무시하거나 취소해야 한다) 하는 작업을 Atomicity 라 한다.
 

>Consistency(일관성)

데이터는 미리 정의된 규칙에서만 수정이 가능한 특성을 의미합니다.

숫자컬럼에 문자열값을 저장이 안되도록 보장해준다.

트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.

 

>Isolation(고립성)

A와 B 두개의 트랜젝션이 실행되고 있을 때, A의 작업들이 B에게 보여지는 정도.

트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 

 

>Durability(영구성)

성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.

시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다.

전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다.

트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.


 

 

 

출처-

https://chrisjune-13837.medium.com/

https://jangjang13.tistory.com/

위키백과

728x90
반응형

'1일1CS' 카테고리의 다른 글

38. 인터페이스와 추상클래스의 차이  (0) 2023.01.16
37. 깃과 깃허브의 차이점  (0) 2023.01.13
35. UDP/TCP 특징 및 차이점  (0) 2023.01.11
34. TCP 프로토콜 연결 / 종료 과정  (0) 2023.01.10
34. SOLID 란?  (2) 2023.01.10

댓글