Blog

웹 서비스 동시성 제어

동시성 제어란?

동시성 제어란 여러 사용자나 시스템이 데이터베이스나 파일 시스템 같은 공유 자원에 동시에 액세스할 때 발생할 수 있는 문제(동시성문제)들을 관리하고 해결하기 위한 기술입니다. 데이터의 일관성과 무결성을 유지하면서, 여러 요청이 서로 간섭하지 않고 동시에 처리될 수 있도록 보장하는 역할을 합니다.

웹 서비스에서의 동시성 문제란?

웹 서비스에서의 동시성 문제여러 사용자가 동시에 웹 서비스의 리소스에 접근하거나 조작할 때 발생하는 충돌 또는 데이터 무결성 문제를 말합니다. 웹 서비스는 대개 많은 사용자가 동시에 같은 애플리케이션을 사용하기 때문에, 이러한 문제는 흔하게 발생할 수 있습니다.

동시성 제어가 필요한 이유

동시성 제어가 필요한 이유는 여러 사용자나 프로세스가 동시에 데이터베이스나 파일 시스템과 같은 공유 자원에 접근할 때 발생할 수 있는 여러 가지 문제들을 예방하고 해결하기 위함입니다.
발생 가능한 여러가지 문제
1.
분실된 갱신 (Lost Update): 두 개 이상의 트랜잭션이 동시에 같은 데이터를 수정할 경우, 한 트랜잭션에 의한 변경 사항이 다른 트랜잭션에 의해 덮어쓰여 분실될 수 있습니다.
2.
모순성 (Inconsistency): 동시에 같은 데이터에 접근하여 갱신하는 작업이 발생하면 데이터가 모순된 상태로 남을 위험이 있습니다.
3.
연쇄 복귀 (Cascading Rollback): 하나의 트랜잭션이 실패하여 롤백할 때, 그 트랜잭션에 의존하는 다른 트랜잭션들도 롤백해야 하는 상황이 발생할 수 있습니다.
4.
비완료 의존성 (Uncommitted Dependency): 아직 커밋되지 않은 데이터를 다른 트랜잭션이 참조하게 되면, 그 트랜잭션이 실패했을 때 문제가 생길 수 있습니다.
5.
데드락 (Deadlock): 두 트랜잭션이 서로가 소유한 자원의 잠금을 기다리는 상태가 되어, 시스템이 정지하는 현상이 발생할 수 있습니다.

동시성 문제를 해결하기 위해서는?