ACID
기술노트
🔥 ACID
ACID는 데이터베이스 트랜잭션(Transaction)이 안전하게 수행되기 위해 반드시 만족해야 하는 네 가지 핵심적인 성질을 의미합니다. 이 원칙을 통해 데이터베이스 시스템은 여러 트랜잭션이 동시에 실행되는 환경에서도 데이터의 무결성과 신뢰성을 보장할 수 있습니다.
⚛️ A: 원자성 (Atomicity)
트랜잭션에 포함된 모든 작업이 모두 성공하거나, 하나라도 실패하면 모두 실패하는 것을 보장하는 성질입니다. 즉, 작업이 부분적으로만 실행되는 경우는 절대 없습니다. (All or Nothing)
- 예시 : 계좌 이체 시, 출금 작업만 성공하고 입금 작업이 실패하는 경우는 없어야 합니다. 출금이 성공하면 반드시 입금도 성공해야 하고, 입금이 실패하면 출금 작업도 취소(롤백)되어야 합니다.
🌐 C: 일관성 (Consistency)
트랜잭션이 성공적으로 완료된 후에도, 데이터베이스가 항상 일관된 상태를 유지해야 함을 의미합니다. 데이터베이스에 정의된 모든 규칙(제약 조건, 트리거 등)은 트랜잭션 전후에도 위반되지 않아야 합니다.
- 예시 : 계좌 이체 후에도, 시스템 전체의 총 잔액은 이체 전과 동일하게 유지되어야 합니다.
🚧 I: 고립성 (Isolation)
하나의 트랜잭션이 실행되는 동안에는, 다른 트랜잭션이 중간 결과를 볼 수 없도록 격리하는 것을 의미합니다. 각 트랜잭션은 마치 데이터베이스에 혼자 접근하는 것처럼 보여야 합니다.
- 예시 : A가 B에게 송금하는 트랜잭션이 아직 완료되지 않았다면, 다른 트랜잭션은 A의 잔액이 줄어들었거나 B의 잔액이 늘어난 중간 상태를 봐서는 안 됩니다.
💾 D: 지속성 (Durability)
성공적으로 완료된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 영구적으로 저장되어야 함을 의미합니다. 데이터베이스는 로그(Log) 등을 사용하여, 시스템 다운이나 정전이 발생해도 완료된 트랜잭션의 결과를 복구할 수 있어야 합니다.
- 예시 : 계좌 이체가 성공적으로 완료되었다는 메시지를 받았다면, 그 직후에 은행 시스템에 장애가 발생하더라도 이체 결과는 사라지지 않아야 합니다.
💡 정보처리기사 핵심 Point
- ACID는 관계형 데이터베이스(RDBMS)가 데이터의 신뢰성을 보장하는 핵심 원리입니다.
- 반면, 많은 NoSQL 데이터베이스는 성능과 확장성을 위해 ACID 원칙을 완화한 'BASE'(Basically Available, Soft state, Eventually consistent) 모델을 따르기도 합니다.
- 서비스의 성격에 따라 데이터의 일관성이 얼마나 중요한지를 파악하고, 그에 맞는 데이터베이스 기술을 선택하는 것이 중요합니다.