데이터베이스 트랜잭션에서 동시성 제어를 위한 주요 기법이다.
데이터 무결성을 유지하면서 여러 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 해결할때 사용한다.
낙관적 락
- (가정) 데이터 충돌이 적을 것이다
- 읽을 때 락X, 수정할 때 충돌이 발생하지 않았는지 확인
- version같은 별도의 구분 컬럼을 사용해서 데이터가 변경되었는지 확인
- 충돌이 발생하면 데이터베이스가 아닌 애플리케이션이 직접 롤백, 재시도 처리
비관적 락
- (가정) 데이터 충돌이 많을 것이다
- 트랜잭션이 시작될 때 공유락 / 배타락을 설정하여 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 하는 방식
- 공유락 : 읽기 O, 쓰기 X
- 배타락 : 읽기 X, 쓰기 X
※ MySQL은 일관된 읽기를 지원하며 배타락이 걸려있어도 단순 SELECT로 읽을 수 있음 주의
차이점
1. 충돌 가능성을 서로 다르게 가정했다.
2. 데이터에비스 락 사용 여부 : 낙관적 락은 락을 사용하지 않음.
3. 성능
결론 : 낙관적 락은 충돌이 발생하면 해결하는 방식, 비관적 락은 래오체 충돌을 방지하는 방식
'cs(with 매일메일)' 카테고리의 다른 글
| [260210화] 멀티 쓰레딩에 대해서 설명해 주세요. (0) | 2026.02.10 |
|---|---|
| [260209월] RDB에서 페이징 쿼리의 필요성을 설명해 주세요. (0) | 2026.02.09 |
| [260205목] 자바 프로그램이 실행되는 흐름을 설명해주세요. (0) | 2026.02.06 |
| [260204수] 가상화에 대해 설명해주세요. (0) | 2026.02.04 |
| [260203화] JCF 자료구조의 초기 용량을 지정하면 좋은 점이 무엇인가요? (0) | 2026.02.03 |