TIL

[Sesac IOS] 36일차 TIL

36일차 수업 내용을 정리한 글입니다.


Learning

Transaction

1) 개요

  • 논리적인 작업 수행의 단위로서 DBMS에서는 사용자의 요청(쿼리)에 응답하여
    데이터베이스에 접근하고 상태를 변환(CRUD) 시키는 상호작용의 단위를 의미함.
  • 만약 작업이 도중에 중단되었을 경우 처음 상태로 돌아가고(roll back)
    모든 작업을 마칠 경우 commit 된다.
  • DBMS의 성능은 1초당 수행하는 트랜잭션의 수(TPS)로 측정됨.
TPS : Transaction Per Second

2) 필요성

  • 송금 과정에서 내 계좌에서 돈이 출금됐을 때 오류로 인해 작업이 중단되면
    상대의 계좌에는 입금되지 않는 문제가 발생할 수 있음.
  • 위 사례 뿐만 아니라 여러 클라이언트에서 동시에 DB 서버에 쿼리를 요청할 때 등
    문제가 발생할 수 있는 상황에서 데이터의 정합성을 유지하기 위해 트랜잭션을 사용함.

ACID

1) 개요

  • DB의 트랜잭션이 안전하게 수행되기 위한 4가지 조건을 의미함.
  • 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)

2) 원자성 (Atomicity)

  • 트랜잭션은 더 이상 쪼개질 수 없는 가장 작은 작업 단위이기 때문에
    작업이 부분적으로(일부분만) 수행될 수 없음을 의미함.
  • 따라서 트랜잭션은 작업 수행 도중 문제가 발생했을 때 모든 작업을 완료하거나
    모두 수행하지 않은 두 가지 상태 중 하나만 가질 수 있음. (All or Nothing)
  • 100개의 쿼리로 구성된 트랜잭션에서 1개만 실패하더라도 99개의 작업을
    수행하지 않은 초기 상태로 돌아감.
  • 이전까지 작업들이 완료된(commit된) 상태를 임시 영역에 저장해놓고
    현재 트랜잭션에 의해 변경된 사항을 유지하면서 작업을 수행함.
  • 현재 트랜잭션에 문제가 발생하면 변경한 사항을 취소하고 임시 영역에
    저장해놓은 상태로 롤백하여 원자성을 보장함.
롤백 세그먼트(Rollback Segment)
현재 트랜잭션 이전에 commit된 데이터가 저장되는 임시 영역
트랜잭션 도중 오류가 발생할 경우 롤백 세그먼트에 저장된 상태로 롤백함.
세이브 포인트(Save Point)
트랜잭션에 오류가 발생했을때 작업을 다시 시작하는 지점을 의미함.

트랜잭션의 길이가 길 경우 처음부터 다시 시작하는 것을 방지하기 위해
오류가 발생하지 않는 확실한 부분부터 작업을 시작할 수 있도록 설정한 중간 지점

3) 일관성 (Consistency)

  • 트랜잭션이 완료된 결과는 항상 일관되어야 한다는 것을 의미함.
  • 변경하지 않는 요소는 전과 후의 데이터가 동일해야하며 트랜잭션으로 변경한
    결과는 수행한 작업이 그대로 반영된 상태여야 한다.
  • 트랜잭션 도중 DB가 변경되더라도 일관성을 유지하기 위해 변경된 DB가 아닌
    트랜잭션을 시작할 때 참조한 DB로 작업을 수행함.
  • 트랜잭션 전과 후 기본키, 외래키, 데이터 타입같은 제약 조건을 모두 만족하는 것으로
    일관성을 보장함.
  • 데이터 변경 이벤트(외래키의 타입 변경 등)가 발생했을 때 트리거를 통해
    여러 테이블에 같은 데이터가 유지될 수 있도록 처리함.

4) 고립성 (Isolation)

  • 하나의 트랜잭션 수행 시 다른 트랜잭션이 끼어들어 간섭할 수 없도록 보장하는 특성으로
    트랜잭션 수행 도중에 변경한 데이터는 작업이 완료될 때까지 다른 트랜잭션에서 참조하지 못함.
  • 동시에 수행되는 여러 트랜잭션은 다른 트랜잭션의 존재와 상관없이 독립적으로 수행되어야 하며,
    한 트랜잭션에서 변경한 데이터는 작업 수행이 완료될 때까지 고립되어야 함을 의미
  • 고립성을 보정하기 위해 데이터를 읽고 쓸 때 다른 트랜잭션이 접근하지 못하도록
    잠금(lock) 상태로 만들고 수행이 끝나면 잠금 해제(unlock)하여 접근을 허용함.
공유 락(Shared-lock) : 데이터를 읽을 때 다른 트랜잭션에서도 읽을 수 있도록 허용 (쓰기 X)
배타 락(Exclusive-lock) : 데이터의 쓸 때, 다른 트랜잭션에서 데이터 읽기 쓰기를 모두 잠금
락과 언락을 잘못 사용할 경우 교착 상태(dead-lock)에 빠져 모든 트랜잭션이 수행되지 않을 수 있음.

5) 지속성 (Durability)

  • 트랜잭션으로 작업한 결과가 데이터베이스에 저장되어야 함을 의미
  • 수행이 완료된 (commit) 트랜잭션은 장애가 발생하더라도 변함없이 DB(하드디스크)에
    기록되어야 하며 부분적으로 수행된 트랜잭션은 취소해야 함.
  • 이러한 커밋, 롤백에 대한 부분을 DBMS가 책임지고 관리 및 제어하는 성질

이상입니다...

'TIL' 카테고리의 다른 글

[Sesac IOS] 38일차 TIL  (0) 2022.08.25
[Sesac IOS] 37일차 TIL  (0) 2022.08.25
[Sesac IOS] 34~35일차 TIL  (0) 2022.08.22
[Sesac IOS] 33일차 TIL  (0) 2022.08.18
[Sesac IOS] 32일차 TIL  (0) 2022.08.18