끄적이는 메모장

[DB] 트랜잭션(Transaction) 본문

웹기술 개발자 되기/DB기술

[DB] 트랜잭션(Transaction)

밥보92 2020. 4. 15. 22:25
반응형

데이터베이스를 여러 질의어를 통해 사용을 하고 이를 통해 데이터를 변화 시킴

항상 하나의 접근만 일어난다고 하면 데이터가 무결하게 보장이 되겠지만, 데이터베이스는 여러 접근이 동시에 일어나고 데이터의 변화를 일으키는 수행에 대해서 믿을 수 있는 시스템이 되는 것이 중요함 

 

예를 들어 A라는 사람의 계좌에 들어있는 100만 원에 대한 금액에 대한 수행 B, C를 생각해보자

- 수행 B는 금액을 조회한 후 50만 원을 인출하는 동작을 함

- 수행 C는 금액을 조회한 후 60만 원을 인출하는 동작을 함

수행 B가 계좌를 조회 - 100만 원
수행 C가 계좌를 조회 - 100만 원
수행 B가 50만 원을 인출 후 저장 - 계좌(50만 원)
수행 C가 60만 원을 은출 후 저장 - 계좌(40만 원)

- 최종적으로 계좌에 40만 원이 존재 

여기서 문제는 애초에 수행 C가 일어날 수 없음 수행 B에 의해 잔고가 60만 원 보다 적기 때문

즉, 여러 수행이 동시에 일어나면서 원치 않은 결과가 발생!

 

트랜잭션이란

- 데이터베이스의 상태 변화를 일으키는 논리적으로 구성되는 하나의 작업 단위 혹은 한 번에 수행되어야 하는 연산들

- 위의 예에서는 수행 B, C (계좌 조회 - 계좌 금액 변경) 각각이 하나의 트랜잭션이 되는 것

 

트랜잭션의 특징

- ACID : 트랜잭션의 수행이 안전함을 보장해주는 특성 

원자성 (Atomicity) 

하나의 트랜잭션에 속한 작업이 모두 반영되거나 모두 반영되지 않아야하는 특성. 

일관성 (Consistency)

트랜잭션의 작업이 성공적으로 반영되었다면 그 결과가 항상 일관성이 유지되어야 하는 특성

즉, 고정 요소는 변화가 없어야 하며, 변경된 데이터는 동일한 작업이었다며 결과가 동일해야 함

예시)

위의 예시에서 40만 원을 차감하는 작업일 때 변경 전 계좌가 100만 원이 었다면 이 작업이 언제 일어났더라도 변경 후 60만 원이어야 함

고립성 (Isolation)

하나의 트랜잭션이 완료될 때 까지는 다른 트랜잭션이 변경된 데이터에 대해 접근하지 못하도록 하는 특성

지속성 (Durability)

트랜잭션이 성공적으로 수행되어 저장된 데이터는 데이터베이스의 시스템 상태에 관계없이 영구적으로 반영되어야 하는 특성 

 

트랜잭션의 연산

- Commit & Rollback

Commit

하나의 트랜잭션이 성공적으로 수행하여 데이터베이스가 일관성을 유지한 상태일 때, 트랜잭션이 끝났음을 알려주는 연산

Rollback

트랜잭션이 수행도중 실패 했을 때, 깨어진 원자성의 회복을 위해 처음부터 트랜잭션을 다시 시작하거나 부분적으로 수행된 작업을 취소시키는 연산

 

참조

https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

https://sjh836.tistory.com/11

반응형

'웹기술 개발자 되기 > DB기술' 카테고리의 다른 글

[DB] 데이터베이스 정규화  (0) 2020.04.17
[DB] 파티셔닝(Partitioning)  (0) 2020.04.14
[DB] Index란  (0) 2020.04.14