보람찬 코기의 개발자 블로그
article thumbnail
반응형

DB Transaction


트랜잭션 특징

  • 데이터베이스의 데이터 무결성이 보장되는 상태에서 DML 작업을 완수하기 위한 기본 작업 단위
  • 트랜잭션을 통해 비정상 종료 및 실패에 대해 데이터 신뢰성일관성 보장

 

이론적 일반 상황에서는 "DML 실행과 실행에 대한 커밋/롤백 단계" 까지를 트랜잭션이라고 한다.

필드에서는 "SELECT 문으로 데이터를 조회하고 DML을 실행하여 종료하는 과정"까지 라고 한다.


ACID 란?

개념 내용
원자성(Atomicity) 트랜잭션의 처리가 완전히 끝나지 않았을 경우에는 전혀 이루어지지 않은 것과 같아야 한다.
일관성(Consistency) 트랜잭션의 실행이 성공적으로 완료되면 DB는 모순 없이 일관성이 보존된 상태여야 한다
고립성(Isolation) 어떤 트랜잭션도 다른 트랜잭션의 부분적 실행 결과를 볼수 없다.
지속성(Durability) 트랜잭션이 성공하면 트랜잭션의 결과를 영구적으로 보장해야한다.

 

간단한 예시

 

  • 원자성 : 이체 금액이 10만원이면 10만원이 완전히 이체되거나 안되거나 라는 뜻이다. 5만원만 되거나 9만원만 되는 것이 아니다. (Rollback 사용)
  • 일관성 : Alice 계좌에서 10만원이 출금되었으면 Bob 계좌에는 10만원이 입금 되어야한다.
  • 고립성 : Alice 계좌에서 이체가 실행되는 것에 대해서 Bob 사용자는 관여할수 없다. Alice의 이체 실행이 완료되지 않으면 Bob은 이체 관련하여 처리할수 없다.(조회는 가능)
  • 보존성 : 이체가 끝나면 저장되고 보존해야한다 / 장애가 발생했을때 복구 하기 위해서이다.

 

트랜잭션 수행 단계

 

상태 설명
활성화 트랜잭션을 실행 상태
부분완료 DML 등 트랜잭션 명령을 실행한 후 의 상태
완료 트랜잭션 성공적으로 완료
실패 더 이상 정상적으로 실행 불가
철회 이전 트랜잭션을 복원하여 트랜잭션 수행 이전 상태로 돌아감

 

Update의 예시를 들어보자

나의 휴대폰 정보를 iphone13 에서 iphone14로 수정하려고한다.

  • Update 명령어를 실행해서 트랜잭션 시작
  • iphone14로 변경은 되었으나 DB에 영구적으로 반영은 안됨 / 다른 사용자가 조회하면 여전히 iphone13으로 표시
  • 정확하게 갱신되었다면 Commit을 하고 정상적으로 DB에 영구적으로 반영
  • 만약 UPDATE 명령이 실행이 실패 된다면 롤백되어 철회된다.

커밋 이전 과 이후  비교

이전 

  • 데이터 변경 이전의 상태로 복구가 가능하다
  • 현재 사용자만 DML 작업의 결과를 확인할 수 있으며 다른 사용자는 확인할 수 없다.
  • 변경 중인 행은 접근 제어되어 다른 사용자가 변경이 불가하다.

이후

  • 데이터베이스에 데이터를 영구적으로 변경, 적용되어 기존 데이터는 상실한다.
  • 모든 사용자가 결과를 확인 할 수 있다.
  • 접근 제어가 해지되어 다른 사용자가 변경 할수 있다.
반응형
profile

보람찬 코기의 개발자 블로그

@BoChan

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!