ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 트랜잭션(Transaction)이란?
    데이터베이스 2023. 2. 3. 15:57

    트랜잭션이란?

    데이터베이스 작업의 단위를 의미한다.

    트랜잭션의 특징 (ACID)

    • 원자성(Atomicity)
      • 트랜잭션이 데이터베이스에 모두 반영되거나, 모두 반영되지 않아야 한다. (all or nothing)
      • 예) A계좌에서 B계좌로 돈을 송금하는 작업이 있을 때, A계좌에서 돈이 빠지는 것과 B계좌에 돈이 들어오는 것은 함께 성공하거나 함께 실패해야 함.
    • 일관성(Consistence)
      • 모든 트랜잭션이 종료된 후에는 DB의 제약조건을 모두 지키고 있는 상태가 되어야 한다.
      • 예) 잔액은 음수가 될 수 없다. 라는 조건이 있다면 이를 위반하는 트랜잭션은 모두 중단됨.
    • 독립성(Isolation)
      • 하나의 트랜잭션은 다른 트랜잭션과 독립적으로 작동해야 한다.
      • 성능을 생각해 isolation 정도를 조절해 사용한다.
      • 참고로 MYSQL InnoDB의 기본 값인 REAPEATABLE_READ를 많이 활용한다
      • Isolation 단계
        • SERIALIZABLE
          • 데이터베이스가 한 번에 하나의 트랜잭션만 처리 가능하다.
        • REAPEATABLE_READ
          • 트랜잭션 시작 순간 특정 데이터를 읽는 순간 스냅샷 떠서 트랜잭션 처리 중에는 계속 값을 유지한다. 실제로는 변경되었더라도 이전에 스냅샷을 뜬 데이터를 기준으로 한다.
          • 발생 가능한 문제 : Phantom Read
        • READ_COMMITTED
          • 트랜잭션 수행 중에 다른 트랜잭션이 종료되면 읽을 수 있다. 
          • 발생 가능한 문제 : Phantom Read, Non-Repeatable Read
        • READ_UNCOMMITTED
          • 트랜잭션이 종료되지 않았는데 다른 트랜잭션의 변경사항을 읽을 수 있다. 
          • 발생 가능한 문제 : Phantom Read, Non-Repeatable Read, Dirty Read 
      •  isoltaoin 단계에 따라 발생할 수 있는 문제
        • Non-Repeatable Read : 한 트랜잭션에서 같은 데이터를 여러 번 조회했는데 이전에 조회한 데이터와 다르다.
        • Phantom Read : Non-Reapetable Read의 한 종류로, 한 트랜잭션에서 조회해 온 결과의 행이 새로 생기거나 없어짐.
        • Dirty Read : 특정 트랜잭션에 의해 데이터가 변경되었지만, 아직 커밋되지 않은 상황에서 다른 트랜잭션이 해당 변경 사항을 조회할 수 있다. (A트랜잭션 수행 중에 B트랜잭션이 시작되어 A트랜잭션이 변경한 데이터를 읽어 처리했지만, A트랜 잭션이 롤백되면 유효하지 않은 데이터를 B트랜잭션이 사용하게 됨.)
    • 지속성(Durability)
      • 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다.
Designed by Tistory.