티스토리 뷰
목차
동시성 제어를 하는 방법에는 여러가지가 있는데 Database의 낙관적인 락, 비관적인 락을 알아보고자 한다.
각각의 개념과 특징, 성능, 언제 사용해야 하는지를 알아보겠다.
- 동시성 제어란?
- 데이터 무결성을 침해하지 않고 동시에 트랜잭션을 처리할 때 이를 제어하는 방법의 총칭을 뜻함.
- Lock?
- 동시성 제어의 한 방법으로 데이터에 잠금을 걸어 읽기/변경/삭제 등을 제한하는 수단.
- 낙관적인 락
- 충돌이 발생하지 않는다고 가정
- Version column 추가(number, hash, timestamp 등)
- Database에서 최초에 읽어온 version
- update 시 현재 Database의 version과 다르다면 롤백

- 비관적인 락
- 충돌이 자주 발생할 것이라고 가정
- Table or Row에 Lock 걸고 트랜잭션 작업
- 다른 트랜잭션은 Lock 획득까지 대기
- 해당 작업 완료시 Lock 해제

낙관적인 락 VS 비관적인 락
| 낙관적인 락 | 비관적인 락 |
| Lock 사용 X | Lock 사용 O |
| 버저닝을 통한 동시성 제어 | Lock을 통한 동시성 제어 |
| 충돌이 자주 일어나지 않을 때 | 충돌이 자주 일어날 때 |
| 상대적으로 빠른 속도 | 상대적으로 느린 속도 |
적재적소에 맞는 방법을 사용하면 되는데 충돌이 많이 일어날때는 비관적인 락이 효율적이고, 충돌이 자주 일어나지 않을 때는 낙관적인 락이 효율적이다.