서론
- 데이터베이스는 대량의 데이터를 안전하고 일정되게 관리해야한다.
- 특히 은행거래, 전자상거래, 병원, 보험 기록가 그 예시
- 위 애플리케이션에서는 데이터의 무결성이 보장되어야 한다.
- 이를 보장하기 위해 DBMS는 트랜잭션이라는 개념을 사용한다.
- 트랜잭션이란?
- 데이터베이스에서 하나의 논리적인 작업 단위
- 중간과정에서 요류나면 롤백하여 데이터가 불완전한 상태로 남지 않도록 하는 역할을 수행
- 트랜잭션을 안전하게 관리하기 위해 도입된 개념(원칙)이 ACID
- ACID는 원자성, 일관성, 독립성, 지속성 개념의 약자로, 데이터베이스의 신뢰성을 확보하기 위해 알아야할 필수 개념이다.
- Atomicity, 원자성
- Contsistencty, 일관성
- Isolation, 독립성
- Durability, 지속성
- ACID개념을 예시를 들어 알아보자
원자성
- 원자성이란?
- 트랜잭션이 모두 수행되거나 모두 실행되지 않는다.
- 예시 : 은행 계좌이체
- A계좌에서 B게좌로 1달러를 이체하는 상황을 가정하자. 이 거래는 2개의 스텝으로 구성된다.
- A계좌에서 1달러를 차감
- B계좌에서 1달러를 추가
- 첫번째 과정은 성공했지만, 두 번째에서 오류가 발생했다면
- A계좌에서 1달러는 차감 (성공)
- B계좌에서 1달러를 추가 (실패)
- 원자성은 이러한 문제을 방지하지 위해 2단계중 하나라도 실패하면 전체 트랜잭션을 롤백하여 이전상태로 되돌립니다
일관성
- 일관성이란?
- 트랜잭션 실행전후 데이터베이스가 정의된 규칙을 항상 만족해야 한다.
- 예시 : 은행계좌 이체
- A계좌에서 B게좌로 1달러를 이체하는 상황이며 전체계좌는 A, B 계좌 두개만 존재한다고 가정하자.
- A계좌에서 B계좌로 1달러를 송금하고 A계좌 잔고는 차감되고 B잔고는 증가되는 상황에서 전체 잔고의 총합은 그대로 유지되어야 한다.
- 데이터베이스의 무결성을 유지하는 원칙이 없다면
- 송금후에 전체 잔고가 1달러 증가되는 비정상적인 상황이 발생한다.
- 일관성은 데이터베이스가 유효한 상태로 유지되도록 보장하는 개념이다.
독립성
- 독립성이란?
- 여러 트랜잭션이 동시에 실행될때, 각 트랜잭션이 다른 트랜잭션의 작업에 영향을 받지않아야 한다.
- 예시 : 2명의 고객이 동일한 상품을 구매
- 구매하고자 하는 상품의 재고가 1개만 있다고 가정하자.
- 독립성이 보장되지 않는다면 한명은 재고가 있는 상태에서 주문, 다른 한명은 주문과정에서 재고가 0이 되는 문제가 발생한다.
- 이를 방지하기 위해 데이터베이스는 트랜잭션 격리 수준을 조정하여 동시성 문재를 해결한다.
- 트랜잭션의 격리 수준을 적절하게 조정하여 데이터의 안정성을 유지하면서도 성능을 최적화할 수 있따.
트랜잭션 격리수준
- READ UNCOMMITED:
- 다른 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있는 가장 낮은 격리 수준
- 데이터 일관성이 깨질 가능성
- READ COMMITED:
- 트랜잭션이 커밋된 데이터만 읽을 수 있도록 보장하며 READ UNCOMMITED보다 데이터일관성이 높다.
- REPEATABLE READ:
- 트랜잭션이 실행되는 동안 동일한 데이터를 여러번 조회해도 결과가 변하지 않도록 보장
- SERIALZABLE:
- 가장 엄격한 관리 수준으로 트랜잭션을 직렬화하여 실행하는 방식으로 동시성을 거의 허용하지 않지만 데이터의 일관성을 가장 강력하게 보장
지속성
- 지속성이란?
- 트랜잭션이 성공적으로 완료되면 변경사항이 영구적으로 저장된다.
- 시스템장애나 전원장애가 발생하더라도 이미 완료한 트랜잭션 데이터는 손실되지 않아야 한다.
- 이를 보장하기 위해 복구 메커니즘을 사용한다. 가장 일반적인 메커니즘은 로그기반복구이다.
- 복구 메커니즘 : 로그기반복구
- 데이터베이스는 트랜잭션이 수행될 떄마다 변경내용을 별도의 로그 파일에 기록한다.
- 만약 장애가 발생하면 로그 파일을 사용하여 트랜잭션을 REDO하거나 UNDO한다.
- 복구 메커니즘 : 체크포인트
- 일정한 시점마다 데이터베이스의 상태를 저장하고 이를 활용하여 복구 시간을 만족할 수도 있다.
- 온라인 쇼핑몰에서 주문이 성공적으로 완료된 후 서버가 다운되더라도 주문정보는 유지해야한다. DBMS에서 이러한 데이터를 보호하기 위해 다양한 복구 기법을 사용하여 사용자가 안전하고 신뢰할 수 있는 데이터처리를 할 수 있다.
