⚙️Backend/DB

[DB] 로킹(Locking) 단위 , 로킹과 병행성, DB 로킹 기법

soonybutter 2025. 2. 26. 13:51
728x90


로킹 단위란?

로킹(locking) 단위란 데이터베이스에서 말그대로 ‘잠그는 단위’를 나타낸다.
로킹 기법이란 하나의 트랜잭션이 데이터를 엑세스하는 동안, 다른 트랜잭션이 해당 데이터 항목을 엑세스 할 수 없도록 하는 병행 제어 기법이다. ‘동시성 제어 기법’ 이라고도 한다.
여기에서 록(lock)은 데이터를 사용하는 단위라고 볼 수 있다.

마치 운영체제의 스레드 스케줄링처럼,
한 번에 하나만 사용하도록 하는 단위를 ‘로킹 단위’라고 한다.

실질적인 예시를 들어보자면,
프로젝트를 진행할 때 팀원과 DB를 관리해야하는 일은 빈번하다.
만약 내가 데이터를 추가하거나 수정하는 동안 다른 팀원도 동시에 같은 데이터를 건들게 될 경우, 오류가 발생하거나 올바르게 데이터를 처리하는 데에 문제가 발생한다. ❗️


이 경우, 로킹기법을 적용하는 데에 있어 이해하기 쉽게 아래의 로킹 단위를 설정해보자.

1) 로킹 단위가 ‘폴더’ 일 때
이 경우, 누군가가 어떤 폴더의 파일을 작업할 때 다른 팀원은 이 폴더를 접근하지 못하도록 한다.

2) 로킹 단위가 ‘프로젝트’ 일 때
이때는 우리 팀이 프로젝트를 작업 중일 때, 다른 팀의 프로젝트 접근을 막는 것을 예로 들 수 있다.





대부분의 DBMS(MySQL, PostgreSQL, Oracle 등)에서는 레코드 단위 락(Row Lock) 을 기본적으로 사용하여 병행성과 성능을 조절한다.

1) 테이블 락
-  테이블 전체를 잠금
-  병행성이 낮지만 단순한 작업에 적합

2) 페이지 락
- 여러 페이지(데이터 블록) 으로 나누어져 있는 경우, 해당 페이지(블록) 만 잠금
- 병행성과 락 오버헤드의 균형

3) 레코드 락 🌟
- 행(Row) 만 잠금
- 병행성이 높지만 락 관리 비용 증가

4) 필드 락
- 특정 컬럼(column) 만 잠금
- 병행성이 가장 높지만 현실적으로 잘 사용되지 않음.



로크 단위와 병행성


: 반비례

로크 단위가 클 수록,
로크의 수는 감소, 제어 기법이 간단해진다.
➡️ 병행성은 감소 , 오버헤드 감소

로크의 단위가 작으면,
로크의 수는 증가, 제어 기법이 복잡해진다.
➡️ 병행성은 증가 , 오버헤드 증가





+
병행성과 로크단위 관계는 정보처리기사 기출 단골 !












728x90