상세 컨텐츠

본문 제목

[매일메일] 낙관적 락과 비관적 락에 대해 설명해 주세요.

본문

 

 

보통 락은 데이터에 동시에 접근하게 되었을 때 일관적이지 못하게 유지되는 것을 방지하기 위해서 하는 정도로 인지하고 있다.

 

낙관적 락(Optimistic Lock)의 경우 데이터 충돌이 적을 것으로 가정하고, 데이터를 읽을 때 락을 설정하지 않고 트랜잭션이 데이터를 수정할 때 충돌이 발생하지 않았는 지 확인하는 방법임.

이 경우 충돌이 발생하면 애플리케이션에서 직접 롤백하거나 재시도 처리 해야 함.

 

비관적 락(Pessimistic Lock)은 데이터 충돌이 많을 것으로 가정하고, 트랜잭션이 시작될 때 공유락 또는 베타락을 설정하여 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 하는 방식임.

x-lock이 걸려있으면 MYSQL에서 지원하는 SELECT문을 통하여 읽을 수 있다.

 

두 방식의 차이는?

 

  • 충돌 가능성
  • 데이터베이스 락 사용 여부
    • 낙관적 락의 경우 사용하지 않고, 비관적 락은 트랜잭션이 시작될 때 락을 설정한다.
  • 성능
    • 충돌이 발생할 경우 낙관적 락은 롤백하거나 재시도 처리를 해야 하기 때문에 성능이 떨어질 수 있음.
    • 비관적 락은 락을 설정하기 때문에 다른 트랜잭션이 대기함, 이로 인해서 성능이 저하될 수 있음.

데이터 충돌이 자주 발생하거나 데이터 무결성이 중요한 경우는 비관적 락을 사용하는 것이 유리

조회 작업이 많고 동시 접근 성능이 중요한 경우는 낙관적 락을 사용하는 것이 유리

 

관련글 더보기