////
Search
Duplicate

트랜잭션 - 주현

트랜잭션

데이터 베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위
데이터 베이스에 접근하는 방법은 쿼리, 즉 여러개의 쿼리들을 하나로 묶는 단위

ACID

원자성 (Atomicity)
all or nothing
트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징
트랜잭션 커밋 시 문제 발생하여 롤백하는 경우에 해당
외부 API를 호출하는 경우 롤백이 일어났을 때 어떻게 해야 할 것인지 따로 해결 방법을 마련해야 함
커밋과 롤백
트랜잭션 전파
일관성 (Consistency)
허용된 방식으로만 데이터를 변경해야 하는 것
독립성, 격리성 (Isolation)
트랜잭션 수행 시 서로 끼어들지 못하는 것
여러 개의 격리 수준으로 나누어 보장
READ_UNCOMMITTED
무결성 보장 x, 거대한 양의 데이터를 어림잡아 집계하는 곳에 사용
가장 낮은 격리수준으로 다른 트랜잭션에서 commit되지 않은 상태의 데이터까지 읽어온다. (Dirty read)
READ_COMMITTED
가장 많이 사용되는 격리 수준, PostgreSQL, SQL Server, 오라클에서 기본값으로 사용
커밋 완료된 데이터에 대해서만 조회를 허용
트랜잭션이 접근한 행을 다른 트랜잭션이 수정 가능
UNCOMMITTED와 반대로 commit된 내용만 읽어온다. 하지만 트랜잭션들이 동시에 수행되고 있다면 commit 이후의 데이터가 다른 동시성 문제가 발생할 수 있다. (Nonrepeatable read)
REPEATABLE_READ
하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않음
하나의 트랜잭션에 하나의 스냅샷을 이용하기 때문에 READ_COMMITTED와 같은 문제가 발생하지 않지만 다시 데이터를 조회하는 과정에서 새로 추가되거나 제거된 값을 가져올 수 있다. (Phantom read)
SERIALIZABLE
말 그대로 순차적으로 진행, 여러 트랜잭션이 동시에 같은 행 접근 불가
가장 높은 격리수준으로 READ시에 DML 작업이 불가능하기 때문에 동시성이 낮다. ※ DML작업 : Data Manipulation Language는 데이터베이스에서 데이터를 조작하는데 사용되는 언어를 의미한다. 주로 SELECT, INSERT, UPDATE, DELETE 등의 SQL 명령어를 포함한다.
팬텀 리드
한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
반복 가능하지 않은 조회
한 트랜잭션 내의 같은 행에 두번 이상 조회가 발생했는데, 그 값이 다른 경우
더티 리드
한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 ‘커밋되지 않은’ 행의 데이터를 읽을 수 있을 때 발생
지속성 (Durability)
성공적으로 수행된 트랜잭션은 영원히 반영되어야 하는 것
시스템 장애가 발생해도 원래 상태로 복구하는 회복 기능이 있어야 함
데이터베이스는 이를 위해 체크섬, 저널링, 롤백 등의 기능을 제공
체크섬
중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
저널링
파일 시스템 또는 데이터베이스 시스템에 변경 사항을 반영(commit)하기 전에 로깅하는 것, 트랜잭션 등 변경 사항에 대한 로그를 남기는

지명님이 만드신 트랜잭션