트랜잭션(Transaction)과 ACID

해연·2023년 6월 14일
0

데이터베이스

목록 보기
9/14

데이터베이스의 상태를 변화시키는 더 이상 나눌 수 없는 하나의 논리적 기능을 수행하기 위한 작업의 단위

  • 작업 단위 : 많은 질의어(SELECT, INSERT, DELETE, UPDATE) 명령문들을 사람이 정하는 기준에 따라 정함
  • 하나의 트랜잭션 설계를 잘 만드는 것이 데이터 다룰 때 많은 이점을 가져다준다.

은행에서 돈을 인출하는 것을 예로 들면
1. A은행에서 B은행으로 돈을 계좌이체한다.
2. 송금 중 알 수 없는 오류로 A은행에서 돈은 빠져 나갔지만 B은행 계좌에는 입금이 되지 않았다.
=> 거래가 모두 끝나야 완전한 거래로 승인(commit)
=> 오류 발생 시 거래를 시작 전으로 되돌림(rollback)
이 과정은 하나의 트랜잭션이다.

왜 트랜잭션을 사용하는가?

  • DB 서버에 여러 개의 클라이언트가 동시에 액세스하거나 응용 프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우등 데이터 부정합을 방지하기 위해 사용된다.
  • 부정합을 방지하려면 프로세스를 병렬로 처리하지 않고 한 번에 하나씩 프로세스를 진행해야 하는데 효율성이 떨어진다
    => 병렬로 처리할 수밖에 없는 상황에서 부정합을 방지하기 위해 트랜잭션을 사용한다.

트랜잭션의 성질(ACID)

원자성(Atomicity)

  • DBMS는 완료되지 않은 트랜잭션의 중간 상태를 DB에 반영해서는 안된다.
  • 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장해야 한다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽하게 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
  • 원자성을 갖게 된 이유 : 중간에 끊기게 되면 이후 해당 트랜잭션의 어디서부터 이어서 수행되어야 하는지 모르기 때문이다.

일관성(Consistency)

  • 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미
  • 트랜잭션 작업 처리 결과가 항상 일관성이 있어야 한다.
  • 성공적으로 수행된 트랜잭션은 정당한 데이터만을 DB에 반영한다.

독립성(Isolation)

  • 둘 이상의 트랜잭션이 동시에 실행될 때 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  • 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
  • 독립성의 성질이 보장되지 않는다면, 트랜잭션이 원래 상태로 돌아갈 수 없기 때문에 순차적으로 실행되어야 한다.

지속성(Durability)

  • 트랜잭션이 성공적으로 완료된다면 결과는 영구적으로 반영된다.

출처
https://d2.naver.com/helloworld/407507
https://ko.wikipedia.org/wiki/ACID
https://victorydntmd.tistory.com/129
https://fauna.com/blog/database-transaction

profile
물음표를 느낌표로 바꾸며 성장하는 예비 백엔드 개발자입니다.

0개의 댓글