본문 바로가기
기타 CS

(기술 면접 기출) 낙관적 락 VS 비관적 락

by 밝지 2023. 3. 26.
728x90
반응형

낙관적 락(Optimistic Lock)

대부분의 트랜잭션이 충돌이 발생하지 않을 것이라고 가정하는 방법론입니다. 그러니 자원 자체에 락을 걸어서 선점하지 말고, 동시성 문제가 발생하면 그 때 처리하자는 이론입니다. 일단 충돌이 나는 것을 막지 않으며, 충돌이 난 것으로 감지되면 그 때 처리합니다. 일반적으로 version의 상태를 보고 충돌을 확인하며, 충돌이 확인되면 롤백을 진행합니다. (version이 아닌 hashcode나 timestamp를 이용한 확ㅇ니도 가능) 애플리케이션에서 동시성을 처리하는 것입니다. 

[장점]

  • 충돌이 나지 않는 경우 동시 요청에서 처리 성능이 좋습니다.

[단점]

  • 충돌이 빈번한 경우 롤백 처리 비용이 많이 들어 성능이 나빠질 수 있습니다.
  • 롤백 처리 구현이 복잡할 수 있습니다.

 

 

 

비관적 락(Pessimistic Lock)

자원 요청에 따른 동시성문제가 (무조건) 발생할 것이라고 예상하고 락을 걸어버리는 방법론입니다. 하나의 트랜잭션이 자원에 접근하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 합니다. 데이터 베이스에서 다른 트랜잭션은 읽기만 가능한 Shared Lock을 걸거나 다른 트랜잭션에서 읽기, 쓰기 모두 불가능한 Exclusive Lock을 겁니다. 

[장점]

  • 충돌이 자주 발생하는 환경에서 롤백 횟수를 줄일 수 있어 성능면에서 유리합니다. 
  • 데이터 무결성을 보장하는 수준이 매우 높습니다.

[단점]

  • 데이터 자체에 락을 걸어버리므로 읽기가 많이 이루어지는 데이터베이스의 경우 성능 손해가 큽니다.
  • 데드락이 일어날 가능성이 있습니다.

 

 

-> 데이터 충돌 발생이 거의 일어나지 않는 것이 확실한 경우 낙관적 락 방식을, 애매한 경우 비관적 락 방식을 사용하는게 안-전.

728x90
반응형