1. 원자성 (Atomicity)
개념:
원자성은 트랜잭션의 모든 작업이 모두 성공하거나 모두 실패해야 한다는 원칙입니다. 즉, 트랜잭션 내의 작업들이 하나의 단위로 처리되어야 하며, 일부만 처리되거나 중간에 실패해서는 안 됩니다. 만약 트랜잭션 도중 오류가 발생하면, 이미 완료된 작업도 취소하여 처음 상태로 돌아가야 합니다.쉽게 설명:
원자성은 "올바른 결과가 나오지 않으면, 아무 일도 일어나지 않은 것처럼 되돌려야 한다"는 원칙입니다. 예를 들어, 은행에서 돈을 이체할 때 송금자 계좌에서 돈을 빼고 수신자 계좌에 입금하는 작업이 동시에 완료되거나, 둘 다 완료되지 않아야 합니다.예시 코드:
BEGIN TRANSACTION; -- 송금자 계좌에서 1000원을 차감 UPDATE accounts SET balance = balance - 1000 WHERE account_id = 'sender'; -- 수신자 계좌에 1000원을 추가 UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'receiver'; COMMIT; -- 모든 작업이 성공하면 확정 -- 만약 중간에 오류가 발생하면 ROLLBACK; -- 처음 상태로 되돌림
여기서 하나의 작업이라도 실패하면
ROLLBACK
을 통해 전체 트랜잭션이 취소되고 처음 상태로 돌아갑니다.
2. 일관성 (Consistency)
- 개념:
일관성은 트랜잭션이 실행되기 전과 후에 데이터베이스의 상태가 일관된 상태를 유지해야 한다는 원칙입니다. 트랜잭션이 완료되면, 모든 데이터는 데이터베이스가 정의한 제약 조건(예: 데이터 유형, 범위, 고유성 등)을 충족하여 데이터 무결성이 유지되어야 합니다. - 쉽게 설명:
일관성은 "트랜잭션이 성공하면 데이터베이스는 항상 일관성 있는 상태로 유지되어야 한다"는 원칙입니다. 예를 들어, 은행 계좌에 음수 잔액이 허용되지 않는다면, 트랜잭션 후에도 이 규칙이 지켜져야 합니다. - 예시:
만약accounts
테이블의 잔액이 음수일 수 없다는 조건이 있다면, 일관성 규칙에 따라 어떤 트랜잭션이든 잔액이 음수가 되도록 허용되지 않습니다. 만약 잔액이 음수가 되는 작업이 실행되면, 일관성 위배로 인해 트랜잭션은 취소됩니다.
3. 고립성 (Isolation)
개념:
고립성은 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션이 서로 영향을 받지 않고 독립적으로 수행되어야 한다는 원칙입니다. 고립성은 트랜잭션 간의 데이터 간섭을 막아 트랜잭션의 독립성을 보장합니다. 이를 위해 데이터베이스는 특정 수준의 격리(Isolation Level)를 적용합니다.쉽게 설명:
고립성은 "다른 트랜잭션이 동시에 실행되더라도 내 작업에는 영향을 주지 않아야 한다"는 원칙입니다. 예를 들어, A와 B 사용자가 동시에 동일한 계좌의 잔액을 조회하고 갱신하려 할 때, 고립성은 A와 B의 작업이 서로 간섭하지 않도록 합니다.예시 코드:
고립성 레벨을 설정하여 트랜잭션 간 간섭을 최소화할 수 있습니다.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; -- 트랜잭션 처리 UPDATE accounts SET balance = balance + 500 WHERE account_id = 'user1'; COMMIT;
SERIALIZABLE
수준은 가장 높은 고립성 레벨로, 다른 트랜잭션이 동시에 접근하지 못하게 합니다. 하지만, 고립성 수준이 높을수록 성능이 저하될 수 있습니다.
4. 지속성 (Durability)
- 개념:
지속성은 트랜잭션이 성공적으로 완료되면 시스템 오류가 발생해도 그 결과가 보장되어야 한다는 원칙입니다. 트랜잭션이 성공적으로 완료되면, 변경된 데이터는 디스크 등에 안전하게 저장되어 전원이 꺼지거나 시스템 오류가 나도 데이터가 보존됩니다. - 쉽게 설명:
지속성은 "한 번 완료된 작업은 영구히 유지된다"는 원칙입니다. 예를 들어, 송금이 완료되었다면 시스템이 꺼져도 데이터베이스는 송금 내역을 저장해 두어야 합니다. - 예시:
데이터베이스는 트랜잭션이 완료되면 변경된 데이터를 영구적으로 저장하여 시스템 오류가 발생하더라도 트랜잭션 결과가 유지되도록 합니다. 이를 위해COMMIT
이 수행되면 데이터가 디스크에 기록되어 안정성이 확보됩니다.
ACID 특성 요약 표
특성 | 설명 | 쉽게 설명 |
---|---|---|
원자성 | 트랜잭션 내 모든 작업이 성공하거나 모두 실패해야 함 | "모든 것이 성공하지 않으면 아무 일도 일어나지 않은 것처럼 되돌려야 함" |
일관성 | 트랜잭션 전후에 데이터의 무결성이 유지되어야 함 | "트랜잭션이 성공해도 데이터베이스 규칙이 깨지지 않도록 함" |
고립성 | 여러 트랜잭션이 동시에 실행되어도 서로 간섭하지 않도록 함 | "내 작업이 다른 작업과 혼선되지 않도록 함" |
지속성 | 트랜잭션 완료 후 시스템 오류가 나도 데이터는 영구히 유지됨 | "한 번 완료된 작업은 영구히 기록되어 시스템 오류가 나도 유지됨" |
ACID 특성은 데이터베이스가 트랜잭션을 안정적이고 일관되게 처리하도록 보장하는 중요한 원칙입니다. 이를 통해 데이터의 신뢰성을 유지하고, 시스템 장애 발생 시에도 안전하게 데이터를 관리할 수 있습니다.
'데이터베이스' 카테고리의 다른 글
ORM(Object-Relational Mapping)의 장단점 (1) | 2024.10.29 |
---|---|
데이터베이스 락(lock)의 종류와 동작 방식 (0) | 2024.10.29 |
정규화(Normalization)와 비정규화(Denormalization)의 개념 및 장단점 (0) | 2024.10.29 |
조인의 종류(예: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)와 차이점 (0) | 2024.10.29 |
인덱스의 역할과 사용 이유 (0) | 2024.10.29 |