Concurrency Issue (동시성 문제)
여러 스레드 또는 프로세스가 동시에 같은 자원(데이터, 메모리 등)에 접근하면서 발생하는 문제
동시성 문제의 종류
Race Condition (경쟁 상태) 🔥
- 둘 이상의 스레드가 동시에 같은 데이터에 접근했을 때, 어느 스레드가 먼저 처리하느냐에 따라 결과가 달라지는 상황
- 예시
- 재고가 1개인 상품에 두 명의 고객이 동시에 구매를 시도했을 때, 재고가 -1개가 되면서 두 명 모두 구매에 성공
- → Lost Update
Deadlock (교착 상태)
- 서로 자원을 점유한 상태에서 상대방 자원이 사용 가능 상태가 되기를 계속 기다림
- 예시
- 트랜잭션 A는
user 테이블 락을 먼저 잡고, 이후 point 락을 기다림
- 트랜잭션 B는
point 테이블 락을 먼저 잡고, 이후 user 락을 기다림
- → 서로 상대방 락을 무한 대기 → Deadlock 발생
<aside>
🛠
트랜잭션은 데이터베이스의 논리적 작업 단위 (작업 집합)
</aside>
근본적인 원인은?

여러 스레드(또는 트랜잭션)가 공유 자원에 대해 동시에 접근하면서, 그 접근을 제어하지 않기 때문
해결 방법은?

공유 자원에 대한 접근 순서를 강제하여 예측 가능한 결과를 만드는 것!