anomalies of concurrency
Overview
동시성 == 이상현상
데이터베이스 시스템에서 트랜잭션을 통해 데이터를 조작할 때 발생할 수 있는 이슈
데이터의 일관성을 해칠 수 있기 때문에(이상현상) 트랜잭션 격리 수준 [!] 을 통해 제어됨
Anomalies
- Dirty Read:
- 설명: 하나의 트랜잭션이 아직 커밋되지 않은 다른 트랜잭션의 데이터를 읽는것
- 문제점: 데이터를 변경한 트랜잭션이 만약 어떤 이유로 롤백이되는경우, 이름 참조했던 트랜잭션은 무효한 데이터를 기반으로 작업을 수행하게되며 이는 데이터 불일치를 야기
- 예시:
- 트랜잭션 A: 특정 상품의 재고를 변경 100 > 90
- 트랜잭션 B: 계산된 재고를 다른 트랜잭션에서 비즈니스에 사용
- 트랜잭션 A: 비즈니스 수행중 어떤 사유에대해 해당 트랜잭션이 롤백되는 경우 B트랜잭션과의 무결성이 깨짐
- Non-Repeatable Read:
- 설명: 하나의 트랜잭션에서 같은 쿼리를 두번 수행한다고 했을 때, 동일한 쿼리 사이에 다른 트랜잭션이 데이터를 수정하고 커밋했다면 두 쿼리의 결과가 다르게 나타날 수 있음
- 문제점: 트랜잭션 도중에 데이터가 변경되어 일관된 결과를 얻지 못하게됨 (UPDATE)
- 예시:
- 트랜잭션 A: “철수” 라는 회원의 전화번호를 조회
- 트랜잭션 B: “철수” 회원에 대해 전화번호를 변경
- 트랜잭션 A: 다시 해당 회원의 정보를 조회했을 때 첫번째 조회했을 때 취득한 전화번호와 다름
- Phantom Read:
- 설명: 하나의 트랜잭션에서 같은 쿼리를 두번 수행한다고 했을 때, 동일한 쿼리 사이에 다른 트랜잭션에의해 데이터가 추가되거나 삭제되는 현상
- 문제점: 트랜잭션 도중에 데이터가 변경되어 일관된 결과를 얻지 못하게됨 (INSERT, DELETE)
- 예시:
- 트랜잭션 A: 특정 지역에 거주하는 고객의 수 조회
- 트랜잭션 B: 해당 지역에 새로운 고객을 추가하고 커밋
- 트랜잭션 A: 다시 해당 지역에 거주하는 고객수를 조회했을 때 한명 더 많은 고객이 조회됨
Conclusion
데이터베이스 동시성 문제는 여러 트랜잭션이 동시에 실행될 때 데이터의 일관성을 해칠 수 있는 중요한 문제
문제를 이해하고 적절한 트랜잭션 격리 수준을 선택해 안정적이고 효율적인 데이터베이스 시스템을 구축하는데 필수적