ACID 개념

katsukichi·2021년 4월 10일
0

CodeStates_IM

목록 보기
38/48

ACID ?

데이터베이스에서 무언가 하나를 처리하는데 필요한
트랜젝션을 위한 성질이다.

예시 : 계좌이체

내가 -> A라는 사람에게 계좌이체를한다.

내 계좌에서 10만원 를 빼고
A에게 10만원을 추가한다.

만약

내 계좌에서는 돈이빠져나간 흔적이있는데

A의 계좌에 돈이 들어오지않았다면 ?

돈은 사라진것, 공기가되었다. 있었는데 없었습니다.

이러한 안정성을 보장하기 위해서 ACID라는 성질을 유지해줘야한다.

데이터베이스에서 트랜젝션이 발생할때 (계좌이체라고 생각하자)
그것에 대한 안정성을 보장할수있는 성질 : ACID

A : Atomicity
C : Consistency
I : Isolation
D : Durability

Atomicity

원자성 : 하나의 트랜젝션 내에서는 모든 연산이 성공하거나 모두 실패해야 한다.

하나의 트랜잭션이 성공하려면 -> 무조건 성공해야하고
실패할 요소가 보이면 -> 무조건 실패해야한다.

어중간한건 없다. 모아니면 도 그런거아닐까.

계좌이체하는 과정을 취소시키는부분이 Roll Back 롤백이라고한다.

Consistency

일관성 : 하나의 트랜잭션 전 후에 데이터베이스가 일관된 상태를 유지해야한다.

예시 :

내가 예금을 하나 만들려고한다.

은행에서 예금은 항상 이름을 받아서 예금을 만들었다.

하지만 갑자기 이름이없는 예금을 만들려고한다.

내가 들고있는 계좌에서 이름을 빼주세요 이런것

어떤 데이터베이스에 특정 제약조건을 건다면

그 조건에 맞지않는 트랜잭션에 대해서는 처리를 하지않는다.

Isolation

고립성 : 각각의 트랜젝션은 독립적, 서로의 연산을 확인받거나 영향을 줄 수 없다.

A가 B에게 5천원 송금
A가 C에게 5천원 송금

A에는 1만원이 빠져나간것으로 보이지만

B에게 보낸것과 C에게 보낸것은 서로 독립적이다.

두개가 서로에게 영향을준다면 그것을 실패한 트랜잭션이다.

Durability

지속성,내구성 : 하나의 성공된 트랜젝셔넹 대한 로그가 기록되고 영구적으로 남는다.

내가 B계좌로 5천원 이체 은행서버에서는 201 OK 응답

하지만 은행에 서버에러가 났다.

다시 은행어플가서 기록을봣는데 5천원 이체한 기록이 있다.

ACID는 금융쪽에서 꼭 지켜서 데이터베이스를 설계해야한다.

profile
front-back / end developer / Let's be an adaptable person

0개의 댓글