개발 일지/CS

[DB] ACID

미숫가루설탕많이 2023. 1. 30. 12:25

 ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 말한다.

 

 트랜잭션은 여러 개의 작업을 하나로 묶은 실행 유닛으로, 각 트랜잭션은 하나의 특정 작업으로 시작해 묶여있는 모든 작업들을 완료해야 정상적으로 종료한다. 만약 하나의 트랜잭션 속에 속한 여러 작업 중에서 단 하나의 작업이라도 실패하면 모든 작업을 실패한 것으로 판단한다. 따라서, 미완료된 작업 없이 모든 작업을 성공해야 한다.

 

 데이터베이스 트랜잭션은 ACID라는 특성을 갖고 있으며,  ACID는 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)으로 이루어져 있다.

 

 

 

 

Atomicity(원자성)

 

 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 것이다. 즉, 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 한다.

 

 예를 들어 A 계좌에서 출금하고 B 계좌에 입금한다고 가정한다. 근데 A계좌에서 출금은 이뤄졌는데 B계좌에 입금이 되지 않았는데 어디서 문제가 발생했는지 알 수 없다면 A계좌에서 출금된 돈은 세상에서 사라진 돈이 된다. 계좌이체는 성공할 수도, 실패할 수도 있지만 출금만 성공하고 입금을 실패해서는 안된다는 것이다.

 

 이처럼 원자성은 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.

 

 

 

 

Consistency(일관성)

 

 데이터베이스의 상태가 일관되어야 한다는 성질이다. 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다. 다시 말해서, 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다는 것이다.

 

 예를 들어 '모든 고객은 반드시 이름이 있어야 한다'라는 데이터베이스의 제약이 있다고 가정하면, 이름이 없는 새로운 고객을 추가하는 쿼리나 기존 고객의 이름을 삭제하는 쿼리는 consistency를 위반하게 된다.

 

 

 

 

Isolation(격리성, 고립성)

 

 트랜잭션을 수행할 때 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 즉, 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다는 뜻이다.

 

 예를 들어  A계좌에 만원이 있는데 이 계좌로 B계좌랑 C계좌에 6천원씩 송금한다고 가정하면, 동시에 실행된다고 마이너스 통장이 되는 것이 아니라 각각의 송금 작업을 연속으로 실행하는 것과 동일한 결과가 나타나야 한다는 것이다.

 

 

 

 

Durability(지속성)

 

 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 한다. 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다는 뜻이다.

 

 예를 들어, 은행에서 계좌이체를 성공적으로 실행한 뒤에 해당 은행 데이터베이스에 오류가 발생해 종료되더라도 계좌이체를 했던 내역은 기록으로 남아야 한다.

 

 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애가 발생하기 전의 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다. 

'개발 일지 > CS' 카테고리의 다른 글

[CS] DDD  (0) 2023.03.04
[CS]Framework  (0) 2023.02.02
[Web] HTTP Messages  (0) 2023.01.26
[Web] AJAX  (0) 2023.01.26
[Web] SSR / CSR  (0) 2023.01.26