Transaction

트랜잭션에 대해서 설명해 주세요.

  • 트랜잭션(Transaction)arrow-up-right이란, 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

  • 쉽게 말해 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며, 데이터베이스에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다.

트랜잭션 특징

  • 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.

  • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위이다.

  • 하나의 트랜잭션은 commit 되거나 rollback 된다.

트랜잭션의 4가지 원칙(ACID)에 대해 설명해 주세요.

원자성(Atomicity)

  • 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.(All or Nothing)

  • 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취쇠되어야 한다.

  • 예를 들어 트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다.

일관성(Consistency)

  • 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태를 유지한다.

  • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

독립성 / 격리성(Isolation)

  • 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.

  • 수행중인 트랜잭션은 완전히 종료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

  • 복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고, 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.

지속성(Durability)

  • 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

  • 데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻한다.

  • 데이터베이스는 이를 위해 체크섬, 저널링, 롤백 등의 기능을 제공한다.

  • 체크섬

    • 중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법

  • 저널링

    • 파일 시스템 또는 데이터베이스 시스템에 변경 사항을 반영(commit)하기 전에 로깅하는 것

    • 트랜잭션 등 변경 사항에 대한 로그를 남기는 것

트랜잭션 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 설명해 주세요.

  • 트랜잭션 격리 수준arrow-up-right은 크게 네 개로 나눌 수 있다.

  • READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE

  • 나열한 순서대로 뒤로 갈수록 격리 수준은 높아지며, 처리 성능은 낮아진다.

각각에서 발생할 수 있는 문제

  • READ UNCOMMITTED

    • Dirty Read

    • Non-Repeatable Read

    • Phantom Read

  • READ COMMITTED

    • Non-Repeatable Read

    • Phantom Read

  • REPEATABLE READ

    • Phantom Read

  • SERIALIZABLE

    • 가장 엄격한 격리 수준이지만 처리 성능이 너무 낮아서 잘 쓰이지 않는다.

  • 더티 리드(Dirty Read)

    • 특정 트랜잭션에 의해 데이터가 변경되었지만, 아직 커밋 되지 않은 상황에서 다른 트랜잭션이 해당 변경 사항을 조회할 수 있는 문제

    • 트랜잭션 A가 데이터를 변경하고 커밋하지 않은 시점에 트랜잭션 B가 변경된 데이터를 읽어온 상황에서, 트랜잭션 A가 변경 사항을 롤백 해버린다면 치명적이다.

  • 팬텀 리드(Phantom Read)

    • 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우를 말한다.

  • 반복 불가능한 조회(Non-Repeatable Read)

    • 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 말한다.

    • 팬텀 리드와 다른 점은, 반복 불가능한 조회는 행 값이 달라질 수도 있는데, 팬텀 리드는 다른 행이 선택될 수도 있다.

Last updated