ACID
- ACID는 데이터베이스 트랜잭션에서 보장해야 하는 네 가지 주요 속성을 나타내는 약어
- 트랜잭션은 데이터베이스에서 하나의 작업 단위를 말함. (자세한 내용은 여기에)
원자성(Atomicity)
- 트랜잭션 내의 모든 작업이 완료되거나, 아니면 전혀 실행되지 않아야 함을 의미
- 즉, 트랜잭션은 모두 성공하거나 실패.
- 중간에 하나라도 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 Rollback 수행
- 이 속성은 부분적으로 완료된 트랜잭션이 데이터베이스를 일관성 없게 만드는 것을 방지
- DBMS는 트랜잭션 내의 모든 연산이 완전히 수행되거나, 또는 전혀 수행되지 않도록 보장
- 개발자는 언제 Commit하고, 언제 rollback 할지를 정하는 책임이 있음.
일관성(Consistency)
- 트랜잭션이 성공적으로 완료된 후에 데이터베이스가 일관된 상태를 유지해야 함을 의미
- 즉, 트랜잭션 시작 전과 후에 모든 비즈니스 규칙이 유효하게 유지되어야 함 (constraints, trigger)
- DBMS는 트랜잭션이 데이터베이스를 일관된 상태에서 다른 일관된 상태로만 변경할 수 있도록 보장
- 규칙을 위반했는지는 DBMS가 commit 전에 확인하고 알려준다.
- 개발자는 application 관점에서 transaction이 consistent하게 동작하는지 확인할 책임이 있음.
고립성(Isolation)
- 동시에 수행되는 트랜잭션은 서로에게 영향을 미치지 않아야 함을 의미
- 즉, 트랜잭션은 독립적으로 실행되어야 하며, 동시에 실행되는 다른 트랜잭션의 중간 상태를 볼 수 없어야 함
- DBMS는 동시에 수행되는 트랜잭션들이 서로 영향을 미치지 않도록 보장하고, 이를 위해 DBMS는 잠금(locking), 버전 관리(versioning), 직렬화(serialization) 등의 기능을 사용하여 동시에 발생하는 트랜잭션들 사이에서 데이터의 접근을 조정
- 개발자는 Isolation level중에 어떤 level로 transaction을 동작시킬지 설정해야함
- Concurrency control 을 잘해야 성능에 영향을 미치지 않고 여러 transaction을 다룰 수 있음
지속성(Durability)
- 성공적으로 완료된 트랜잭션의 결과는 영구적이어야 함을 의미
- 영구적으로 저장한다 -> 비휘발성 메모리(HDD, SDD ...)에 저장한다.
- 즉, 시스템이 충돌하거나 재시작되더라도 트랜잭션의 결과는 데이터베이스에 안전하게 저장되어야 함
- DBMS는 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 데이터베이스에 저장됨. 이를 위해 DBMS는 트랜잭션의 결과를 디스크 같은 영구 저장 매체(비휘발성 메모리)에 즉시 기록하고 트랜잭션 로그를 사용하여 시스템 장애 발생 시 복구하는 데 사용
하지만 NoSQL 데이터베이스는 대량의 데이터를 빠르게 처리하고 분산시스템에서 운영할 수 있는 능력이 필요한 다른 종류의 애플리케이션을 위해 설계되었기 때문에 이러한 시스템에서는 데이터의 일관성 보장보다는 가용성과 분할 허용성이 더 중요한 경우가 많다.
이런 이유로 NoSQL 데이터베이스는 대개 ACID 원칙을 완전히 따르지 않고, 대신 BASE(Basically Available, Soft state, Eventual consistency)라는 다른 원칙을 따르는 경향이 있다.
BASE
- 기본적으로 사용 가능(BAsically Available): 시스템은 항상 사용 가능한 상태를 유지하려고 함.
즉, 시스템의 일부분이 실패하더라도 전체 시스템이 계속 작동
이를 통해 고가용성을 보장 - 소프트 상태(Soft state): 시스템의 상태는 입력 없이도 변할 수 있음
이는 네트워크 지연, 장애 등으로 인해 모든 노드가 동시에 같은 정보를 갖지 않을 수 있음을 인정하는 것 - 최종 일관성(Eventual consistency): 시스템은 일정 시간이 지나면(즉, 아무런 새로운 업데이트가 없는 경우) 일관성을 달성하게 됩니다. 즉, 모든 업데이트가 결국에는 모든 노드에 반영될 것이라는 보장
참고 자료
https://www.linkedin.com/pulse/acid-vs-base-database-properties-rudra-garnaik
'ComputerScience > Database' 카테고리의 다른 글
[Database] 데이터베이스의 기본 개념 (DB, DBMS, Schema) (0) | 2024.02.04 |
---|---|
[Database] Index가 무엇인지 설명해보세요. (1) | 2024.01.29 |
[Database] RDB과 NoSQL (0) | 2024.01.10 |
[Database] SQL이란, 그리고 SQL문이 실행되는 과정과 원리 (0) | 2024.01.10 |
[Database] 데이터베이스란 (0) | 2024.01.07 |