[DB] 트랜잭션은 어떤 것일까?

khyojun·2023년 1월 29일
0

DB

목록 보기
2/2

트랜잭션이란 데이터베이스의 상태를 변경시키기 위해 수행되는 작업 단위이다.

여기서 상태를 변경시키기 위해 수행되는 작업은 SELECT, UPDATE, INSERT, DELETE같은 작업이다.

트랜잭션은 그런데 하나만 존재하는 것이 아니라 여러개가 존재할 수 있다. 이것은 다음과 같은 예시를 보는 것이 더 좋을 거 같다.

대표적인 예시인 송금시의 예제를 보도록 하자.

A에서 B로 5달러를 보낸다고 하자.

  • A에서 B로 5달러를 보낸다고 기록을 한다.
  • A의 계좌에 현재 있는 잔액을 확인한다.
  • 계좌 A에서 이제 5달러를 뺀다.
  • B에 있는 잔액을 읽는다.
  • 계정 B에 5달러를 추가한다.

이렇게만 잘 되면 너무 좋은데 만약 트랜잭션을 실행을 하다가 중간에 취소되거나 하는 경우가 생기면 Rollback(취소),Commit(저장)을 통해 데이터베이스를 원래 상태로 되돌릴 수 있다.

  • Rollback: 트랜잭션에 의해 변경된 사항을 취소하는 프로세스
  • Commit: 트랜잭션에 의해 영구적으로 변경된 사항을 나타내는데 사용

트랜잭션의 상태

트랜잭션은 각 상황마다 어떠한 상태를 가지고 있는데 그 상태는 다음과 같다.

사진출처 : https://fauna.com/blog/database-transaction

  1. Active: 트랜잭션 실행 중 첫 번째 상태인데 트랜잭션은 명령(읽기/쓰기 작업)이 수행되는 동안 활성화 된다.
  2. Partially Committed: 변경이 실행되었지만 DB가 아직 디스크에서 변경 사항을 커밋하지 않은 상태, 데이터가 메모리 버퍼에 저장되지만 아직 디스크에는 기록이 되지 않은 상태
  3. Committed : 모든 트랜잭션이 업데이트가 데이터베이스에 영구적으로 저장된다. 이 시점 이후에는 트랜잭션을 롤백할 수 없다.
  4. Failed : 트랜잭션이 실패하거나 Active, Partially Commited에서 중단이 되면 Failed가 된다.
  5. Terminated state: Commited, Failed 이후의 마지막 트랜잭션 상태이다. 데이터베이스 트랜잭션 수명 주기의 끝을 표시한다.

트랜잭션이 필요한 이유가 무엇일까?

  1. 트랜잭션은 데이터베이스의 일관성과 정합성을 보장한다.
  2. 동시 접근 또는 오류에 대응할 수 있도록 해준다.

그런데 사실 위에 있는 것처럼 트랜잭션의 특성에서도 필요한 이유가 나오게 되는데 ACID라고 주로 불려진다.

ACID

  • Atomicity(원자성) : 트랜잭션은 데이터베이스에 모두 반영되거나, 아니면 전혀 반영되지 않아야 한다.
  • Consistency(일관성) : 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다.
  • Isolation(독립성) : 둘 이상의 트랜잭션이 동시에 실행된다면 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다.
  • Durability(지속성) : 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되야 한다.

데이터 정합성 : 데이터가 서로 모순 없이 일관되게 일치해야 함을 의미한다

profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글