트랜잭션 동시성 제어 방식에는 크게 비관적 동시성 제어(Pessimistic Concurrency Control, PCC)와 낙관적 동시성 제어(Optimistic Concurrency Control, OCC) 두 가지가 있습니다. 각각의 방식은 동시성 문제를 해결하는 접근 방식이 다릅니다.
※ 참고로 금융권에서는 FOR UPDATE 구문을 당연하게 사용합니다. 다른 분야에서는 FOR UPDATE 구문을 꺼리는 경향이 있는데, “데이터의 변경”을 목적으로 SELECT를 하는 경우라면 저는 FOR UPDATE 구문을 당연히 사용해주는 것이 좋다고 봅니다. (대신 동시성을 위해 WAIT 옵션을 주의해서 사용)
비관적 동시성 제어는 다른 트랜잭션이 데이터를 동시에 접근하면 충돌이 발생할 것이라고 가정하고, 미리 락(Lock)을 걸어 다른 트랜잭션의 접근을 차단하는 방식입니다.
✅ 동시성 문제(Dirty Read, Non-Repeatable Read, Phantom Read 등)를 효과적으로 방지
✅ 트랜잭션 충돌이 자주 발생하는 환경에서 안전한 데이터 처리 가능
❌ 락이 오래 유지되면 다른 트랜잭션이 대기하면서 성능 저하 (병목 현상) 발생
❌ **교착 상태(Deadlock)**가 발생할 가능성이 있음
❌ 트랜잭션이 락을 잡고 있을 동안, 다른 트랜잭션은 대기해야 하므로 시스템 자원 낭비
낙관적 동시성 제어는 트랜잭션 간 충돌이 적을 것이라고 가정하고, 별도의 락을 걸지 않음. 대신 트랜잭션 종료 시점에서 충돌이 발생했는지 검사하고, 문제가 발생하면 롤백하는 방식입니다.
✅ 락을 사용하지 않으므로 병목 현상이 적고, 시스템 성능이 향상됨
✅ 읽기 작업이 많은 시스템에서 효율적 (다중 사용자 환경에서 높은 동시성 제공)
✅ 교착 상태(Deadlock)가 발생하지 않음
❌ 충돌이 발생하면 롤백이 많아지고 성능 저하 가능
❌ 트랜잭션이 길어질 경우, 롤백 비용이 커질 수 있음
❌ 충돌이 자주 발생하는 환경에서는 오히려 비관적 동시성 제어보다 비효율적
| 비교 항목 | 비관적 동시성 제어 (PCC) | 낙관적 동시성 제어 (OCC) |
|---|---|---|
| 충돌 가정 | 충돌이 자주 발생할 것으로 예상 | 충돌이 드물다고 가정 |
| 락(Lock) 사용 | 락을 사용하여 데이터 접근 제어 | 락 없이 변경 충돌을 검증 |
| 성능 | 동시성이 낮고, 트랜잭션이 오래 걸릴 수 있음 | 동시성이 높고 빠름 |
| 충돌 발생 시 | 충돌이 발생하지 않도록 예방 | 충돌이 발생하면 롤백 |
| 장점 | 데이터 일관성 보장, 동시성 문제 방지 | 높은 성능, 교착 상태 없음 |
| 단점 | 성능 저하, 교착 상태 발생 가능 | 충돌 발생 시 롤백 비용 증가 |
| 적용 환경 | 충돌이 빈번한 경우 (예: 금융, 재고 관리) | 읽기 위주 시스템, 충돌이 적은 경우 |
비관적 동시성 제어는 충돌을 방지하는 방식, 낙관적 동시성 제어는 충돌을 허용하고 해결하는 방식입니다.
환경과 트랜잭션 패턴을 고려하여 적절한 방식을 선택하는 것이 중요합니다! 🚀
요양원 선택 전 반드시 확인해야 할 체크리스트를 공개합니다. 공식 평가 자료 조회법, 방문 시 확인…
공공기관 채용 비리의 실태와 피해 지원자의 대응법을 정리했습니다. 채용 비리 신고 방법, 공익신고자 보호제도, 취준생…
주식 손실을 세금 절약에 활용하는 합법적 방법을 공개합니다. 해외주식 손익통산, ISA 계좌 활용, 연금계좌 절세까지…
배달이 예상 시간보다 크게 늦으면 취소·환불을 요청할 수 있습니다. 배달앱별 지연 취소 방법과 잘못 배달됐을…
통신비 절약의 핵심은 요금제 최적화입니다. 내 데이터 사용량 확인법, 알뜰폰 전환 비교, 위약금 없이 요금제…