본문 바로가기

cs(with 매일메일)

[260206금] 낙관적 락과 비관적 락에 대해 설명해주세요.

데이터베이스 트랜잭션에서 동시성 제어를 위한 주요 기법이다. 

데이터 무결성을 유지하면서 여러 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 해결할때 사용한다. 

 

낙관적 락

- (가정) 데이터 충돌이 적을 것이다

- 읽을 때 락X, 수정할 때 충돌이 발생하지 않았는지 확인

- version같은 별도의 구분 컬럼을 사용해서 데이터가 변경되었는지 확인

- 충돌이 발생하면 데이터베이스가 아닌 애플리케이션이 직접 롤백, 재시도 처리

 

비관적 락

- (가정) 데이터 충돌이 많을 것이다

- 트랜잭션이 시작될 때 공유락 / 배타락을 설정하여 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 하는 방식

- 공유락 : 읽기 O, 쓰기 X

- 배타락 : 읽기 X, 쓰기 X

※ MySQL은 일관된 읽기를 지원하며 배타락이 걸려있어도 단순 SELECT로 읽을 수 있음 주의

 

차이점

1. 충돌 가능성을 서로 다르게 가정했다. 

2. 데이터에비스 락 사용 여부 : 낙관적 락은 락을 사용하지 않음. 

3. 성능 

결론 : 낙관적 락은 충돌이 발생하면 해결하는 방식, 비관적 락은 래오체 충돌을 방지하는 방식