자 89번째 키워드인 'ACID'를 알아 볼 것이다.
ACID는 트랜잭션과 연관성이 있는 키워드 이므로 트랜잭션과 연관지어 알아보았다.
ACID 속성은 데이터베이스 트랜잭션의 신뢰성과 일관성을 보장하기 위한 네 가지 핵심 속성을 말한다.
각각의 속성은 데이터베이스 시스템이 트랜잭션을 처리할 때 반드시 준수해야 할 규칙들을 정의한다.
우선 ACID를 알기 위해서 트랜잭션부터 알아보았다.
트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위로, 여러 개의 연관된 데이터베이스 작업들을 하나로 묶은 것이다.
트랜잭션은 데이터베이스의 일관성을 유지하기 위해 ACID 속성(원자성, 일관성, 독립성, 지속성)을 만족해야 한다.
일반적으로 트랜잭션은 데이터베이스에 대한 여러 개의 연산(예: 데이터 삽입, 삭제, 갱신, 조회)을 묶어 하나의 작업으로 처리하며, 이 작업은 반드시 모두 성공적으로 완료되거나 전혀 수행되지 않은 상태로 유지되어야 한다.
활동 상태 (Active): 트랜잭션이 시작되고 작업이 수행되는 상태이다.
부분 완료 상태 (Partially Committed): 트랜잭션의 마지막 연산이 실행된 상태이다.
완료 상태 (Committed): 트랜잭션이 성공적으로 완료되어 그 결과가 데이터베이스에 영구적으로 반영된 상태이다.
실패 상태 (Failed): 트랜잭션이 오류로 인해 실패한 상태이다.
철회 상태 (Aborted): 트랜잭션이 실패하여 롤백된 상태이다. 트랜잭션의 모든 작업이 취소되고, 데이터베이스는 트랜잭션이 시작되기 전의 상태로 돌아간다.
트랜잭션 시작: 트랜잭션이 시작되면 DBMS는 해당 트랜잭션의 작업을 하나의 작업 단위로 관리한다.
로그 기록: 작업을 수행하면서 DBMS는 로그를 기록합니다. 이 로그는 트랜잭션이 실패할 경우, 상태를 원래대로 복구하는 데 사용된다.
커밋 또는 롤백: 모든 작업이 성공적으로 완료되면 커밋을 통해 변경 사항이 영구적으로 적용된다. 만약 어떤 작업에서 오류가 발생하면, 로그를 사용해 모든 작업이 트랜잭션 시작 전의 상태로 롤백된다.
무결성 제약 조건 검사: 트랜잭션 수행 중에 데이터베이스는 외래 키, 고유성 제약, 체크 제약 등 다양한 무결성 제약 조건을 준수하는지 검사한다.
트랜잭션 종료 시 검증: 트랜잭션이 끝난 후, 데이터베이스가 이전과 동일하게 모든 제약 조건을 만족하는지 확인한다. 만약 제약 조건이 위반되면, 트랜잭션은 롤백된다.
트랜잭션 격리 수준: DBMS는 트랜잭션 격리 수준을 통해 트랜잭션 간의 상호 작용을 제어한다. 격리 수준이 높을수록 트랜잭션 간 간섭이 적어지지만, 성능 저하가 발생할 수 있다.
READ UNCOMMITTED: 가장 낮은 격리 수준으로, 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다.
READ COMMITTED: 트랜잭션이 커밋된 데이터만 읽을 수 있다.
REPEATABLE READ: 트랜잭션이 시작된 이후부터 읽은 데이터는 트랜잭션이 종료될 때까지 변경되지 않는다.
SERIALIZABLE: 가장 높은 격리 수준으로, 모든 트랜잭션이 순차적으로 실행된 것처럼 보이게 한다.
로그 및 백업: DBMS는 트랜잭션이 커밋될 때 그 내용을 로그 파일에 기록한다. 시스템 장애가 발생하면 로그 파일을 사용해 트랜잭션 결과를 복구한다.
디스크 쓰기: 트랜잭션이 커밋되면 DBMS는 변경 사항을 디스크에 기록한다. 이는 데이터베이스가 전원을 잃거나 시스템이 충돌해도 트랜잭션 결과가 유지되도록 보장한다.