https://victorydntmd.tistory.com/129

 

[DB이론] 트랜잭션(transaction)과 ACID 특성을 보장하는 방법

1. 트랜잭션( transaction ) 트랜잭션이란 질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는

victorydntmd.tistory.com

 

내가 데이터베이스는 많이 약해서, 항상 공부하려고 생각만 하고 있었는데 이번에 가시다님이 진행하시는 DOIK 1기에 참여하면서 강제로(?) 데이터베이스를 공부하고 있다. 스터디에 참여하다보니 내가 잘 몰랐던 부분이 자연스럽게 해소되는 순기능이 있다...

요즘 틈틈히 대규모 시스템 설계 기초라는 책을 보고 있는데, 이 책에서 시스템 설계 규모 추정을 할 때 TPS, RPS라는 개념이 나온다. (Transaction Per Second, Respond Per Second)

이 중, RPS는 알았지만 TPS는 뭔지 잘 몰랐는데 스터디 공부를 하면서 알게 되어 정리한다.

 

Transaction은 작업 수행의 논리적 단위다.

말이 어렵다. 

예를 들면...

 

A가 B에게 만원을 보내려고 한다.

1. A의 계좌에서 만원을 차감한다.

2. B의 계좌에 만원을 증가시킨다.

 

1&2는 반드시 같이 일어나야 한다. 1만 일어나거나 2만 일어나면 절대로 안된다.

즉 1&2를 묶어서, 반드시 동시에 같이 일어나야 하는 작업의 단위인 Transaction이라고 한다.

(동시에 일어나야 하는 것이 아니고, 1&2가 일어날거면 같이 일어나고, 안일어날거면 같이 안일어나야 한다.

All or Nothing)

만약 중간에 오류가 일어나면 처음부터 송금을 다시 하게 하는 것이 rollback이고

오류 없이 정상적으로 송금이 일어나면 메모리에 올라와있는 데이터를 디스크에 write하는 것이 commit이다.

참고)

 

https://www.youtube.com/watch?v=7yuGlqPo8XQ

ㄴ 부가적인 설명 :

좀 더 자세히 알아보자.

 

DB에서 트랜잭션이 수행될 때, 우리는 디스크에 바로 변경을 가하지 않는다.

메모리에 수정할 부분의 clone을 띄우고, clone에 변경을 가한다.

(-> DB가 아무런 일을 안해도 항상 메모리를 많이 차지하고 있는 이유를 드디어 알았다!)

그리고 정상적으로 트랜잭션이 수행됐으면, 변경된 clone 데이터들을 디스크에 write하고 이를 commit이라고 한다.

트랜잭션이 정상 수행되지 않았으면 메모리에 있는 clone들을 싹 날리고 이를 rollback이라고 한다.

 

이거 맞나? 

맞음. 전공책 데이터 베이스 시스템 6th E. 확인함...

 

 

그렇다면 Transaction은 왜 사용하는걸까?

 

크게 두 가지의 목적이 있다.

 

1) 반드시 같이 일어나야 하는 작업(ex. 위에서 쓴 만원 보내고 받기)을 보장하기 위해서

-> Atomicity (원자성)

All or Nothing. 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장한다.

2) 데이터를 병렬로 처리할 때, A가 수정한 데이터를 A의 작업이 끝나기도 전에 B가 다시 수정해서 생기는 문제를 방지하기 위해서

-> Isolation (격리성)

트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하게 보장한다.

 

글구 트랜잭션에는 4가지 특징이 있다.

위에서 언급한 ACID다.

 

1. Atomicity

2. Consistency

: 트랜잭션이 성공적으로 완료되면 일관적인 DB 상태를 유지한다. (커밋된 데이터가 갑자기 변경되지 않는다.)

3. Isolation

4. Durability

: 성공적으로 수행된 트랜잭션은 영원히 반영된다. 

 

 

그럼 트랜잭션이 각 특성들을 어떻게 보장하는지 알아보자.

 

https://victorydntmd.tistory.com/129

ㄴ 유튜브와 설명이 다르다. 유튜브에서는 변경할 데이터를 메모리에 복제(clone)한 후에 그 데이터에 변경을 가하고

rollback하거나 commit한다고 했는데, 위 글에서는 오리지널 데이터를 임시 영역에 따로 저장한다고 써놨다.

근데 나는 유튜브 설명이 이치에 맞다고 생각한다. 

 

https://m.blog.naver.com/kidoel/20018035111

음.. 롤백 세그먼트가 어디에 위치해있는건지 몰겠다....ㅋ

 

 

잠깐!

read_lock, write_lock, unlock은 뭘 의미하는거야?

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기