ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB] ACID란? Transaction이란?
    Spring Boot/DB 2023. 6. 28. 11:22

    ACID는 DB 트랜잭션의 안정성 보장을 위해 필요한 성질을 정리한 것.

    원자성, 고립, 일관성, 영구성으로 트랜잭션을 제어하기 위해서 알아야한다. 

     

    0. Transaction은 무엇인가

    • One unit of work에서의 쿼리 집합이다.
    • 즉 서버로 치면 connection을 기준으로 하나의 트랜잭션으로 구분한다.
    • 쿼리 1개로 비즈니스 로직을 수행하지 못한다. 하여 쿼리 집합이 필요하고 집합을 트랜잭션으로 구분한다.
      • ex) 예금 이체 (SELECT, UPDATE, UPDATE 3개가 필요) 
    • 트랜젝션의 Life span
      • Transaction BEGIN
      • Transaction COMMIT
      • Transaction ROLLBACK
    • 트랜젝션의 2가지 성격
      • 변경, 수정을 위한 트랜잭션
      • readonly 트랜잭션
    • 트랜잭션은 모든 요청에 항상 실행된다.

     

    1. Atomicity (원자성)

    • 원자성
      • 원자(原子, atom)는 일상적인 물질을 이루는 가장 작은 단위이다. 일상적인 물질들이 원소로 구성되어 있기 때문에, 이는 화학 반응을 통해 더 쪼갤 수 없는 단위
      • 즉 트랜잭션은 쪼갤 수 없다는 것을 뜻한다.
    • 하나의 트랜잭션 안에 모든 쿼리는 전부 성공해야한다.
    • 하나의 트랜잭션 안에서 단 하나의 쿼리라도 실패하면 ROLLBACK

     

    2. Isolation (격리)

    • Multiple Transaction이 발생 READ vs UPDATE
    • 읽기 트랜잭션에서 다른 트랜잭션의 업데이트 내용을 알아야할까?
    • Read Phenomena (읽기 이상 현상)
    • 다른 트랜잭션의 영향을 받아 읽어온 데이터가 이상한 현상을 뜻한다.
      • Dirty reads
        • ex. 다른 트랜잭션의 commit전 데이터 변경을 읽는 경우
      • Non-repeatable reads
        • 트랜잭션 중간에 다른 트랜잭션의 commit 변경 사항을 읽어서 읽는 데이터가 정합성 보장 안되는 경우
      • Phantom reads
        • 트랜잭션 중간에 다른 트랜잭션에서 insert한 데이터를 읽은 경우
      • Lost updates
        • 업데이트 하는 트랜잭션 중간에 다른 트랜잭션 변경한 것을 읽은 경우
    • Read Phenomena은 트랜잭션 격리로 방지할 수 있다. (단 성능과 Trade off 관계)

    위키피디아

    • Isolation Levels
      • 격리 레벨
        • READ_UNCOMMITTED : No Isolation, Dirty Read 발생, 그러나 가장 빠르다.
        • READ_COMMITTED : 트랜잭션이 다른 트랜잭션이 커밋된 결과만 읽는다. 트랜잭션 중간에도 다른 트랜잭션의 커밋 결과를 읽는다. (데드락 예방에 권장 https://jsonobject.tistory.com/427)
        • REPEATABLE_READ : 트랜잭션 중 읽는 데이터에 변경이 없는 것을 보장. 그러나 Phantom read는 방지하지 못한다. 또한 READ_COMMITED에 비해서 느리다. 
        • SNAPSHOT : 트랜잭션 시작 시점의 데이터 보장. Read Phenomena를 제거 될 것을 보장한다.
        • SERIALIZABLE : 트랜잭션의 동시성 포기, 다중 트랜잭선을 순서대로 실행
    • RDBMS 마다 isolation 구현 방식이 다르다.
    • 격리 방식
      • Pessimistic : Row level Lock, table Lock, page locks to avoid lost updates (비용이 너무 비싸다)
      • Optimistic : No locks, version으로 관리, 그러나 개발시 작업이 많아진다.

     

    3. Consistency

    데이터의 일관성 

    • (DB 데이터의 일관성) Consistency in Data
    • (DB 읽기에 일관성) Consistency in reads

     

    4. Durability

    • 컴퓨터에 장애가 나도 휘발하지 않는 저장소 보장
    • Durability 관련 기술
      • WAL : write ahead log
      • OS Cache
      • Asynchronous snapshot
      • AOF

     

    Reference

    위키피디아, 최범균님 유튜브, 지단 로보트님 블로그 참고

    https://en.wikipedia.org/wiki/Isolation_(database_systems)

    https://www.youtube.com/watch?v=urpF7jwVNWs 

    https://www.youtube.com/watch?v=poyjLx-LOEU

    https://jsonobject.tistory.com/427

    반응형
Designed by Tistory.