[DB] 트랜잭션

qwe8851·2022년 8월 9일
0

🗄️ DB

목록 보기
1/9

트랜잭션

트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위

여러개의 테이블이 차례로 데이터를 insert한다고 가정했을 때
테이블이 쪼개져 있으므로 테이블간으 ㅣ데이터 정합성을 유지하는 것이 중요함

A, B에는 insert를 했으나 C에 insert를 하기 전 서버가 에러 또는 특정 작업에 의해 정상적으로 처리하지 못하는 상황이 되었다고 한다면,
결과적으로 이 데이터는 믿을 수 없는 데이터가 됨

이를 해결하기 위해 DB는 ALL or Nothing
즉, A,B,C에 정상적으로 insert되거나 아무것도 insert되지 않는다는 것

DB에서는 이 전략을 위해 트랜잭션이라는 단위를 사용함.
트랜잭션 단위는 나누어지지 않는 최소한의 단위라고 정의합니다.

위 로직에서 트랜잭션이 적용되면 오류가 났을 때, A,B에 대한 insert를 ROLLBACK하므로써 Nothing전략을 취하게 됩니다.


트랜잭션의 4가지 특징

1. 원자성 (Atomicity)

트랜잭션은 더이상 분해가 불가능한 업무의 최소단위임.
전부 처리되거나 아예 처리되지 않아야 함(위의 예시처럼)

2. 일관상 (Consistency)

일관된 상태의 DB에서 하나의 트랜잭션이 성공적으로 완료되면 그 DB는 여전히 일관성 있어야 하는 상태이다.
즉, 트랜잭션 실행의 결과로 DB상태가 모순되지 않아야 함

3. 격리성 (Isolation)

트랜잭션이 실행되고 있는 도중에 다른 트랜잭션이 접근할 수 없음.

4. 영속성 (Durability)

트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 DB에 영속적으로 저장되어야 함


트랜잭션의 격리성 (Transaction Isolation)

트랜잭션의 격리성은 '실행중인 트랜잭션의 중간 결과를 다른 트랜잭션이 방해할 수 없다'는 건데,

격리성으로 인해 나타날 수 있는 문제점은 3가지가 있습니다.

Dirty Read

다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는것을 말함

Non-Repeatable Read

한 트랜잭션 내에서 같은 key를 가진 row를 두 번 읽었느넫,
그 사이에 값이 변경되거나 삭제되어 결과가 다르게 나타나는 현상을 말함

Phantom Read

한 트랜잭션 내에서 같은 쿼리를 두 번 수정했는데,
첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상을 말함

profile
FrontEnd Developer with React, TypeScript

0개의 댓글