5월 17일 월요일 (6일차) - 트랜잭션ㅇ

@_@·2021년 5월 17일
0

Database

목록 보기
2/28

<목차>

ㅇ 트랜잭션

  • 커밋
  • 롤백

<요약>

ㅇ 트랜잭션 : 데이터베이스에서 일어나는 작업단위

  • 커밋 : 정상 작업 발생했을 때 : 디비에 영구히 저장
  • 롤백 : 비정상 작업 발생했을 때 : 이전 시점으로 취소시켜서 디비의 무결성 보장해주는 방법



ㅇ DB에 데이터가 저장되어 있고, 사용자들이 DB에 뭔가를 요청하면, DB는 사용자에게 그 결과를 돌려줘

  • 예) 네이버나 구글 창에 검색하면 우리에게 결과가 새로운 페이지를 통해 제공돼

ㅇ 사용자가 요청할 때 실제 디비는 2가지 작업을 통해 처리해

  • 사용자의 요청 : 실시간 처리
  • DB 내부 : 일괄처리

ㅇ 일괄처리

  • 한 번에 모아서 한 번에 처리한다
  • 특정 작업이 들어올 때마다 처리하는 게 아니라, 작업들을 한꺼번에 모아서 한 번에 처리해주는 것
  • 장점) 한 번에 하나의 일만 하니까 안정적
  • 단점) 원할 때 처리가 안 된다. 그 작업이 처리될 때까지 기다려야 해
    • 예) 1년에 1번 처리한다고 하면? 급여가 1년 뒤에 들어온다면?
  • 즉, 사용자의 요청을 실시간으로 피드백을 못 해준다. => 그래서 나온 게 실시간 처리방식

ㅇ 데이터베이스는 이 2가지를 만족하려고 시도

ㅇ 일괄처리가 작업을 모으는 기준은?

  • 도대체 어디까지 한 번의 작업으로 처리해야 할까?
    => 이걸 트랜잭션이라고 표현

ㅇ 트랜잭션

  • 데이터베이스에서 일어나는 작업의 단위 (일괄처리의 기준)
  • 트랜잭션별로 처리가 이루어진다.
  • 예) 나무를 톱질해. 작업을 시작했다. = 트랜잭션이 시작됐다
    의자 완성 = 트랜잭션이 끝났다.
    가공부터 완료까지가 하나의 작업이잖아. 이게 트랜잭션이야

ㅇ 커밋

  • 정상적으로 트랜잭션 종료됐을 때
  • 트랜잭션에 의해 변경된 작업내용이 DB에 영구히 저장되는 것
  • 예) 한글 문서 작성하고 컨트롤 s 눌러서 저장

ㅇ 롤백

  • 트랜잭션이 진행되고 있는데 비정상적인 작업 발생했을 때
    (= DB의 무결성이 깨졌을 때)
  • 트랜잭션이 시작하기 이전 시점으로 돌아가는 것
  • 취소시키는 기준은 트랜잭션 시작하기 전



ㅇ 이해를 위한 예제

: 원래 100원 있었던 고은씨 통장에 1000억이 생겼어 고은씨가 원지씨에게 10억을 주기로 한 상황

  • 상황1 : 트랜잭션 시작 -> 고은씨 통장에서 10억을 원지씨 통장으로 보내기 -> 고은씨 통장에는 990억이 원지씨 통장에는 10억500원 : 트랜잭션 완료 => (정상작업이므로) 커밋
  • 상황2 : 트랜잭션 시작 -> 고은씨 통장에서 10억이 빠져나갔는데 원지씨 통장에는 돈이 안 들어와 ㅜㅠ
    이 상태에서 커밋 되버리면?? 10억 날라가버려 (= DB의 무결성이 깨진 거야)
    트랜잭션이 진행되고 있는데 비정상적인 작업 발생했으므로
    이대로 저장하지 않고 작업을 취소해 줘야 해 => 롤백
  • 이때 10억이 날라가기 전으로 돌아가야 해. 어제로 간다면?...100원이 돼버려.. ㅠㅠ
    즉, 트랜잭션이 시작하기 직전 시점(=1000억을 가진 시점) 으로 롤백해야 해

profile
STEP BY STEP

0개의 댓글