-
# 트랜잭션이란
하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산들을 합친 논리적인 작업 단위이자
장애가 발생했을 때 데이터를 복구하는 작업 단위
트랜잭션이 중요한 이유는 다음과 같습니다.
데이터베이스는 데이터의 무결성*을 보장하는 것이 중요한데 아래의 ACID를 통해 이를 보장할 수 있습니다.
DBMS의 성능은 초당 트랜잭션의 실행 수인 TPS (Transaction Per Second)로 측정하기에 트랜잭션이 중요합니다.
* 데이터의 무결성
- 부정합을 방지하고자 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미한다.
# 트랜잭션이 중요한 이유는?
데이터베이스의 일관성을 유지하면서 장애가 발생했을 때 안정적으로 데이터를 복구하기 위해서입니다.
# 트랜잭션의 특징 (ACID)
- 원자성 (Atomicity)
- 일관성 (Consistency)
- 독립성 (Isolation)
- 지속성 (Durability)
원자성 (Atomicity)
- All or Nothing을 의미 (작업 단위의 일부분만 실행되는 상황을 막겠다는 의미)
- 트랜잭션 단위로 작업이 모두 완료되거나 그렇지 못한 경우에는 트랜잭션을 수행하기 이전 상태로 되돌려야 함을 의미
일관성 (Consistency)
- 트랜잭션 전과 후 모두 데이터베이스의 제약이나 규칙을 만족해야 하는 것을 의미
독립성 (Isolation)
- 수행 중인 다른 트랜잭션을 참고하거나 간섭할 수 없다. (데이터가 꼬이는 것을 막기 위해)
즉, 연관되어 있을 경우 참고할 트랜잭션의 작업이 끝나야 접근할 수 있다.
이를 Locking이라고 한다. - 독립성 레벨로 설정 가능
독립성 레벨이 높을 경우에는 데이터가 꼬일 확률이 낮아지지만 많은 시스템 자원을 필요로 할 것이다.
독립성 레벨이 낮을 경우에는 반대로 적은 시스템 자원을 필요로 하겠지만 데이터가 꼬일 확률은 높아진다.
지속성 (Durability)
- 성공한 트랜잭션은 데이터베이스에 반영되어야 하고 이는 어떤 경우에도 손실되지 않고 영구적이어야 한다.
- 트랜잭션의 지속성을 보장하려면 시스템에 장애가 발생할 경우에 복구할 수 있는 복구 기능이 필요하다.
- 로그를 이용하여 구현
# 트랜잭션 연산의 종류
1. Commit 연산
트랜잭션이 성공적으로 완료되면 이 기점이 새로운 기점으로 저장되어 복구해야 할 경우 이 기점들을 기준으로 삼으며 모든 변경 내용을 데이터베이스에 영구적으로 반영
2. Rollback 연산
- 트랜잭션 수행이 실패했을 경우에 하는 연산 작업
- 데이터베이스의 일관성을 유지하기 위해 해당 트랜잭션이 수행되기 이전의 상태로 되돌리는 것
# 트랜잭션 상태
# 데이터베이스에서 발생하는 장애
- 트랜잭션 장애
- 시스템 장애 - 하드웨어 결함
- 미디어 장애 - 디스크 장치의 결함으로 디스크에 저장된 데이터베이스 일부 혹은 전체가 손상된 상태
# Undo와 Redo란?
Undo
- 트랜잭션 로그를 활용하여 오류와 관련된 모든 변경 취소하여 복구 실행
- 로그 파일에 시작(START)은 있고 종료(COMMIT)은 없는 경우
Redo
- 트랜잭션 로그를 이용하여 오류가 발생한 트랜잭션을 재수행하여 복구 실행
- 로그 파일에 시작(START)과 종료(COMMIT) 모두 있는 경우
다음에는 데드락에 대해 알아보겠습니다.
<참고 자료>
트랜잭션에 대한 전반적인 내용을 잘 써주셔서 공유드립니다.
https://brunch.co.kr/@skeks463/27#comment
ACID를 왜 지켜야 하며 그에 대한 예시들을 통해 보다 이해하기 쉽게 써주셔서 공유드립니다.
https://do-my-best.tistory.com/50
'데이터베이스' 카테고리의 다른 글
데이터베이스 정규화 (database normalization) (0) 2022.03.29 SQL과 NOSQL 특징 및 장단점 (0) 2022.03.25