티스토리 뷰

IT/동시성 제어

낙관적인 락(Optimistic Lock), 비관적인 락(Pessimistic Lock)

Stv 2025. 1. 6. 10:26

목차


    동시성 제어를 하는 방법에는 여러가지가 있는데 Database의 낙관적인 락, 비관적인 락을 알아보고자 한다.

    각각의 개념과 특징, 성능, 언제 사용해야 하는지를 알아보겠다.

     

    • 동시성 제어란?
      • 데이터 무결성을 침해하지 않고 동시에 트랜잭션을 처리할 때 이를 제어하는 방법의 총칭을 뜻함.

     

    • Lock?
      • 동시성 제어의 한 방법으로 데이터에 잠금을 걸어 읽기/변경/삭제 등을 제한하는 수단.

     

    • 낙관적인 락
      1. 충돌이 발생하지 않는다고 가정
      2. Version column  추가(number, hash, timestamp 등)
      3. Database에서 최초에 읽어온 version
      4. update 시 현재 Database의 version과 다르다면 롤백

    낙관적인 락

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

    비관적인 락

     

    낙관적인 락 VS 비관적인 락

    낙관적인 락 비관적인 락
    Lock 사용 X Lock 사용 O
    버저닝을 통한 동시성 제어 Lock을 통한 동시성 제어
    충돌이 자주 일어나지 않을 때 충돌이 자주 일어날 때
    상대적으로 빠른 속도 상대적으로 느린 속도

     

    적재적소에 맞는 방법을 사용하면 되는데 충돌이 많이 일어날때는 비관적인 락이 효율적이고, 충돌이 자주 일어나지 않을 때는 낙관적인 락이 효율적이다.