데이터베이스에서 여러 트랜잭션이 경쟁하면서 발생하는 문제 중 흔한 세 가지 문제를 살펴보려한다. 이러한 문제들은 데이터베이스의 일관성을 해치거나 예상치 못한 결과를 초래할 수 있다.
1. Dirty Read (더티 리드)
Dirty Read는 하나의 트랜잭션이 데이터를 수정하고, 다른 트랜잭션이 아직 완료되지 않은 수정된 데이터를 조회하는 상황에서 일어날 수 있는 문제다.
수정 작업이 완료되지 않은 상태에서 다른 트랜잭션이 해당 값을 조회하면, 롤백 발생 시 일관성이 깨질 수 있다.
2. Non-Repeatable Read (반복할 수 없는 읽기)
Non-Repeatable Read는 동일한 값을 두 번 이상 조회할 때, 다른 트랜잭션이 중간에 값을 수정하여 조회 결과가 일관성이 깨지는 상황을 말한다.
트랜잭션이 특정값를 조회하고 있는데, 중간에 다른 트랜잭션이 해당 값을 수정하면, 첫 번째 조회와 두 번째 조회의 결과가 다를 수 있다.
3. Phantom Read (유령 읽기)
Phantom Read는 특정 범위를 조회하는 트랜잭션이 있을 때, 다른 트랜잭션이 범위에 해당하는 새로운 행을 추가하거나 삭제하는 등의 조회 결과가 변경되는 상황을 의미한다.
범위를 조회 중인데, 중간에 다른 트랜잭션이 해당 범위에 새로운 데이터를 추가하면 조회 결과에 예상치 못한 데이터가 나타날 수 있다.
방지하기 위한 접근 방법
이러한 문제를 방지하기 위해선 트랜잭션 격리 수준(Isolation Level)을 설정하고, 적절한 락(Lock)을 사용하여 트랜잭션 간의 충돌을 방지해야한다.격리 수준은 데이터베이스 시스템에 따라 다르며, 트랜잭션의 일관성을 유지하기 위해 적절한 수준을 선택하는 것이 필요하다.
이러한 문제들을 고려하여 트랜잭션을 설계하고 격리 수준을 설정함으로써 데이터베이스의 안정성과 일관성을 보장할 수 있다.
'knowledge > computer science' 카테고리의 다른 글
[네트워크] 쿠키와 세션 (1) | 2024.02.13 |
---|---|
[네트워크] TCP와 UDP (1) | 2024.02.06 |
[OS][Java] 인터럽트(Interrupt) interrupt() 함수 사용하기 (0) | 2024.01.29 |
[OS][Java] 쓰레드(Thread) (1) | 2024.01.23 |
[OS] 프로세스 간 통신 방법(IPC: Inter Process Communication) (0) | 2024.01.16 |