정리 못한 개념들 - SQL(ACID)

Jaemin Jung·2021년 7월 22일
0

Today I Learned

목록 보기
56/62
post-thumbnail

트랜잭션

트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다.
여러 작업 중에서 단 하나의 작업이라도 실패하면, 트랜잭션에 속한 모든 작업을 실패한 것으로 판단한다.
실제 예시를 들면 계좌 이체 서비스에서 트랜잭션이 활용된다.

a계좌에서 b계좌로 10만원을 이체하는 상황이라면
a계좌는 잔액이 10만원 차감되고 b계좌는 10만원이 추가될것이다.
이때 만약 에러가 발생해서 10만원 차감은 되었는데 10만원 추가가 되지않는다면?
a계좌의 사용자는 매우 곤란한상황이 생길것이다.

이 상황에서 트랜잭션은 10만원 차감은 성공하였지만 10만원 추가에서 에러가 발생한다면
모든 작업을 실패한 것으로 판단해준다.

데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다.

ACID

데이터베이스 내에서 일어나는 하나의 트랜잭션의 안정성을 보장하기 위해 필요한 성질을 말한다.

  • Atomicity -> 원자성
    하나의 트랜젝션이 성공하려면 무조건 성공해야함
    하나가 실패했다면 무조건 실패하게 한다.
    ex) 돈 10만원 차감 상대 계좌 10만원 증가에서 하나라도 실패하면 취소시킴

  • Consistency -> 일관성
    하나의 트랜젝션 전후에 데이터베이스의 일관된 상태가 유지되어야 한다.
    ex) 사용자가 예금 하나 개설하기 위해서는 은행은 무조건 사용자의 이름을 받아야함
    사용자가 이름이 없는 예금을 만들어 달라고 요청하면 그건 허용 되지 않는다.
    은행에서 가지고 있는 예금에 자신의 이름을 빼는것도 허용 되지 않는다.

한마디로 데이터베이스에 규칙을 벗어나거나 상태 변경을 하게된다면 처리를 하지 않도록 한다.

  • isolation -> 격리성, 고립성

각각의 트랜젝션은 독립적 서로의 연산을 확인 받거나 영향을 줄 수 없다.
영향을 준다면 작업을 취소한다.

  • durability -> 지속성

하나의 성공된 트랜젝션에 대한 로그가 기록되고 영구적으로 남는다.
ex) b 계좌로 5000 이체하고 성공했다면 기록은 영구적으로 남아야한다.
c 계좌로 5000 이체할때 서버 에러가 났다면 이체 실패했기때문에 이체 요청 이전 상태로 회귀

profile
내가 보려고 쓰는 블로그

0개의 댓글