본문 바로가기
TIL

항해99_TIL220604 (트랜잭션)

by Hyeongjun_Ham 2022. 6. 4.

오늘 과제 진행 순조롭게 잘 됐다.

그런데 몸이 좀 피곤하네..

조금 일찍 하루를 마친다.

 

  • 트랜잭션이란
    • 여러 쿼리를 논리적으로 하나의 작업으로 묶어주는 것
    EX) 돈 거래 예시(돈 거래가 일어날 때 실행되는 쿼리)
    • Update: 구매자 계좌에서 10,000원 빼기
    • Update: 판매자 계좌에서 10,000원 더하기
    그런데 만약 구매자 계좌에서 돈을 뺀 후에 오류가 발생하면?하나의 작업으로 이뤄지는 여러 쿼리들을 트랜잭션이라는 논리적인 작업 단위로 묶어 쿼리들이 모두 실행 되거나 모두 실행되지 않는다.
  • 이러한 상황을 방지하기 위해 있는 기능이 트랜잭션이다.
  • 트랜잭션의 특징
    • 사용자 혹은 시스템상 오류가 있더라도 데이터베이스가 데이터를 안정적으로 보장할 수 있도록 한다.
    • 커밋 : 트랜잭션으로 묶인 모든 쿼리가 실행되어 쿼리 실행 결과를 실제 DB에 저장하는 것
    • 롤백 : 쿼리 실행 결과를 취소하고 DB를 트랜잭션 이전 상태로 되돌린다.
  • 트랜잭션의 성질 ACID
    • A (Atomicity) :
    • 원자성을 뜻하며 쿼리 실행 결과가 모두 성공하거나 모두 실패하거나
    • C (Consistency) :
    • 일관성을 뜻하며 트랜잭션 작업 처리 결과는 항상 일관성 있어야한다.
    • I (Isolation) :
    • 독립성을 뜻하며 둘 이상의 트랜잭션이 동시 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어 들 수 없다.
    • D (Durability) :
    • 지속성을 뜻하며 트랜잭션이 성공적으로 완료되었으면 결과를 영구히 반영한다.
  • 트랜잭션 격리 수준
    • ACID 성질은 트랜잭션이 이론적으로 보장해야하는 성질이고 실제로는 성능을 위해 성질 보장이 완화되기도 한다.
    • 동시에 DB에 접근할 때 해당 접근을 어떻게 제어할지에 대한 설정

    • Read - Uncommitted :
      • 커밋 전의 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용한다.(트랜잭션 A가 작업을 끝마치지 못하고 롤백하게 되면 트랜잭션 B는 무효가 된 데이터 값을 읽고 처리할 수 있음)
      • *Dirty Read가 발생할 수 있음
    • Read - Committed :
      • 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능하다.(같은 트랜잭션 내에서 같은 데이터를 두 번이상 조회했는데 서로 다른 값이 나오는 현상)
      • *Non-Repeatable Read가 발생할 수 있음
    • Repeatable - Read :
      • 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장한다.
      • *Phantom Read 가 발생할 수 있음
    • Serializable :
      • 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가 ACID 성질을 엄격하게 보장한다. 다만 성능은 가장 떨어진다.
    출처 : https://www.youtube.com/watch?v=e9PC0sroCzc&t=448s

'TIL' 카테고리의 다른 글

항해99_TIL220607 (클린코드)  (0) 2022.06.07
항해99_WIL220605 (ORM, SQL, MVC)  (0) 2022.06.05
항해99_TIL220603 (배열 저장)  (0) 2022.06.03
항해99_TIL220602 (테스트 코드)  (0) 2022.06.02
항해99_TIL220601 (연관관계 매핑)  (0) 2022.06.02