2022. 3. 16. 10:43ㆍTheory
트랜잭션이란?
데이터 베이스의 상태를 변화시키기 위해 수행하는 하나의 작업 단위로, 단순하게 SQL문으로 쿼리를 하나 실행하는 것뿐 아니라, 데이터베이스 내의 여러 개의 테이블이 수정될 때 이를 이루는 하나의 작업 단위를 말한다.
예를 들어 쇼핑몰에서 주문이 일어날 경우
1. SELECT : 상품의 재고 정보를 가져온다
2. INSERT : 주문서가 생성된다
3. UPDATE : 상품의 재고가 줄어든다
세 개의 동작이 일어나는데 이 한 묶음의 동작이 트랜잭션이라고 생각하면 된다.
만약 트랜젝션의 설계를 잘못하게 된다면 주문서가 생성되지 않고 실패하였는데 상품의 재고가 줄어든다던가, 상품의 재고가 없는데 주문서가 생성되는 등의 문제가 발생하여 데이터베이스가 엉망이 되어버리는 경우가 있다. 특히 여러 개의 테이블에 INSERT나 UPDATE가 일어나는 경우 에러가 난 수행 작업이 발생할 경우 앞서 작업되었던 작업이 그대로 남아버리는 경우가 있는데, 이런 경우에 적합하지 않은 데이터들이 남게 되고, 사용자가 많은 서비스일 경우 되돌릴 수 없이 심각한 문제를 초래하기도 한다.
트랜잭션의 특징
위와같은 문제를 발생시키지 않기 위해 트랜잭션은 크게 4가지의 특징을 가지고 있다.
- 원자성 : Atomicity
- 일관성 : Consistency
- 독립성 : Isolation
- 지속성 : Durability
1. 원자성 (Atomicity)
트랜잭션의 작업이 데이터베이스에 모두 반영이 되던가, 아니면 전혀 반영되지 않아야 한다.
2. 일관성 (Consistency)
작업 처리 결과가 항상 일관성이 있어야 한다.
트랜잭션을 처리하는 동안에 데이터베이스가 변경되더라도 처음 참조한 데이터로 트랜잭션을 진행한다.
3. 독립성 (Isolation)
트랜잭션이 여러 개 실행되고 있더라도 다른 트랜잭션의 연산에 끼어들 수 없다.
하나의 트랜잭션이 끝날 때까지 다른 트랜잭션은 그 트랜잭션의 결과를 참조할 수 없다.
4. 지속성 (Durability)
트랜잭션이 성공적으로 완료되었을 경우 결과가 영구적으로 반영되어야 한다.
Commit, Rollback
개발자라면 익숙할 Commit과 Rollback은 하나의 트랜잭션이 끝났거나 혹은 실패했을 때 이를 취소하기 위해 사용하는 연산이다.
Rollback은 중간에 연산이 실패하여 원자성이 깨진 경우 트랜잭션이 일어나기 전으로 상태 값을 초기화해준다.
Commit은 트랜잭션이 성공적으로 완료된 경우 이를 영구적으로 반영하기 위해 데이터베이스에 반영하는 연산을 실행한다.
'Theory' 카테고리의 다른 글
프록시(Proxy)란? (0) | 2022.03.16 |
---|---|
스로틀링 (Throttling), 디바운싱(debouncing)이란? (0) | 2022.03.16 |
바인딩(Binding)이란? (0) | 2022.03.16 |
쿠키(Cookie)와 세션(Session)의 의미, 차이점 (0) | 2022.03.16 |
CDN(Content Delivery Network)이란? (0) | 2022.03.16 |