트랜잭션(Transaction)
- 데이터 베이스에서 수행되는 작업의 단위이다.
- 여러 연산을 하나의 단위로 묶어 처리하는 것을 의미한다.
- 데이터의 일관성과 무결성을 보장하는 데 중요한 역할을 한다.
트랜잭션의 ACID 속성
Atomicity (원자성)
- All or Noting, 모든 작업이 실행되거나 혹은 모두 실행되지 않아야 한다.
예시) A 계좌에서 B계좌로 송금할 때
"A 계좌 잔액 줄이기" 작업과 "B 계좌 잔액 늘리기" 작업은 함께 성공하거나 함께 실패하여야 한다.
Consostency (일관성)
- 모든 트랜잭션이 종료된 후에는 DB의 제약조건을 모두 지키고 있는 상태가 되어야 한다.
예시) 잔액은 0원 이상이다.
이를 위반하는 트랜잭션은 모두 종단된다.
Isolation (격리성)
- 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야한다. 즉, A 트랜잭션이 하는 일을 B 트랜잭션은 모르게 해야한다.
- 성능과 안정성의 상충 관계에 있다.
- READ_UNCOMMITTED → READ_COMMITTED → REPEATABLE_READ → SERIALIZABLE 순서로 성능은 떨어지고 격리성은 증가한다.
격리성이 낮을 때에는 Dirty Read, Phantom Read, Non-Repeatable Read가 발생될 수 있다.
- 일반적으로 실무에서는 MySQL Inno DB의 기본 값인 " EPEATABLE_READ"를 많이 활용한다.
Isolation Level (격리 수준)
- 데이터베이스에서 트랜잭션이 서로 영향을 미치지 않도록 하는 정도를 말한다.
- 데이터 일관성과 동시성을 조절하는 데 중요한 역할을 한다.
1) READ_UNCOMMITTED (읽기 미승인)
- 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다.
- 가장 높은 동시성을 제공하나, Dirty Read가 발생할 수 있다.
* Dirty Read(더티 리드) : 다른 트랜잭션에 의해 수정되었지만, 아직 커밋되지 않은 상태의 데이터를 읽는 현상을 말한다.
2) READ_COMMITTED (읽기 승인)
- 트랜잭션은 커밋된 데이터만 읽을 수 있다.
- 더티 리드는 방지되나, 동일 트랜잭션 내에서 값이 변경될 수 있어 Non-Repeatable Read가 발생할 수 있다.
* Non-Repeatable Read(비반복 읽기) : 하나의 트랜잭션에서 같은 키를 가진 데이터를 두 번 읽을 때, 그 결과가 다르게 나타나는 현상을 말한다.
3) REPEATABLE_READ (반복 가능한 읽기)
- 트랜잭션이 처름 읽은 데이터를 같은 트랜잭션 내에서 다시 읽으면 항상 동일한 값을 얻을 수 있다.
- 더티 리드와 비반복 읽기는 방지되나, Phantom Read가 발생할 수 있다.
* Phantom Read(팬텀 리드) : 일정 범위의 데이터를 두 번 읽을 때, 첫 번째 쿼리에 없던 유령(Phantom) 데이터가 두 번째 쿼리에서는 나타나는 현상을 말한다.
4) SERIALIZABLE (직렬화 가능)
- 모든 트랜잭션이 완전히 독립적으로 실행된다.
- 다른 트랜잭션이 간섭할 수 없으며, 더티 리드, 비반복 읽기, 팬텀 리드를 모두 방지하지만 성능이 크게 저하될 수 있다.
Durability (지속성)
- 트랜잭션이 성공적으로 완료(commit)되면 그 결과는 영구적으로 저장되어야 한다.
- DB 저장이 실패하더라도 모든 로그를 모두 남겨서 DB에 순차적으로 모두 반영되도록 한다.
- 시스템 오류가 발생해도 저장된 데이터는 유지되어야 한다.
⊙ 참고 문헌
- 양세열, 「백엔드 취업 파트타임 스쿨 5기:Part 07. 스프링 프레임워크- Chapter 07. 사전 준비-06.트랜잭션 개념」, 제로베이스, 2024년 09월 21일, https://zero-base.co.kr/
- ChatGPT, "트랜잭션 개념"에 대한 답변, 2024년 09월 21일, https://chatgpt.com/
- ChatGPT, "격리 수준"에 대한 답변, 2024년 09월 21일, https://chatgpt.com/
- HSRyuuu, [Database] 트랜잭션의 격리성 문제 - Dirty Read / Non-Repeatable Read / Phantom Read, 2024년 03월 19일, https://innovation123.tistory.com/166