ACID

김보성·2021년 7월 17일
0

CS

목록 보기
11/11

acid.. 산이 아니다.. ㅎㅎㅎㅎㅎ

Transaction

ACID에 대해 알기 전에 transaction에 대해 알아보자

transaction은 "여러개의 작업들을 하나의 실행 유닛으로 묶어준 것" 이다.

그러니까 transaction에는 여러개의 query 작업들이 있다. 여기에서 query1, 2작업이 있다고 가정해 보자. 이 경우에 query1이나 query2가 실패 했을 경우 transaction은 실패하게 된다. 즉, transaction안의 여러개의 작업들이 전부 성공해야 transaction이 성공하게 된다.
이러한 transaction의 정의는 ACID 특성들을 가지고 있다.

ACID

Atomicity, Consistency, Isolation, Durability의 줄임말이다.

Atomicity

하나의 transaction이 전부 성공하거나 실패해야한다는 의미이다. 부분적으로 실행이 되면 안되는 성질이다.
예를 들어 계좌이체를 하는 경우에 다음과 같은 단계로 나눌 수 있다.

  1. A의 계좌에서 돈을 뺌.
  2. B의 계좌에 돈을 넣음.

이 두가지 일중에서 하나라도 실패하게 될 경우 큰 문제가 생길 수 있다. 예를들어 2번에 문제가 생겼다면 A의 돈은 어디로 갈까? 그래서 두가지 모두 성공하게 되야하는 성질을 의미한다.

SQL에서도 특정 query가 실패하게 되면 전부 실패해야한다!

Consistency

일관성을 의미하는 단어다. 그러니까 transaction이후 데이터베이스의 상태는 항상 일관성을 가지고 변하면 안된다는 의미이다.
예를 들어서 유저는 이메일을 가지고 있어야 한다는 데이터베이스 제약이 있다고 가정하자.
다음과 같은 경우에는 일관성 성질을 위반하고 있다.

  1. user의 email을 삭제한다.
  2. email이 없는 user 추가한다.

위반하고 있는 이유는 이메일을 가지고 있어야 한다는 제약을 위반하고 있기 때문이다.

Isolation

transaction끼리 서로 독립적이여야 한다는 의미이다. 이 말은 transaction이 동시에 실행되었을 때와 차례대로 실행되었을 때 동일한 상태를 유지해야한다.
예를들어 만원 있는 통장에서 A, B 각각 6천원씩 인출해 간다고 해보자.
그럴경우 차례대로 6천원씩 인출해가나 한꺼번에 빼가나 결과 값은 똑같다.
이에 따라 각각의 transaction은 다른 transaction의 연산을 알 수 없다.

Durability

하나의 transaction이 성공적이였다면 해당 transaction에 대한 로그가 남고 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적으로 남아야한다는 것을 의미한다.
예를들어 은행 데이터베이스에 오류가 생겨도 기존에 거래했던 기록들은 남아야 한다.

결론

뭔지 잘 몰랐는 데 이런 이론을 배울 때 마다 이런것들을 만든 사람이 정말 똑똑하다고 느낀다. ACID를 잘 지켜서 transactiond을 짜도록 해야 겠다. ㅋㅋ

profile
Boseong

0개의 댓글