Transaction
트랜잭션에 대해서 설명해 주세요.
트랜잭션(Transaction)이란, 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
쉽게 말해 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말하며, 데이터베이스에 접근하는 방법은 쿼리이므로, 즉 여러 개의 쿼리들을 하나로 묶는 단위를 말한다.
트랜잭션 특징
트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위이다.
하나의 트랜잭션은
commit되거나rollback된다.
트랜잭션의 4가지 원칙(ACID)에 대해 설명해 주세요.
원자성(Atomicity)
트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.(
All or Nothing)트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취쇠되어야 한다.
예를 들어 트랜잭션을 커밋했는데, 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다.
일관성(Consistency)
트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태를 유지한다.
시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
독립성 / 격리성(Isolation)
둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.
수행중인 트랜잭션은 완전히 종료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
복수의 병렬 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야 하고, 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야 한다.
지속성(Durability)
성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
데이터베이스에 시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함을 뜻한다.
데이터베이스는 이를 위해 체크섬, 저널링, 롤백 등의 기능을 제공한다.
체크섬
중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
저널링
파일 시스템 또는 데이터베이스 시스템에 변경 사항을 반영(
commit)하기 전에 로깅하는 것트랜잭션 등 변경 사항에 대한 로그를 남기는 것
트랜잭션 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 설명해 주세요.
트랜잭션 격리 수준은 크게 네 개로 나눌 수 있다.
READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ,SERIALIZABLE나열한 순서대로 뒤로 갈수록 격리 수준은 높아지며, 처리 성능은 낮아진다.
각각에서 발생할 수 있는 문제
READ UNCOMMITTEDDirty ReadNon-Repeatable ReadPhantom Read
READ COMMITTEDNon-Repeatable ReadPhantom Read
REPEATABLE READPhantom Read
SERIALIZABLE가장 엄격한 격리 수준이지만 처리 성능이 너무 낮아서 잘 쓰이지 않는다.
더티 리드(Dirty Read)
특정 트랜잭션에 의해 데이터가 변경되었지만, 아직 커밋 되지 않은 상황에서 다른 트랜잭션이 해당 변경 사항을 조회할 수 있는 문제
트랜잭션 A가 데이터를 변경하고 커밋하지 않은 시점에 트랜잭션 B가 변경된 데이터를 읽어온 상황에서, 트랜잭션 A가 변경 사항을 롤백 해버린다면 치명적이다.
팬텀 리드(Phantom Read)
한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우를 말한다.
반복 불가능한 조회(Non-Repeatable Read)
한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우를 말한다.
팬텀 리드와 다른 점은, 반복 불가능한 조회는 행 값이 달라질 수도 있는데, 팬텀 리드는 다른 행이 선택될 수도 있다.
Last updated