# CHAPTER 4 데이터베이스 - 트랜잭션

금성·2022년 12월 14일
0

CS 전공지식 노트

목록 보기
13/19

SECTION 4.4 - 트랜잭션

트랜잭션 ( Transaction )

데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위

  • 데이터베이스의 상태를 변화시킨다는 것은 무엇을 의미할까?

    질의어(SQL)를 이용하여 데이터베이스를 접근 하는 것
    => SELECT, INSERT, DELETE, UPDATE

  • 게시판을 예로 들어보자!

    게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누름, 다시 게시판으로 돌아왔을때, 자신의 글이 포함된 업데이트된 게시판을 보게됨.

    • DB작업으로 옮겨보면
      • 사용자가 올리기 버튼을 누를때 => INSERT문 으로 입력한 게시글의 DATA를 옮김
      • 게시판을 구성할 데이터 => 데이터를 SELECT 하여 최신 정보로 유지.
        => 여기서 작업단위는 insert + select 합친것

    위에서 말한 하나의 작업단위를 트랜잭션이라고 함

하나의 트랜잭션 설계를 잘하는 것이 데이터를 다루는 것에 많은 이점이 있다!!

그러면 이 트랜잭션을 사용하는 이유는 뭘까?..

  • 은행 업무 예시

은행 계좌 이체 업무를 예시로 들어보자.

  1. A은행에서 B은행으로 돈을 계좌 이체 하려고 함
  2. 송금하는 도중 알수 없는 오류가 발생. 그결과, A은행에서 돈은 빠져나갔지만 B은행 계좌에는 입금되지 않는 일이 발생

이러한 상황이 발생하면 어떻게 할것 인지, 어떻게 해결하면 좋을지 한번 생각해보자. => 트랜잭션

  • 트랜잭션이 필요한 이유

당연하게 거래가 완전히 끝나면 승인되게 하면 된다. 그렇게 하면 중간에 오류가 발생해도 거래를 시작하기전으로 되돌릴 수 있게 된다.

여기서 승인이 Commit / 되돌리는 것이 Rollback

  • Commit 과 Rollback
    • Commit 연산

      하나의 트랜잭션이 성공적으로 끝나서 DB가 일관성이 있는 상태에 있음을 의미

    • Rollback 연산

      하나의 트랜잭션 처리가 비정상적으로 종료되어 원자성이 깨진상태를 의미.
      -> 원자성을 지키기 위해 트랜잭션이 행한 모든 연산을 재시작하거나 취소( Undo )함

커밋과 롤백 덕분에 데이터의 변경사항을 쉽게 확인 할 수 있고 해당 작업을 그룹화 할수 있게 됨!

은행거래로 다시 돌아가 보자.

A은행 에서 B은행으로 송금해서 완전한 거래를 하는 것을 하나의 논리적 단위라고 말할 수 있다! ( Commit )
=> 그래서 이 논리적 단위인 트랜잭션이 필요함!!


트랜잭션의 특징

트랜잭션이 성공적으로 처리되어 DB의 무결성과 일관성을 보장하려면 4가지 특성을 만족해야 함

  • 원자성 ( Acid )
  • 일관성 ( Consistency )
  • 독립성 ( Isolation )
  • 지속성 ( Durability )

다들 익히 알고 있는것들이므로 넘어가고

  • ACID 원칙은 완벽히 지켜지지 않음

    실제로는 ACID 원칙은 종종 지켜지지 않음 => ACID 원칙을 엄격하게 지키게 되면 동시성이 매우 떨어지기 때문

    • 동시성 (Concurrent)

따라서 각 level 별 transaction lock level이 존재 (링크 참고)

profile
내일부터 공부 해야지

0개의 댓글