[DB] 트랜잭션
트랜잭션
정의
데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 의미한다.
여러 쿼리를 하나로 묶는 단위를 말한다.
속성
원자성(Atomicity)
원자성은 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징이다.
All or Nothing
중간에 취소된 경우에 완전히 처음 상태로 돌아가는 것을 보장한다.
Commit, Rollback
-
Commit
: 트랜잭션 단위로 수행되며 변경된 모든 내용이 영구적으로 저장되는 것을 의미한다. -
Rollback
: 트랜젝션으로 처리한 하나의 과정을 일어나기 전의 상태로 돌리는 것을 의미한다.
일관성(Consistency)
허용된 방식으로만 데이터를 변경할 수 있어야 한다.
내가 500원이 있는데 1000원을 전송할 수 있으면 X
격리성(Isolation)
격리성이란 트랜잭션 수행 시에 서로 끼어들지 못하는 정도를 말한다.
격리 수준 (Isolation Level)
READ UNCOMMITED
- 트랜잭션에서 처리중이거나, 아직 Commit 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.
- 가장 낮은 수준의 격리성을 보장하지만 성능이 좋다.
팬텀 리드
,반복 가능하지 않은 조회
,더티 리드
가 발생할 수 있다.- 데이터베이스의 일관성을 유지할 수 없다.
READ_COMMITED
- 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다.
- 커밋이 완료된 데이터에 대해서만 조회가 가능하다.
팬텀 리드
,반복 가능하지 않은 조회
가 발생할 수 있다.- 대부분의 SQL 서버가 기본으로 사용하는 Isolation Level 이다.
REPEATABLE_READ
- 트랜잭션 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장한다.
- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정하지 못하도록 한다.
- 새로운 행을 추가하는 것은 막지 않기 때문에
팬텀 리드
가 발생할 수 있다.
SERIALIZABLE
- 트랜잭션을 순차적으로 진행시키는 것을 말한다.
- 교착상태가 발생할 확률이 높고 가장 성능이 떨어진다.
- 가장 높은 수준의 격리성을 보장한다.
격리성으로 인해 발생할 수 있는 문제
팬텀 리드 (Phantom Read)
한 트랜잭션 내에서 동일한 쿼리를 했을 때, 해당 조회 결과가 다른 경우
반복 가능하지 않은 조회 (Non-Repeatable Read)
한 트랜잭션 내의 같은 행에 대해서 두 번 이상의 조회가 발생할 때, 그 값이 다른 경우
→ 팬텀 리드
의 경우 조회 결과 다른 행이 선택될 수 있는 것이고 반복 가능하지 않은 조회
는 동일한 행을 조회할 때 다른 값으로 조회될 수 있는 것을 말한다.
더티 리드 (Dirty Read)
한 트랜잭션이 실행중일 때 다른 트랜잭션에 의해 값이 수정됐는데 아직 커밋되지 않은 행의 데이터를 읽을 수 있을 때 발생한다.
영구성(Durability)
성공적으로 수행된 트랜잭션은 영원히 반영돼야 한다.
데이터베이스 시스템에 장애가 발생해도 원래 상태로 복구가 가능해야 함을 뜻하며 체크섬, 저널링, 롤백 등의 기능을 제공한다.
참고
-
면접을 위한 CS 전공지식 노트
-
https://velog.io/@yu-jin-song/DB-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80Transaction-Isolation-Level