ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)
    DB 2024. 11. 14. 20:51

    1. 낙관적 락(OPtimistic Lock)

    낙관적 락은 충돌이 잘 발생하지 않는다고 가정하고 자원을 제어하는 방식이다. 자원을 사용하는 동안 락을 거는 대신, 작업을 끝내기 직전에 충돌이 발생했는지 검사한다. 낙관적 락은 다음과 같은 과정으로 동작한다.

    • 자원을 사용할 때 락을 걸지 않고, 다른 프로세스도 동시에 접근할 수 있도록 허용한다.
    • 자원 사용이 완료되면, 그 동안 자원이 변경되지 않았는지 확인한다.
    • 만약 다른 프로세스가 자원을 변경한 것이 확인되면, 작업을 취소하고 다시 시도한다.

    이 방식은 자원을 사용하는 동안 락이 걸리지 않기 때문에 성능이 높으며, 충돌이 거의 발생하지 않는 환경에서 효과적이다. 하지만 충돌이 빈번하다면 작업을 반복해야 할 수 있어 비효율적이다.

     

    2. 비관적 락 (Pessimistic Lcok)

    비관적 락은 충돌이 발생할 가능성이 높다고 가정하여 자원에 접근하기 전에 락을 거는 방식이다. 락을 건 프로세스가 작업을 완료하기 전까지 다른 프로세스는 자원에 접근할 수 없다. 비관적 락의 동작 과정은 다음과 같다.

    • 자원에 접근할 때 락을 걸고, 다른 프로세스가 접근하지 못하도록 막는다.
    • 자원 사용이 끝난 후 락을 해제하여 다른 프로세스가 자원에 접근할 수 있도록 한다.

    비관적 락은 충돌이 빈번하게 발생하는 환경에서 유리하며, 충돌이 발생할 가능성이 낮아도 확실하게 자원을 보호할 수 있따. 그러나 항상 락을 거는 동작이 있어 자원 사용에 따라 성능에 부담이 될 수 있따.

     

    • 낙관적 락: 충돌 가능성이 낮은 경우에 유리하며, 충돌이 발생하지 않을 것이라고 가정. 작업 종료시 변경 검증.
    • 비관적 락: 충돌 가능성이 높은 경우에 유리하며, 자원을 사용할 때 락을 걸어 안전하게 보호.

    이 두 방식은 시스템의 특성에 따라 선택되며, 서로 다른 상황에서 적합하게 사용될 수 있다.


    nestjs + typeorm 으로 구현한 간단한 코드를 다음 링크에서 확인 가능

    https://github.com/O-Seonsik/lock-test/tree/master/src/modules/seller

Designed by Tistory.