[DB] ACID

mary·2024년 1월 26일

DB

목록 보기
6/15

Transaction

: 계좌이체를 작업할 때 A가 -20을 하면 B가 20이 들어오는 두 사람의 SQL이 둘 다 정상 처리돼야만 성공하는 단일 작업
(둘 중에 하나만 성공하면 돈 계산에 오류가 생김)

이런식으로 SQL문이 모두 성공을 해야만 의미가 있는 것이 트랜잭션
이론: 논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나눠질 수 없게 만든 것
따라서 transaction SQL문들 중에 일부만 성공해서 DB에 반영되는 일은 발생X

START TRANSACTION;
UPDATE account SET balance = balance - 200000 WHERE id = 'A';
UPDATE account SET balance = balance + 200000 WHERE id = 'B';
COMMIT;

AUTOCOMMIT

: 각각의 SQL문을 자동으로 트랜잭션 처리해주는 개념
SQL문이 성공적으로 실행하면 자동으로 commit하고 실행 중에 문제가 있었으면 자동으로 rollback
MySQL에서는 기본적으로 활성화되어있음

자바에서의 트랜잭션을 어떻게 코딩할까?

트랜잭셔널 어노테이션을 활용하여 ...부분에 SQL문을 적고 구현한다



ACID(Atomicity Consistency Isolation Durability)

: 트랜잭션이 어떤 특성을 가져야하는지에 대한 것

  • Atomicity(원자성)
    : sql문들이 모두 성공하거나 모두 실패해서 아무일도 일어나지 않거나로 동작해야함
    그럼 개발자가 해야될 일은?
    언제 commit과 rollback을 할 건지(=트랜잭션의 단위를 어떻게 정의할 건지)
    왜냐면 트랜잭션 수행 중에 문제가 발생하여 무조건 rollback이 아닌 플랜B로 수행을 할 수도 있기 때문

  • Consistency(일관성)
    : DB의 일관성을 깨트리는 것을 허용하지 않음
    constraints, triffer등에서 DB에 정의된 규칙을 transaction이 위반했다면 rollback해야 됨
    ex) 계좌이체 상황에서 A의 잔고가 80인데 100을 송금하려 시도. 그러나 계좌table은 0보다 작으면 안 된다는 constraint를 적용해놔서 트랜잭션 실행 불가

  • Isolation(격리, 분리)
    : 여러 트랜잭션들이 동시에 실행될 때도 혼자 실행되는 것처럼 동작하게 함
    RDBMS는 여러종류의 isolation level을 제공하며 개발자가 이것을 설정할 수 있다
    isolation level이 높을 수록 다른 트랜잭션으로부터 영향받을 경우가 줄어듦 대신 동시에 실행될 수 있는 동시성이 떨어짐
    ex) A와 B가 동시에 서로에게 송금을 진행한다면

  • Durability(영존성)
    : commit된 트랜잭션은 DB에 영구적으로 저장(HDD, SSD 등에 저장)되므로 DB system에 문제가 생겨도 commit된 트랜잭션은 DB에 남게됨
    기본적으로 DBMS가 보장하는 특성



출처: https://www.youtube.com/watch?v=sLJ8ypeHGlM&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=14&t=11s

profile
내 인생을 망치러 온 나의 구원, 개발

0개의 댓글