Lock Compatibility Matrix

**락 호환성 매트릭스 (Lock Compatibility Matrix, LCM)**는 트랜잭션이 리소스 (레코드/페이지/테이블) 를 특정 모드로 잠글 때, 다른 트랜잭션의 잠금 요청을 허용·대기·거부로 즉시 판정하는 규칙표다.
기본 모드는 S(공유)·**X(배타)**이며, 다중 그레뉼러리티에서 상·하위 객체를 안전히 함께 잠그기 위해 **IS/IX/SIX(의도 락)**을 사용한다.
일부 DBMS 는 갱신 경합을 줄이려 U(Update) 같은 확장 모드를 둔다.
Lock Compatibility Matrix(LCM) 은 격리 수준 (특히 2PL 기반 RC/RR/Serializable) 구현과 락 에스컬레이션·타임아웃·교착 탐지의 핵심 근거다.
MVCC 환경에서도 쓰기 충돌·직렬가능성 (예: 프레디킷/범위 잠금) 보장을 위해 잠금이 병행 활용된다.

실무에선 ’ 읽기 대부분 ’ 워크로드에 S/IS 허용 폭을 넓히고, 쓰기 집중 구간에 X/IX 경합을 줄이도록 인덱스·범위 (갭/키 - 범위) 잠금 전략, 에스컬레이션 임계치, 트랜잭션 크기·재시도 정책을 조정해 지연과 교착을 최소화한다.

락 호환성으로 여는 고성능 트랜잭션

여러 트랜잭션이 같은 데이터를 동시에 만질 때, 어떤 조합은 함께 가능 (호환) 하고 어떤 조합은 누군가 기다려야 (비호환) 해. 이 규칙표가 락 호환성 매트릭스야.
데이터는 테이블 → 레코드처럼 계층이라서, 아래에서 잠글 계획이면 위 (테이블) 에도 의도 락으로 알려줘야 충돌을 빨리 판단할 수 있어.
범위로 읽거나 쓸 때는 팬텀 (새 레코드가 끼어드는 현상) 을 막으려 범위 자체를 잠그는 방식 (키 - 범위/넥스트키/프레디케이트) 을 써.
이 모든 규칙을 지키면서 시스템은 속도를 최대화하고 (동시성), 잘못된 결과를 막아 (일관성). 제품마다 구현이 조금씩 달라서, 사용하는 DB 의 방식을 알아두면 장애 원인 파악과 튜닝이 쉬워져.

LCM 핵심 개념 일람

개념 (한글·약어)정의왜 중요한가대표 구현/참조
락 호환성 매트릭스 (LCM)락 모드 간 동시 허용 여부를 표로 정의블로킹/대기·경합 예측 및 제어PG/SQL Server 공식 문서의 호환 표
공유 락·배타 락 (S/X)읽기 공유/쓰기 배타읽기 동시성↑/쓰기 충돌 차단모든 RDBMS 공통
의도 락 (IS/IX/SIX)하위 리소스 잠금 의도 표기계층 충돌 O(1) 판정·스캔 성능MGL 위키·교과 참고
널 락 (NL)내부적 " 무 " 락호환성 판단 단순화SQL Server 문서
업데이트 락 (U)S→X 전환 충돌 완화데드락 저감SQL Server 문서
범위 잠금 (Key-Range/넥스트키/프레디케이트)인덱스 범위·조건에 대한 잠금팬텀 방지·직렬성 확보SQL Server 키 - 범위, MySQL 넥스트키, PG SIREAD
락 에스컬레이션미세 락→상위로 승격메모리·메타데이터 부담 완화MGL·제품 가이드
격리 수준 (RC/RR/SR/SI)트랜잭션 간 보장 수준성능↔일관성 트레이드오프강의 노트

LCM 은 즉시 판정 규칙표이고, 의도 락·에스컬레이션은 계층 관리 비용과 충돌 판정 속도를 개선한다. 팬텀 방지는 제품별 범위 기반 잠금 방식이 다르므로 튜닝·장애 분석 시 제품 문서를 반드시 참조해야 한다.

LCM 구성요소 상호작용 지도

출발 → 도착방향/의미무엇을 위해메모 (제품 차이)
격리 수준 → 범위 잠금요구 일관성↑ ⇒ 강한 범위 제어팬텀 방지·직렬성PG=SIREAD, SQLS=Key-Range, MySQL=넥스트키
의도 락 → LCM 판정상위에서 하위 계획 신호계층 충돌 O(1) 판정MGL 규칙 (격자형 호환)
인덱스 설계 → 범위 잠금 범위스캔 패턴 결정경합 최소화InnoDB 는 " 스캔된 인덱스 범위 " 에 잠금
LCM 판정 → 블로킹/대기비호환 시 대기안정성/일관성 확보모든 DBMS 공통
경합 증가 → 에스컬레이션미세 잠금 폭주 완화운영 비용 절감정책·임계치 제품별 상이

요구 일관성 수준이 강할수록 범위 잠금의 강도가 올라가고, 이는 인덱스·쿼리 패턴과 맞물려 경합을 좌우한다. 의도 락은 이 모든 과정을 LCM으로 빠르게 판정하게 만드는 접착제 역할을 한다.

LCM 기반 실무 적용 매핑

상황 (무엇)적용 방법 (어떻게)기대 효과/리스크 (왜)체크포인트/지표
범위 질의 팬텀 발생적절한 인덱싱 + 제품별 범위 잠금 이해 (키 - 범위/넥스트키/SIREAD)직렬성 보장, 삽입 팬텀 제거실행계획 스캔 범위·락 대기 시간
갱신 경합·데드락SQL Server 의 U 락/락 순서 정규화교착 가능성 감소데드락 그래프·대기 타임아웃
대량 배치·ETL에스컬레이션 임계/배치 크기 조정메모리·락 테이블 부담 경감락 수·메타데이터 사용량
DDL 과 DML 충돌테이블 락 모드 충돌 표 확인 후 순서 조정운영 중단·대기 급증 방지PG 테이블 락 모드 충돌 매트릭스 확인
읽기 지연 급증인덱스 재설계로 스캔 범위 축소범위 잠금 면적↓ → 경합↓InnoDB 스캔 - 락 상관 확인

실무에서는 쿼리 패턴×인덱스×제품별 범위 잠금의 조합이 체감 성능을 좌우한다. LCM 을 전제로, 락 순서/정책/임계치를 조정하면 교착·경합을 크게 줄일 수 있다.

기초 조사 및 개념 정립

락 호환성 매트릭스, 제대로 이해하기

락 호환성: 정의·원리·맥락

락 호환성 매트릭스 (정의)
동일 자원에 대해 현재 보유된 락 모드새로 요청되는 락 모드동시 보유 가능성을 나타내는 2 차원 불린 (Boolean) 표다. 원소 M[i][j] 는 " 모드 i 가 보유 중일 때 모드 j 를 부여해도 되는가 " 를 의미한다. 이 표는 DBMS 의 락 부여 결정 규칙으로 동작한다.

운영 원리
DBMS 는 락 요청을 받을 때 자원·모드·보유 현황을 확인하고, 매트릭스를 조회해 허용/비허용을 즉시 판정한다. 허용이면 락을 부여하고, 비허용이면 대기열에 넣거나 에러를 낸다 (데드락 탐지/타임아웃 정책과 결합).

기본 예시 (S/X)
공유 (S) 는 다른 공유와는 호환되지만 배타 (X) 와는 비호환이다. 배타 (X) 는 어느 모드와도 호환되지 않는다. 이 간단한 규칙만으로도 읽기 - 읽기 동시성쓰기 고립을 설명할 수 있다.

보유\요청SX
S
X

S 는 S 와만 호환, X 는 어떤 락과도 비호환이다.

의도 락과 계층
테이블·페이지·행 같은 다단계 자원에서는 **의도 락 (IS/IX/SIX)**을 상위 노드에 부여해 하위 노드에서의 잠금 계획을 알린다. 덕분에 상위 수준에서 광역 충돌 탐색을 빠르게 하고, 락 에스컬레이션 같은 정책과도 자연스럽게 맞물린다. 대표 호환성은 위 표와 같으며, 예컨대 IXS/SIX 와 비호환이다.

보유\요청ISIXSSIXX
IS
IX
S
SIX
X

MVCC 와의 관계
MVCC 시스템 (예: PostgreSQL) 은 다수의 읽기와 쓰기를 행 버전으로 분리해 충돌을 줄이지만, 명시적 테이블 락/DDL 락 등에는 여전히 호환성 매트릭스가 적용된다. 즉, MVCC 는 행 버전 관리, 매트릭스는 락 부여 규칙으로 서로 다른 층위의 메커니즘이다.

제품별 차이 유의
SQL Server, DB2 등은 U/Sch-S/Sch-M/Z 같은 추가 모드를 정의하며, 공식 표가 곧 진실의 원천이다. 개념은 동일하지만 모드·세부 호환성은 제품별 문서로 확인한다.

락 호환성 매트릭스: 배경과 진화

등장 배경
발전 과정
시기핵심 제안/기술왜 등장했나무엇이 개선되었나 (매트릭스 관점)
19762PL + 프레디케이트 락(EGLT)직렬 가능성 보장, 범위 질의의 팬텀 이론적 차단S/X 호환성의 기본 축 정립, 범위 충돌을 개념적으로 포함.
1976의도 락 (IS/IX/SIX) + MGL(Gray)계층 자원에 안전·효율 잠금 필요조상 노드와의 충돌을 매트릭스로 빨리 판정, 대량 읽기 + 부분 쓰기SIX로 최적화.
1980s–1990s키 - 레인지/넥스트 - 키 락프레디케이트 락의 고비용·미구현 문제 해결삽입·삭제 팬텀까지 호환성 표에 반영 (레인지 단위 충돌). InnoDB 의 넥스트 - 키가 대표.
1990s–2000sMVCC/스냅샷 격리읽기 비차단·고성능 읽기읽기 경합 감소. 다만 Serializable 보장범위잠금/SSI가 보완.
2000s–현재엔진별 확장(예: SQL Server 키 - 레인지, Postgres 충돌 매트릭스, Spanner 의 락 기반 RW 트랜잭션)워크로드·분산 요구 대응모드 명칭은 달라도 매트릭스 기반 판단은 동일. 운영·튜닝 지표로 정착.
timeline
    title 락 호환성 매트릭스의 등장과 진화
    1960s-1970s : 다중 사용자 DBMS 보급 · S/X 잠금 확산
    1976 : 2PL 정식화 · 프레디케이트 락 제안(팬텀 이론적 차단)
    1976 : 의도 락(IS/IX/SIX) · MGL 도입(계층 락킹·호환성 확장)
    1980s-1990s : 키-레인지/넥스트-키 락(프레디케이트의 실용화)
    1990s-2000s : MVCC/스냅샷 격리 확산(읽기 비차단) → Serializable엔 범위잠금/SSI 병행
    2000s-Now : 엔진·클라우드별 모드 다양화(이름은 달라도 매트릭스는 본질)
    Note 1976 : 문제점 보완 포인트 — 계층 충돌 탐지·락 수 감소 필요 → 의도 락·SIX로 개선
    Note 1990s : 문제점 보완 포인트 — 프레디케이트 구현 난이도·오버헤드 ↑ → 키-레인지/넥스트-키로 현실화
    Note Now : 운영 포인트 — 모드명 다름·락 에스컬레이션·데드락 관찰 필요(매트릭스 기반 튜닝)

동시성 품질을 높이는 락 매트릭스 전략

락 호환성 매트릭스는 특정 잠금 모드끼리가 함께 잡혀도 되는지, 아니면 서로 막는지를 표로 정리한 것이다.
이 표를 기준으로 읽기·쓰기 작업의 조합을 설계하면 더티리드·팬텀 같은 문제를 피하면서도 불필요한 대기를 줄일 수 있다.
나아가 의도락과 키 - 범위 락을 적절히 사용하면 대용량 환경에서도 예측 가능한 성능과 일관성을 확보할 수 있다.

락 호환성 매트릭스의 목적과 효용
락 매트릭스로 풀어내는 대표 문제들
문제주된 원인매트릭스가 하는 일개선/효과관련 기능/예시
더티 리드갱신 중인 행을 다른 트랜잭션이 읽음S/X/U 호환 규칙으로 읽기 - 쓰기 충돌 차단데이터 일관성 보장S vs X 비호환 규칙
반복 불가능 읽기동일 행을 재조회 시 값 변경읽기 락 유지·호환 제한재조회 일관성 향상Repeatable Read 설계
팬텀 리드범위 조회 후 신규 행 삽입키 - 범위 락 호환 규칙 적용범위 일관성 확보SERIALIZABLE+Key-Range
과도한 대기/타임아웃불필요한 비호환 조합호환 가능한 모드 채택·순서 정립처리량↑, 지연↓IS/IX/SIX 설계
데드락 위험순환 대기자원 획득 순서·모드 단순화발생 확률 감소블로킹 원인 분석 지침

매트릭스는 어떤 조합이 막히는지 명확히 보여줌으로써 더티/팬텀 등 이상 현상을 억제하고, 대기·데드락을 줄여 처리량과 안정성을 함께 끌어올린다.

락 매트릭스의 핵심 목적과 달성 수단
목적설명설계/운영 포인트참고 지표·도구
일관성 보장트랜잭션 격리 요구 충족키 - 범위 락, 모드 호환성 준수팬텀/NRR 발생률, 실패 케이스
성능 최적화불필요한 직렬화 제거의도락·그라뉼러리티 조정평균 대기, 처리량, 타임아웃
예측 가능성규칙 기반 사전 설계자원 획득 순서 표준화변경 전후 충돌 행렬 비교
운영 가시성문제 진단·튜닝DMV/뷰 모니터링sys.dm_tran_locks, Locks 카운터

목적 달성은 호환 규칙 준수, 적절한 락 모드·범위 선택, 모니터링·피드백 루프 구축이 핵심이다.

문제와 목적의 1:1·N:M 연결성
문제 → 목적일관성 보장성능 최적화예측 가능성운영 가시성
더티/반복불가/팬텀높음중간중간낮음
충돌·대기중간높음높음중간
데드락 위험중간중간높음중간
자원 활용 저하낮음높음중간낮음

이상 현상은 주로 일관성과 직결, 대기·데드락·자원 이슈는 성능·예측 가능성과 강하게 연결된다.

LCM 실전 적용 핵심 요건 정리

LCM(락 호환성 매트릭스) 은 " 지금 이 락을 줘도 되는가?” 를 즉시 판정하는 규칙표다.
제대로 쓰려면 먼저 2PL 같은 직렬화 보장 방식을 전제로 하고, 격리 수준에 맞춰 어떤 잠금을 쓰는지 알아야 한다.
예를 들어 READ COMMITTED 이상에서는 쓰기 충돌은 항상 조정되고, SERIALIZABLE 에서는 팬텀을 막기 위해 인덱스 키 - 범위/갭 잠금이 필요하다.
테이블 - 페이지 - 레코드처럼 여러 단계의 락 단위를 쓰면 의도 락 (IS/IX/SIX) 규칙이 들어가 충돌 판단이 더 정교해진다.
내부적으로는 락 테이블과 대기 큐를 다루는 락 관리자가 있고, 이 자료구조를 보호하는 래치가 필요하다.
또한 데드락이 생길 수 있으므로 탐지나 예방, 타임아웃 정책이 준비돼 있어야 한다.

마지막으로 DBMS 마다 구현이 다르니 (예: PostgreSQL 의 호환 표, SQL Server 의 키 - 범위, InnoDB 의 갭/넥스트키, Oracle 의 MVCC) 제품별 문서를 참고해 운영 환경에 맞게 조정한다.

LCM 적용을 위한 필수 전제·요구
기술적 전제 조건
시스템 요구사항
학습/환경 전제
LCM 전제·요구 체크리스트
구분항목왜 필요한가 (근거)구현 포인트/예시
전제2PL 또는 동등 직렬화충돌 직렬가능성, 락 판정의 의미 확보성장/축소 단계 준수, 업그레이드 교착 주의
전제격리 수준 설정RC 이상 충돌 제어, SERIALIZABLE 팬텀 방지 필요Key-range/next-key 활성화
전제다중 그레뉼러리티상·하위 객체 동시 보호IS/IX/SIX 규칙 적용, 에스컬레이션 안전화
시스템락 관리자 래치락 테이블 원자성·일관성내부 동기화 (세마포어/래치) 설계
시스템메모리/큐리소스·범위 잠금 수 증가 대응락 유형별 메모리 캡·모니터링
시스템데드락 처리순환 대기 해소탐지 (그래프)/예방 (wait-die/wound-wait)/타임아웃
환경벤더 차이호환 표·락 모드 상이PostgreSQL/SQL Server/InnoDB/Oracle 문서 준거

LCM 을 실무에 적용하려면 **직렬화 보장 (2PL), 격리 수준별 잠금 규칙, 다중 그레뉼러리티 (의도 락)**가 전제돼야 한다. 운영 측면에선 락 관리자 동기화·메모리·데드락 처리가 필수이며, 제품마다 호환성 표와 잠금 모드가 달라 공식 문서를 기준으로 매개변수를 조정해야 안정적인 동시성과 일관성을 얻는다.

관련 기술과의 차별점

락 호환성 매트릭스 핵심

LCM 핵심 특징: 근거와 차이점
  1. 표 기반 즉시 판정

    • 근거: 각 DBMS 의 호환성 표/규칙 제공.
    • 차별점: 단일 뮤텍스와 달리 S/X/의도락 등 모드 조합을 구체 규칙으로 처리.
  2. 대칭적 호환성

    • 근거: 호환성 행렬은 대칭임 (고전 정리).
    • 차별점: " 요청↔보유 순서 " 와 무관하게 결과 동일—판정 단순화.
  3. MGL/의도 락

    • 근거: IS/IX/SIX 정의와 조합 표, 에스컬레이션 규칙.
    • 차별점: 대규모 트리 구조에서 탐색·판정 비용 최소화.
  4. 범위 기반 잠금 (팬텀 방지)

    • 근거: PostgreSQL SIREAD(차단·데드락 미유발), SQL Server 키 - 범위, MySQL 넥스트키.
    • 차별점: 단순 행잠금 대비 삽입/삭제로 생기는 팬텀까지 차단.
  5. 엔진 선택성 (격리 충족 내 최적화)

    • 근거: 직렬화 격리에서도 잠금 형태는 엔진이 선택.
    • 차별점: " 격리수준=특정잠금 " 고정관념을 깨고 워크로드 적응.
  6. 에스컬레이션

    • 근거: MGL 의 승격 메커니즘.
    • 차별점: 락 수/메모리 제어로 운영 안정성 확보.
  7. MVCC/버저닝·OCC 와의 대비

    • 근거: SQL Server 락·버저닝 가이드.
    • 차별점: 사전 차단 (LCM) vs 사후 검증 (OCC)/버전 격리 (MVCC).
락 호환성 핵심 특징 표
특징설명 (요지)기술적 근거다른 기술 대비 차별점
표 기반 즉시 판정호환성 표로 보유/요청 조합을 상수 시간에 판정SQL Server/PG 문서의 호환 규칙모드 조합 규칙을 정형화 (뮤텍스 대비 정밀)
대칭적 호환성호환성은 대칭 관계Korth 정리 (행렬 대칭)요청/보유 순서 무관 동일판정
MGL/의도 락IS/IX/SIX 로 계층 충돌 빠른 차단MGL 정의·호환성 표대규모 트리 구조에서 탐색·판정 비용↓
범위 기반 잠금팬텀 방지 위한 범위 보호PG SIREAD, SQLS 키 - 범위, MySQL 넥스트키행잠금만으로 못 막는 삽입/삭제 팬텀 차단
엔진 선택성격리 충족 내에서 잠금 전략 선택SQL Server 직렬화 해설" 격리=특정잠금 " 고정관념 교정, 워크로드 적응
에스컬레이션미세 락→상위 락 승격MGL 승격 원리락 수/메모리 제어로 안정성↑
MVCC/OCC 대비비관적 제어의 핵심, 즉시 차단락·버저닝 가이드사전 차단 vs 사후 검증/버전 격리

LCM 은 표 기반 판정과 **계층 제어 (MGL)**를 결합해 빠른 충돌 판정운영 비용 제어를 동시에 달성한다. 팬텀 방지는 제품별 범위락 전략으로 구현되며, 같은 격리수준이라도 엔진 선택성으로 잠금 패턴은 달라질 수 있다.

호환성 매트릭스 읽기 (S/IS/IX/SIX/X) 와 기본 파이프라인 (요청→판정→대기/해제)

락 모드 핵심 요약

의도 락 (IS/IX/SIX) 은 계층 (DB→스키마→테이블→페이지→행) 환경에서 " 아래에서 무슨 락을 잡을지 " 를 상위 노드에 미리 알리는 신호다.

호환성 매트릭스 읽는 법 (3 단계)
  1. **요청 락 (행)**을 행 (가로줄) 에서 찾는다.
  2. **이미 보유 중인 락 (열)**을 열 (세로줄) 에서 찾는다.
  3. 모든 보유 락과 “✔(허용)” 이어야 부여 가능. 하나라도 “✘(충돌)” 이면 대기.
요청\보유ISIXSSIXX
IS
IX
S
SIX
X

빠른 감각

계층적 잠금 (MGL) 에서의 적용 규칙
기본 파이프라인 (요청→판정→대기/해제)
flowchart TD
    A["락 요청(M on R)"] --> B{보유 락 존재?}
    B -- NO --> C["Grant(즉시 부여)"]
    B -- YES --> D[호환성 매트릭스 검사]
    D -- 호환 ✔ --> C
    D -- 충돌 ✘ --> E[대기 큐 등록]
    E --> F{데드락 탐지/예방}
    F -- 사이클 발견 --> G[희생 TX 롤백]
    F -- 미발견 --> H[기존 락 해제 대기]
    C --> I[작업 수행]
    I --> J{업그레이드/에스컬 필요?}
    J -- YES --> D
    J -- NO --> K[커밋/롤백]
    K --> L[보유 락 해제]
    L --> M[대기 큐 재평가·가능 요청 Grant]

설명 포인트

미니 시나리오

핵심 원리 및 이론적 기반

락 호환성의 원칙과 철학

락 호환성 핵심 원칙 일람표
원칙목적왜 필요한가 (요지)근거
최소 제한동시성 최대화불필요한 직렬화 감소, 처리량/응답성 향상PostgreSQL: " 가장 덜 제한적인 모드 " 자동 선택
명시적 호환성결정론적 판정예측 가능·디버깅 용이·표준화SQL Server 문서/서적의 호환성 매트릭스
계층적 일관성자원 계층 합치의도 락으로 상·하위 계획 공유, 광역 충돌 축소MGL, InnoDB 의도 락
프로토콜 일관성직렬가능성 보장매트릭스 +2PL/Strict 2PL 결합 필요2PL/Strict 2PL 문헌/논문
범위 무결성팬텀 방지범위 질의 일관성 확보 (Serializable 등)키 - 범위 락 호환성 표

핵심은 **" 약하게, 명시적으로, 계층적으로, 프로토콜과 함께, 필요 시 범위까지 “**다.
이 다섯 축이 조합되어 높은 동시성과 강한 무결성을 동시에 달성한다.

락 호환성 설계 철학 일람표
설계 철학설명목적왜 필요한가근거
충분히 허용·안전 방지읽기=S, 쓰기=X 로 충돌만 차단읽기 병렬화·쓰기 무결성OLTP 에서 동시성·일관성 균형S/X 개념 정리 문헌
명시적 규칙 기반호환성 표를 단일 규칙으로 사용예측 가능·자동화제품/옵션 차이를 규칙 표로 캡슐화SQL Server 호환성 표
계층·신호 기반의도 락으로 상·하위 계획 공유대규모에서도 성능 유지광역 충돌·탐색 비용 최소화MGL·InnoDB 의도 락

세 철학은 각각 병렬성, 예측 가능성, 확장성을 책임진다.
셋이 맞물릴 때 복잡한 워크로드에서도 일관된 성능·안정성이 나온다.

호환성 매트릭스로 여는 락 동작의 모든 것

기본 동작 원리 및 메커니즘
  1. 락 요청·조회: T 가 R 에 모드 M 을 요청하면 락 관리자는 락 테이블(자원별 보유·대기 현황) 과 자원별 대기 큐를 조회한다.
  2. 호환성 판정: 매트릭스로 현재 보유 락들과의 전원 호환일 때만 부여. S↔S 는 허용, S↔X·X↔X 는 거부가 대표 규칙.
  3. 대기·스케줄링: 불허 시 대기 큐에 넣고, 해제 신호가 오면 재평가→부여. 구현별로 FIFO/우선순위/락 변환 대기 등 세부 정책이 다를 수 있다.
  4. MGL·의도 락: 계층 자원에서는 상위→하위 순서IS/IX/SIX를 먼저 확보해 충돌을 상위에서 빠르게 탐지하고, 필요 시 에스컬레이션을 안전하게 수행한다.
  5. 데드락 처리:
    • 탐지 방식: 예를 들어 Postgres 는 일정 시간 대기 후 waits-for 그래프를 검사해 순환이 있으면 한 트랜잭션을 중단한다. SQL Server 는 Lock Monitor가 **주기 (기본 5 초)**로 탐지한다.
    • 예방 방식: Wait-Die/Wound-Wait처럼 타임스탬프 우선순위 규칙을 적용하면 사이클을 사전에 차단할 수 있다.
  6. 팬텀 대응 (필요 시): 인덱스 범위를 동시 보호해야 하면 InnoDB 처럼 넥스트 - 키 락(레코드 + 앞 갭) 을 사용해 삽입 팬텀까지 막는다.
락 메커니즘 구성요소 한눈에 보기
구성요소역할핵심 판정/정책구현 사례·근거
락 테이블/큐자원별 보유/대기 상태 관리자원별 대기 큐 유지, 해제 시 재평가PostgreSQL Explicit Locking 문서 흐름과 합치
호환성 매트릭스허용/거부 즉시 판정S↔S 허용, S↔X·X↔X 거부 (기본)공식 문서의 충돌 표와 일치
MGL·의도 락 (IS/IX/SIX)계층 자원에서 빠른 충돌 판정·에스컬레이션 안전화상위→하위 순차 취득, SIX로 대량 읽기 + 부분 쓰기 최적화Gray 의 그레뉼러리티 논문 계열
데드락 탐지교착 순환 발생 시 처리Postgres: 지연 후 탐지 / SQL Server: 주기 탐지 (≈5 초)설정·가이드 명시
데드락 예방사이클 자체 회피Wait-Die / Wound-Wait(타임스탬프 우선순위)CMU 15-445 강의 노트
락 에스컬레이션미세 락→상위 락 전환으로 오버헤드 감소조건/임계치 기반 (예: SQL Server)MS 문서·사례 정리 다수
범위 잠금팬텀 방지넥스트 - 키/갭 락으로 인덱스 범위 보호InnoDB 공식 문서
락 요청에서 해제까지의 전체 흐름
flowchart TD
    %% 7.1 보완 반영: 데드락 탐지 타이머, 예방 규칙, 에스컬레이션/변환 경로 포함
    A[트랜잭션 T가 자원 R에 모드 M 요청] --> B{자원 R에 보유 락 존재?}
    B -- NO --> C[Grant: 락 부여]
    B -- YES --> D[호환성 매트릭스 검사]
    D -- 호환 --> C
    D -- 비호환 --> E{정책 선택}
    E -- 대기정책 --> F[자원별 대기 큐 등록]
    E -- 예방정책 --> G{Wait-Die/Wound-Wait}
    G -- 대기 허용 --> F
    G -- 중단/선점 --> H[희생TX Abort·Rollback]
    F --> I[대기]
    I --> J{deadlock_timeout/주기적 탐지}
    J -- 데드락 검출 --> H
    J -- 미검출 --> I
    C --> K[작업 수행]
    K --> L{"락 변환 필요? (업그레이드/SIX 등)"}
    L -- YES --> M[호환성 재검사·변환 시도]
    L -- NO --> N[정상 진행]
    M -- 성공 --> N
    M -- 실패 --> F
    N --> O{에스컬레이션 임계치 초과?}
    O -- YES --> P[상위 락으로 에스컬레이션]
    O -- NO --> Q[계속]
    Q --> R[커밋/롤백 시 해제]
    P --> R
    R --> S[대기 큐 재평가·가능한 요청 부여]

호환성 매트릭스로 설계하는 락 처리

애플리케이션이 데이터를 만지려면 먼저 락을 " 요청 " 하고, 락 관리자는 현재 잡혀 있는 락과의 " 호환성 표 " 를 보고 허용할지 판단한다.
되면 바로 " 부여 “, 안 되면 " 대기 " 로 보낸다.
트랜잭션이 끝나면 락을 " 해제 " 하고, 기다리던 요청을 깨운다.
테이블–행 같은 계층 구조에서는 먼저 상위에 의도락을 걸고 하위에 실제 락을 건다.
직렬화 격리에서는 키 - 범위 규칙을 함께 적용한다.

락 데이터·제어 흐름 한눈에 보기
락 데이터·제어 흐름 단계별 정리
단계입력/상태핵심 로직 (의사결정)산출/다음 상태관련 포인트
요청Txn ID, 객체, 모드, 격리수준상위 노드 의도락 (IS/IX/SIX) 필요 여부 판단의도락 요청 또는 락 테이블 조회다중 그라뉼러리티
호환성 검사현재 보유 락 목록매트릭스·격리수준 적용해 Compatible/Conflict부여 또는 대기 큐 삽입키 - 범위 (직렬화)
결정Compatible락 부여, 소유자 목록 갱신Granted → 작업 실행공유/배타 원칙
결정Conflict대기 큐 삽입, Wait-for 에지 추가Waiting데드락 가능성
관리Waiting데드락 탐지/타임아웃/에스컬레이션Aborted 또는 GrantedDMV/모니터링
해제커밋/롤백 또는 2PL 수축소유 락 해제, 대기자 깨우기Released → 다음 대기자 재평가2PL 수축
호환성 기반 락 처리 플로우
flowchart TD
  A[Txn 시작] --> B[자원 접근 필요]
  B --> C["락 요청 생성<br/>(객체, 모드, 격리, 그라뉼러리티)"]
  C --> D{의도락 필요?}
  D -- 예 --> D1[상위 노드 IS/IX/SIX 선취]
  D -- 아니오 --> E[락 테이블 조회]
  D1 --> E
  E --> F{매트릭스 호환?}
  F -- 예 --> G[Grant: 소유자 목록 갱신]
  G --> H[연산 수행]
  H --> I{커밋/롤백 또는 2PL 수축?}
  I -- 아니오 --> B
  I -- 예 --> J[Release: 보유 락 해제]
  J --> K["대기 큐 깨우기(FIFO/우선순위)"]
  K --> E
  F -- 아니오 --> L[대기 큐 삽입, Wait-for 에지 추가]
  L --> M{데드락/타임아웃?}
  M -- 데드락/만료 --> N[Victim abort 및 롤백]
  N --> J
  M -- 없음 --> L

요청 시 상위 노드 의도락을 통해 하위 잠금 의도를 알리고, 호환성 매트릭스가 즉시 부여 여부를 판정한다. 충돌 시 대기 큐에 넣고 Wait-for 그래프를 갱신해 데드락을 탐지한다. 커밋/롤백에서 락을 해제하고 대기자에게 기회를 준다. 직렬화 격리에서는 키 - 범위 규칙이 F 의 판정에 영향을 준다.

락 상태 전이와 운영 이벤트
stateDiagram-v2
  [*] --> Requested: 락 요청 도착
  Requested --> Granted: 호환성=예
  Requested --> Waiting: 호환성=아니오
  Waiting --> Aborted: 데드락 감지/타임아웃
  Waiting --> Granted: 선행 락 해제
  Granted --> Escalating: 임계치 초과(행→페이지/테이블)
  Escalating --> Granted: 에스컬레이션 성공
  Granted --> Released: 커밋/롤백(2PL 수축)
  Released --> [*]
  Aborted --> [*]

기본 Requested–Granted–Waiting–Released 에 운영 이벤트 (에스컬레이션·타임아웃·데드락) 를 반영했다. 2PL 수축 단계에서 Released 로 전이되며, 에스컬레이션은 대기·경합 비용을 낮추려는 운영적 선택이다.

특성 분석 및 평가

LCM 으로 성능과 정합성을 동시에

LCM 장점·효과 한눈에 보기
장점상세 설명기술 근거적용 상황실무 효과
동시성 최적화호환 조합은 즉시 승인, 불필요 대기 최소화SQL Server/PG 호환성 표읽기 집약·혼합 워크로드QPS·동시 사용자↑
무결성/격리2PL+LCM 으로 Dirty/Lost Update 차단15-445 2PL 노트금융/재고/결제정합성·신뢰성 확보
예측 가능성표 기반 규칙으로 성능/대기 예측 용이락/버저닝 가이드성능 점검·리뷰디버깅·튜닝 시간↓
확장성 (MGL)IS/IX/SIX·에스컬레이션으로 자원 제어InnoDB 의도락·MGL대규모 DML/배치락 수·메모리 관리
팬텀 방지범위 기반 잠금 (키 - 범위/넥스트키/SIREAD)각 제품 문서직렬성 요구 범위 질의논리 오류 제거
자동 충돌/데드락엔진이 그랜트/대기/롤백 자동 판단SQL Server 가이드, 2PL고동시성 트랜잭션운영 비용↓, 안정성↑
엔진 선택성격리 준수 내 잠금 전략 최적화SQL Server 가이드혼합 워크로드성능 - 정합성 균형 최적화

LCM 은 표 기반 즉시 판정을 중심축으로, MGL/의도락·범위락·2PL을 결합해 처리량을 높이면서도 정합성을 지키는 구조다. 제품별 범위락의 차이는 있지만 목표는 동일하며, 엔진은 같은 격리수준 안에서도 전략을 상황에 맞게 선택한다.

락 호환성의 한계와 대응 전략

락 호환성의 본질적 단점 일람표
단점설명원인실무 문제완화/해결 방안대안 기술
경합·대기충돌 시 대기·타임아웃 증가비호환 락 경쟁TPS 저하·장애성 타임아웃인덱스/쿼리 재설계, 파티셔닝, 스냅샷 읽기 병행MVCC, 낙관적 동시성
데드락상호 대기로 진행 정지2PL 락 순서 불일치롤백·장애 알림락 순서 표준화, 짧은 트랜잭션, 탐지/타임아웃낙관적/타임스탬프 기법
복잡성 증가모드·계층·규칙 증가다중 모드/계층 설계설계·테스트 난이도↑표준 모드 사용, 문서화·교육단순화된 버저닝 활용
오버헤드락/대기열/탐지 비용락 관리·모니터링메모리/CPU 부담락 수 절감, 파라미터 튜닝, 모니터링 (pg_locks)RCU/락프리, MVCC
에스컬레이션 부작용광범위 잠금으로 동시성↓임계치·메모리 보호 정책대규모 블로킹임계치 조정, 파티셔닝·슬라이싱파인 그래뉼러리티 유지
굶주림/우선순위 역전특정 트랜잭션 지속 밀림락 큐·우선순위 충돌응답시간 편차·SLO 위반우선순위 상속/큐 정책RT 친화 락프리/RCU

핵심 리스크는 경합·교착·오버헤드·복잡성이며, 에스컬레이션우선순위 역전이 상황을 악화시킨다. 완화는 쿼리/인덱스 재설계·파티셔닝·정책 튜닝·모니터링버저닝·낙관적 기법 병행이 효과적이다.

락 호환성의 구조적 제약 일람표
제약사항설명원인영향해결 방안대안 기술
2PL 의존성직렬가능성 위해 2PL/Strict 2PL 필요규칙표만으로 스케줄 보장 한계설계 제약·지연·교착2PL 준수·락 순서·짧은 트랜잭션SI/MVCC·타임스탬프
범위 무결성팬텀 방지엔 범위 락 필요삽입/삭제로 읽기집합 변동Serializable 미달키 - 범위/넥스트키 적용·인덱스SSI 등 고급 격리
중앙 병목단일 락 관리자 병목·SPOF모든 요청 집결확장성·가용성 저하분산 락 매니저·샤딩ZooKeeper/etcd/Chubby 연계
실시간 부적합대기·역전으로 지연 비결정락 기반 블로킹데드라인 위반우선순위 상속/ceiling락프리/RCU·RT DB 기법
제품별 차이모드/호환성/정책 상이벤더 설계 차이이식성·예측 난이도↑벤더 문서 준수·추상화CQRS/폴리글랏 저장소

직렬가능성 (2PL), 범위 일관성, 중앙 병목, RT 요구, 제품별 차이가 구조적 제약이다. 해결은 프로토콜 준수·범위락·분산화·RT 기법·추상화 조합으로 접근한다.

락 트레이드오프의 전략적 설계

락 선택의 양면성과 의사결정 기준
선택 A장점 (A)단점 (A)선택 B장점 (B)단점 (B)트레이드오프/기준
락 단위행/키 수준동시성↑, 충돌 국소화락 수↑, 메모리/관리비↑, 데드락 위험↑테이블 수준관리 단순, 오버헤드↓동시성↓, 대기 증가트래픽 패턴·메모리 여유·핫스팟 분포.
락 모드S/IS읽기 병행↑쓰기와 충돌, 갱신 지연X/SIX갱신 안전·일관성↑동시성↓, 차단↑읽기: 쓰기 비율·서비스 SLO.
범위 보장없음/최소읽기 성능↑, 차단↓팬텀 가능키 - 레인지 (넥스트 - 키)팬텀 차단, 직렬화 용이스캔 차단·성능↓팬텀 민감도·인덱스 설계.
데드락탐지 위주동시성 유지, 유연탐지 오버헤드, 롤백 발생예방 (Wait-Die/Wound-Wait)데드락 원천 차단보수적 중단·기아 위험 관리 필요충돌 빈도·응답시간 목표.
에스컬레이션사용락 수↓, 메모리 안정동시성 급감 가능비활성/보수적동시성 유지메모리/메타락 부담테이블 크기·락 임계·엔진 정책.
락 하이브리드 패턴과 적용 포인트
하이브리드구성 요소적용 목적 (해결 트레이드오프)장점고려사항
MGL + 적응형 에스컬레이션행/페이지 락 + 임계 도달 시 테이블 락 승격동시성 vs 관리비평시 동시성↑, 피크 시 메모리 안정승격 순간 차단폭↑·임계치 튜닝 필수.
버전화 읽기 + 필요 시 범위락행 버전화 (ROW VERSIONING) + 직렬화 구간에만 레인지/테이블 LOCK읽기 성능 vs 팬텀 방지읽기 비차단·핵심 구간만 강보호격리수준 혼용 시 일관성 규칙 명확화.
예방 (Wait-Die/Wound-Wait) + 탐지 보조타임스탬프 우선순위 + 주기적 waits-for 탐지/타임아웃데드락 제로 vs 불필요 중단사이클 감소·잔여 케이스 신속 해소재시도 폭주/기아 방지 정책 필요.
인덱스 설계 + 넥스트 - 키 최소화선택도 높은 인덱스·조건 최적화로 스캔 폭 축소범위락 비용 vs 팬텀 방지잠금 범위·시간 단축설계 품질에 민감, 실행계획 관찰 필요.

업무 특성으로 판단하는 락 적용성

데이터 정합성이 매우 중요한 시스템은 락 호환성 표를 기준으로 어떤 조합을 동시에 허용할지 설계하면 안전하다. 반대로 초저지연이나 폭주 쓰기처럼 잠금 대기가 치명적인 경우에는 MVCC 스냅샷이나 낙관적 검증 (OCC) 등 잠금을 최소화하는 방법이 더 맞다. 필요에 따라 읽기는 버전닝, 범위 보장은 키 - 범위 락으로 결합한다. ([PostgreSQL][3])

락 호환성 매트릭스 적용 판단 프레임
설계 관점
분석 관점
운영 관점
워크로드별 락 매트릭스 적용 판단
시나리오적합성주요 이유권장 전략
금융/의료 트랜잭션높음강한 일관성·감사 추적 필요의도락 + 키 - 범위, 직렬화 필요한 경로만 강화
ERP/OLTP(혼합 R/W)높음쓰기 충돌·업데이트 경합그라뉼러리티·락 모드 튜닝, 인덱스/쿼리 동시 설계
조회 위주 분석중간읽기 다수·쓰기 적음MVCC 스냅샷 기본, 필요한 부분만 잠금
초저지연 거래 (HFT)낮음락 대기 자체가 SLA 위반OCC·락프리·분할정복 (파티션)
IoT 대용량 쓰기낮음삽입 폭주·락 경합파티셔닝·비동기 적재·OCC/배치 병합
캐시·최종 일관성 허용낮음일시적 불일치 허용OCC/버전닝·TTL·리트라이/멱등 설계

강한 일관성이 가치인 곳은 락 호환성 중심, 초저지연·폭주 쓰기는 버전닝·낙관적 검증·파티셔닝으로 잠금 의존도를 낮추는 쪽이 유리하다.

구현 방법 및 분류

목표지향 LCM 구현 전략 로드맵

호환성 판정은 크게 **” 표로 즉시 보기 (매트릭스/비트)"**와 " 규칙으로 계산 (부분순서/함수)" 두 부류다.
표·비트는 빠르고 단순하며, 모드가 변하지 않는 일반 RDBMS 에 적합하다.
규칙·함수는 새 모드/새 리소스가 늘어나는 시스템에서 확장성이 강하다.
어떤 방식을 택하든 실무에선 의도락 (IS/IX/SIX), U(Update), 키 - 범위/넥스트키 같은 벤더 확장 모드/범위 잠금도 함께 반영해야 실제 쿼리 현상을 정확히 판정할 수 있다.
근거는 각 DBMS 의 공식 문서 (락 모드·호환 표, U/키 - 범위/넥스트키 설명) 에서 확인된다.

LCM 구현 4 대 방식
매트릭스 테이블 방식
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# S=0, X=1, IS=2, IX=3, SIX=4
compat = [
# S  X  IS IX SIX
 [1, 0, 1, 0, 0],  # S 요청
 [0, 0, 0, 0, 0],  # X
 [1, 0, 1, 1, 1],  # IS
 [0, 0, 1, 1, 0],  # IX
 [0, 0, 1, 0, 0],  # SIX
]
def compatible(req, hold): return bool(compat[req][hold])
비트마스크 방식
1
2
3
4
5
6
7
8
9
S,X,IS,IX,SIX = range(5)
mask = {
  S:   0b10101,   # S와 IS,SIX 호환 등 가정 예시
  X:   0b00000,
  IS:  0b11101,
  IX:  0b11010,
  SIX: 0b10100,
}
def compatible(req, hold): return (mask[req] >> hold) & 1
계층적 규칙 (부분순서) 방식
1
2
3
4
5
strength = {"IS":1,"S":2,"IX":3,"SIX":4,"X":5}
def conflicts(m1,m2):
    # 규칙 예: X와는 모두 충돌, IX는 S와 충돌 등 규칙 테이블/람다로 캡슐화
    
def isCompatible(m1,m2): return not conflicts(m1,m2)
함수형 매핑 방식
1
2
3
4
5
// 간단 예시: U는 S와만 호환, 나머지와 충돌(SSMS 문서 패턴)
const comp = (a,b) => {
  const P = new Set([`${'S'}-${'S'}`, `S-U`, `U-S`]);
  return P.has(`${a}-${b}`);
};
실무 확장 (판정 대상에 반영)
LCM 구현 4 대 방식 요약표
방식정의특징목적사용 상황간단 예시근거
매트릭스모드×모드 2 차원 표O(1) 룩업, 단순런타임 최소화모드 고정형 RDBMScompat[req][hold]PG/SS 표 기반 판정
비트마스크모드별 호환 집합 비트셋메모리/분기 최소고성능/임베디드인메모리·캐시형mask[req]>>hold &1PG fast-path 설계
부분순서강도·의도 규칙 계산동적 확장 용이새 모드 대응플러그블 스토리지conflicts(strength)의도락 이론
함수형(m1,m2)→bool 함수테스트 친화가독성/검증성함수형/정적분석패턴매칭 스위치모드 정의 근거
목표별 LCM 구현 분류
성능 최우선
기법장점주의점적용 팁
매트릭스단순/O(1)모드 추가 시 재배포표 생성 코드 자동화
비트마스크극저비용가독성↓생성 스크립트·테스트 벡터 병행
확장성/표현력
기법장점주의점적용 팁
부분순서새 모드/자원에 유연런타임 비용↑규칙→캐시된 결정표로 컴파일
검증/가독성
기법장점주의점적용 팁
함수형테스트 용이속도 최적화 필요생성 시 테이블로 다운컴파일
LCM 구현 선택 매트릭스
카테고리기법성능확장성가독/검증주 용도근거
성능 최우선매트릭스★★★★★★★☆★★★★범용 RDBMSPG/SS 호환 표
성능 최우선비트마스크★★★★★★★☆★★★인메모리/임베디드PG fast-path 힌트
확장성/표현력부분순서★★★★★★★★★★★플러그블 스토리지의도락 이론
검증/가독성함수형★★★★★★★★★★★★테스트·도메인 주도모드 정의 명시

LCM 락 유형

LCM 락 유형 분류 표준안
분류 축유형정의/핵심대표 모드·예시근거
의미/목적 (Access semantics)공유/배타읽기 공유 (S), 쓰기 배타 (X)FOR SHARE/FOR UPDATEPG Explicit Locking, MySQL Locking Reads
업데이트 (제품별)S→X 전환 교착 완화 (U)SQL Server USQL Server Locking Guide
그라뉼러리티/의도 (MGL)의도 락하위 잠금 의도 신호 (IS/IX/SIX)InnoDB IS/IX, MGL 규칙InnoDB Locking, CMU 노트
범위/논리 (Phantom control)범위 락 (물리)인덱스 키/갭 구간 보호SQL Server Key-Range, InnoDB Next-KeyMS Guide, MySQL Next-Key
프레디케이트 (논리)조건 (프레디케이트) 기반 보호PostgreSQL SIREADPG Isolation(Serializable)
리소스 레벨 (Resource)테이블/페이지/행/키범위보호 단위의 층위LOCK TABLE / 인덱스 레코드/갭PG LOCK, MySQL InnoDB 설명
관리 특성 (운용)에스컬레이션/자동 판정미세락→상위 승격/그랜트·대기엔진 자동화MGL·제품 가이드 종합
LCM 실무형 분류 기준 4 축
의미/목적 축
모드의도/효과호환 포인트대표 명령
S읽기 공유S↔S 가능, S↔X 불가FOR SHARE(PG/MySQL)
X쓰기 독점X↔* 대부분 불가FOR UPDATE(PG/MySQL)
U(제품별)S→X 전환 교착 완화U 는 S 와 제한 호환SQL Server U

요약: 읽기·쓰기의 의미적 목적이 LCM 의 1 차 축이다. U 는 갱신 경합에서 교착 위험을 줄이는 제품 특수 완충 모드다.

그라뉼러리티/의도 축
모드의미호환 핵심사용 맥락
IS하위에 S 예정X 와 충돌대량 읽기 트리 탐색
IX하위에 X 예정S/X 와 폭넓게 충돌대량 갱신 트리 탐색
SIX상위 S + 하위 X 예정IX/IS 일부 호환혼합 워크로드

요약: 의도 락은 계층 구조에서 충돌 사전 필터로 작동해 대규모 동시성에서 성능·안정성을 동시에 보장한다.

범위/논리 (팬텀 방지) 축
유형보호 단위특성대표
Key-Range인덱스 키 구간겹치는 범위끼리 호환 표로 판정SQL Server ([Microsoft Learn][3])
Next-Key레코드 + 앞 갭스캔된 인덱스 범위를 넓게 보호MySQL InnoDB ([MySQL 개발자 존][5])
Predicate논리 조건차단·데드락 미유발, 직렬성 검증용PostgreSQL SIREAD ([PostgreSQL][6])

요약: 구현은 달라도 목표는 직렬성·팬텀 제거다. 워크로드·인덱스에 따라 잠금 면적이 달라져 성능이 변한다.

리소스 레벨 축
레벨장점유의점예시
테이블관리 용이동시성 저하LOCK TABLE … MODE(PG)
행/키동시성↑잠금 수↑FOR UPDATE/SHARE
키 범위팬텀 방지잠금 면적↑Next-Key/Key-Range ([MySQL 개발자 존][5])

요약: 레벨 선택은 성능·정합성의 트레이드오프. 설계·튜닝 시 인덱스/스캔 패턴과 함께 본다.

LCM 락 유형 통합 매트릭스
유형핵심 설명대표 모드/예시실무 포인트
의미/목적공유/배타/업데이트읽기 공유 (S), 쓰기 배타 (X), 갱신 교착 완충 (U)FOR SHARE/FOR UPDATE/U읽기/쓰기 경합 모델링
그라뉼러리티/의도IS/IX/SIX하위 잠금 의도 신호로 상수 시간 판정InnoDB IS/IX, MGL대규모 동시성·에스컬레이션
범위/논리Key-Range/Next-Key/Predicate팬텀 방지 (물리/논리)SQLS Key-Range / MySQL Next-Key / PG SIREAD직렬성·정합성 보장
리소스 레벨테이블/페이지/행/키범위보호 단위 계층LOCK TABLE, 행/키·범위락성능↔정합성 균형

락 생태계 전개도: 엔진·ORM·운영·분산

락 생태계: 관측·제어·ORM·분산 총정리
RDBMS 내장 (관측·제어)
애플리케이션/ORM 계층
운영·모니터링 도구
분산 락/조정 (보완 레이어)
락 도구 분류: 관측·제어·운영·분산
관측 (Observability)
도구핵심 기능강점약점
pg_locks/pg_stat_activity현재 락/세션 상태 조회바로 SQL 로 진단상관분석 쿼리 필요
Performance Schema데이터락/대기 추적세밀 지표설정·학습 필요
SQL Server DMV+XE잠금/대기·데드락 이벤트저오버헤드, Profiler 대체XE 학습 곡선
제어 (Control)
프레임워크정확한 기능 (예)강점약점
Hibernate/JPA@Lock, LockMode, 버전필드선언적/낙관·비관 병행DB 차이 반영 필요
Spring@Transactional(isolation=…)서비스계 일관성엔진 의존
EF Core낙관적 컨커런시 토큰충돌 감지·재시도 용이비관잠금 제약
SQLAlchemy.with_for_update()SQL 직관성조인시 범위 주의
Django.select_for_update()행 잠금 간편트랜잭션 관리 필요
운영 (Operations)
도구기능강점약점
Extended Events락/대기/데드락 수집·분석저오버헤드·정밀설정 난이도
sp_WhoIsActive블로킹 체인 실시간 파악즉시 대응설치 필요
pganalyze 등락 트리 시각화·알림편의성·대시보드비용/에이전트
분산 (Distributed Coordination)
도구기능강점약점
ZooKeeper/Curator분산 락 레시피표준성·성숙운영 복잡
etcd concurrency분산 Mutex/선거간명한 API리스 관리 필요
RedissonRLock/공정락 등통합 쉬움클러스터 고려
락 도구·프레임워크 통합 일람표
카테고리대표 도구/프레임워크정확한 기능/용도강점약점
관측Postgres pg_locks/pg_stat_activity보유/대기 락·세션 상태 교차 분석내장·즉시성상관 쿼리 필요
MySQL Performance Schemadata_locks/data_lock_waits 로 충돌 가시화세밀 지표학습/설정
SQL Server DMV+XE잠금/대기/데드락 이벤트저오버헤드설정 난이도
제어Hibernate/JPA@Lock/LockMode/낙관·비관선언적 제어DB 차이
Spring@Transactional 격리·전파서비스계 일관성엔진 의존
EF Core낙관적 컨커런시충돌 처리 용이비관잠금 제약
SQLAlchemy/Djangowith_for_update/select_for_updateSQL 직관성범위 주의
운영Extended Events차단/데드락 수집·분석 (Profiler 대체)공식 대체학습 곡선
sp_WhoIsActive블로킹 체인 파악신속 대응배포 필요
분산ZooKeeper/Curator분산 락/선거 레시피성숙운영 복잡
etcd concurrency분산 Mutex/선거간결리스 관리
RedissonRLock/공정락 등통합 용이네트워크 변수

엔진 내장 관측→코드 수준 제어→운영 자동화→분산 조정으로 이어지는 계층을 맞물리면, 락 호환성 매트릭스의 효과 (안전한 충돌 회피) 를 성능/확장성과 함께 가져갈 수 있다.

실무 적용 및 사례

실습 예제 및 코드 구현

실습 예제: Python 으로 S/X Lock 호환성 매트릭스 구현
목적
사전 요구사항
단계별 구현
  1. 1 단계: 락 모드 및 호환성 매트릭스 설계

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    # 락 모드 정의 및 매트릭스 모델 (주석 포함)
    LOCK_MODES = ['S', 'X']
    COMPATIBILITY_MATRIX = {
        ('S', 'S'): True,   # 공유끼리 허용
        ('S', 'X'): False,  # S와 X 충돌
        ('X', 'S'): False,  # X와 S 충돌
        ('X', 'X'): False,  # 배타적끼리 충돌
    }
    
    def check_compatibility(current_locks, requested_lock):
        """현재 락들 중 요청 락과 충돌 여부 검사 함수"""
        for lock in current_locks:
            if not COMPATIBILITY_MATRIX.get((lock, requested_lock), False):
                return False
        return True
    
  2. 2 단계: 트랜잭션 시뮬레이션

    1
    2
    3
    4
    5
    6
    7
    
    # 트랜잭션별 데이터 락 요청 및 호환성 체크 (주석 포함)
    current_locks = ['S']
    requested_lock = 'X'
    if check_compatibility(current_locks, requested_lock):
        print("호환됨: 락 획득 가능")
    else:
        print("충돌: 락 획득 불가")
    
실행 결과

호환됨: S 락끼리는 동시 가능
충돌: S/X 또는 X/X 는 동시 불가

추가 실험
실습 예제: " 동일 레코드 갱신 충돌 시 호환성 관찰 (PSQL + Python)”
목적
사전 요구사항
단계별 구현
  1. 세션 A: 트랜잭션 시작 후 SELECT … FOR UPDATE 로 레코드 잠금.

  2. 세션 B: 같은 레코드에 UPDATE 시도 → 대기/타임아웃.

  3. SKIP LOCKED 로 회피 패턴 실습.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    -- 준비
    CREATE TABLE demo(id int primary key, v int);
    INSERT INTO demo VALUES (1, 100) ON CONFLICT DO NOTHING;
    
    -- 세션 A
    BEGIN;
    SELECT * FROM demo WHERE id=1 FOR UPDATE; -- X와 충돌하는 강한 잠금
    -- 커밋 지연
    
    -- 세션 B (동시에)
    BEGIN;
    UPDATE demo SET v = v + 1 WHERE id=1; -- 세션 A가 해제할 때까지 대기
    -- 타임아웃 설정 가능: SET lock_timeout = '3s';
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    # Python 동시성 관찰(의사코드; psycopg 사용)
    import psycopg
    import threading, time
    
    DSN = "postgresql://user:pw@localhost:5432/mydb"
    
    def session_a():
        with psycopg.connect(DSN) as conn:
            conn.execute("BEGIN")
            conn.execute("SELECT * FROM demo WHERE id=1 FOR UPDATE")
            time.sleep(5)  # 잠금 유지
            conn.execute("COMMIT")
    
    def session_b():
        with psycopg.connect(DSN, autocommit=False) as conn:
            conn.execute("SET lock_timeout = '3000ms'")
            try:
                conn.execute("UPDATE demo SET v=v+1 WHERE id=1")
                conn.execute("COMMIT")
            except Exception as e:
                print("B timeout/block:", e)
                conn.execute("ROLLBACK")
    
    threads = [threading.Thread(target=session_a), threading.Thread(target=session_b)]
    [t.start() for t in threads]
    [t.join() for t in threads]
    
실행 결과
추가 실험

5.2 실제 도입 사례 분석

실제 도입 사례: PostgreSQL 의 다중 그래뉼래리티 락킹
배경 및 도입 이유

PostgreSQL 은 테이블과 행 수준에서 동시에 락킹을 지원해야 하는 필요성에 직면했다.
단순한 테이블 레벨 락만으로는 동시성이 떨어지고, 행 레벨 락만으로는 대량 작업 시 오버헤드가 컸습니다.
이를 해결하기 위해 의도 락을 포함한 확장된 호환성 매트릭스를 도입했다.

구현 아키텍처
graph TB
    subgraph "PostgreSQL Lock Architecture"
        A[Transaction Manager] --> B[Lock Manager]
        B --> C[Lock Table]
        B --> D[Wait Queue]
        C --> E[Table Level Locks]
        C --> F[Row Level Locks]
        E --> G[ACCESS SHARE]
        E --> H[ROW SHARE]
        E --> I[ROW EXCLUSIVE]
        E --> J[SHARE UPDATE EXCLUSIVE]
        E --> K[SHARE]
        E --> L[SHARE ROW EXCLUSIVE]
        E --> M[EXCLUSIVE]
        E --> N[ACCESS EXCLUSIVE]
    end

PostgreSQL 은 8 가지 테이블 레벨 락 모드와 이들 간의 복잡한 호환성 매트릭스를 구현했다.
각 락 모드는 특정 SQL 명령에 최적화되어 있다.

핵심 구현 코드
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* PostgreSQL의 락 호환성 매트릭스 (간소화 버전) */
static const bool LockConflicts[MAX_LOCKMODES][MAX_LOCKMODES] = {
    /* AccessShareLock */
    {false, false, false, false, false, false, false, true},
    /* RowShareLock */  
    {false, false, false, false, false, false, true, true},
    /* RowExclusiveLock */
    {false, false, false, false, true, true, true, true},
    /* ShareUpdateExclusiveLock */
    {false, false, false, true, true, true, true, true},
    /* ShareLock */
    {false, false, true, true, false, true, true, true},
    /* ShareRowExclusiveLock */
    {false, false, true, true, true, true, true, true},
    /* ExclusiveLock */
    {false, true, true, true, true, true, true, true},
    /* AccessExclusiveLock */
    {true, true, true, true, true, true, true, true}
};

/* 락 호환성 확인 함수 */
bool LockModeCompatible(LOCKMODE lockmode1, LOCKMODE lockmode2) {
    return !LockConflicts[lockmode1][lockmode2];
}
성과 및 결과
교훈 및 시사점

PostgreSQL 사례에서 얻을 수 있는 핵심 교훈은 단순함과 완전성의 균형.
8 개의 락 모드는 복잡해 보이지만, 각각이 특정 SQL 명령에 최적화되어 있어 개발자가 명령별로 예상할 수 있는 락 동작을 제공한다.
또한 VIEW 를 통한 락 상태 모니터링 기능은 실무에서 매우 유용한 디버깅 도구가 되고 있다.

실제 도입 사례: PostgreSQL 대형 트랜잭션 DB
배경 및 도입 이유
구현 아키텍처
graph TB
    App[Application Server] --> PG[PostgreSQL DBMS]
    PG --> LockMgr[Lock Manager]
    LockMgr --> Table[Table/Row]
핵심 구현 코드
1
2
3
4
5
# 실무에서는 Transaction Manager가 SQL 레벨에서 락 제어함
# (실제 코드로는 python ORM/SQL에서 read/write 전에 락 확인)
def acquire_lock(db, table, lock_type, txn):
    # db 내 table의 lock manager가 현재 락 타입 확인 후 허용/거부
    pass
성과 및 결과
교훈 및 시사점

락 매트릭스 연계·운영 아키텍처

락 매트릭스는 “같이 잡아도 되는가?” 를 표로 빠르게 판단한다. 하지만 실서비스에서는 이 판단이 MVCC·범위락·분산 합의·메시징·복구·관측함께 설계되어야 전체 일관성과 처리량이 나온다.

락 매트릭스 연계 아키텍처 지도
통합 축왜 (문제/목표)무엇 (핵심 개념)어떻게 (연계 방식)획득 가치
DB 내부 (MVCC·범위락·MGL)읽기 비차단·팬텀 방지·계층 충돌 최소화MVCC, 넥스트 - 키/갭락, IS/IX/SIX읽기는 MVCC, 직렬 필요 구간만 레인지락 활성·MGL 로 상→하 의도 잠금동시성↑, 직렬성 요구 구간만 비용 지불.
분산/합의·복제노드/리전 분산에서 동일 락·커밋 보장2PC, Paxos/Raft, 분산 락 (세션/리스)트랜잭션은 2PC, 메타데이터/리더선정· coarse lock 은 ZooKeeper/etcd일관성·가용성 균형, 리더 기반 직렬화.
메시징/이벤트DB 변경과 이벤트 발행의 원자성Outbox, CDC, Idempotent/Transactional ProducerDB 트랜잭션에 outbox 쓰기→CDC(Debezium)→Kafka 전송; 프로듀서 EOS/컨슈머 Idempotent이중쓰기 불일치 제거·재시도 안전.
로그/복구/CDC충돌/장애 시 재실행과 데이터 복구WAL/ARIES, Logical Decoding변경을 WAL 에 선기록→복구·CDC 로 외부 파이프 전달내구성·포렌식·아웃박스에 근거 제공.
관측/모니터링락 대기·데드락 가시화·튜닝pg_locks, Performance Schema, Extended Events, OTel시스템 뷰/이벤트로 락·대기·데드락 수집, OTel 로 지표/트레이싱원인 추적·임계치/에스컬레이션 튜닝 근거.
캐시 연계읽기 경합·차단 완화Cache-Aside캐시 미스시 DB 조회·쓰기, 적절 만료/무효화읽기 부하 우회·락 경합 감소.
락 연계 기술 6 대 카테고리
DB 내부 일관성 보강
요소적용 포인트주의
MVCC읽기 경합 완화SI 는 비직렬 사례 존재→SSI/범위락 병행
넥스트 - 키팬텀 방지스캔 범위가 넓으면 차단↑
MGL계층 충돌 최소에스컬레이션 임계 튜닝
분산 합의·복제/리더십·분산 락
요소역할포인트
2PC분산 커밋가용성 - 일관성 트레이드오프
ZooKeeper/etcd 락리더·분산 락세션/리스 만료로 안전 해제
TrueTime+ 합의외부일관성/직렬화잠금 비용 줄인 강일관성 읽기
메시징 연계 (Outbox·Kafka EOS·멱등성)
요소효과포인트
Outbox+CDC이중쓰기 분리·원자성DB 커밋=이벤트 발행 근거
Kafka EOS다파티션 원자 쓰기Tx Producer/Idempotent
멱등성 키 (API)재시도 안전요청 재실행=동일 결과
로그·복구·CDC 연동
요소역할포인트
WAL/ARIES내구성·복구로그 우선·재실행
Logical DecodingCDC 스트림슬롯·플러그인 포맷
관측/모니터링 (시스템 뷰·이벤트·OTel)
요소무엇을 봄활용
pg_locks보유/대기 락핫스팟·대기 그래프 파악
data_locks/_waits보유↔대기 매핑차단 체인 분석
Extended Events데드락 그래프원인 SQL·리소스 특정
OTel SemConv지연/에러 지표서비스 전반 트레이싱
캐시 연계 (Cache-Aside)
요소효과주의
Cache-Aside읽기 부하 우회일관성/TTL·무효화
락 연계 기술 한눈에 보기
카테고리핵심 기술어떻게기대 효과
A DB 내부MVCC·넥스트 - 키·MGL읽기 비차단·팬텀 방지MVCC 기본, 직렬 구간만 레인지락동시성↑, 필요한 곳만 강보호
B 분산/합의2PC·Paxos/Raft·분산락노드 간 동일 의미2PC 커밋, 리더·coarse 락은 ZooKeeper/etcd글로벌 일관성·가용성 균형
C 메시징Outbox·Debezium·Kafka EOS·멱등성DB↔이벤트 원자성트랜잭션 내 outbox, CDC→Kafka, EOS/Idempotent이중쓰기 불일치 제거·중복 안전
D 로그/복구/CDCWAL/ARIES·Logical Decoding장애 복구/변경 전파로그 선기록·복구, 로그 디코딩으로 스트림내구성·데이터 파이프 기반
E 관측pg_locks·PerfSchema·Ext.Events·OTel원인 추적/튜닝락/대기/데드락 수집·추적병목 제거·임계치 최적화
F 캐시Cache-Aside읽기 락 경합 완화캐시 미스시 로드·만료/무효화대기 단축·처리량↑

최종 정리 및 학습 가이드

내용 종합

LCM 은 “어떤 락끼리 같이 써도 되는가” 를 미리 만든 다. 데이터가 테이블→행→인덱스 키처럼 계층이기 때문에, 하위에서 락을 잡을 계획이면 상위에 의도 락 (IS/IX/SIX) 으로 신호를 준다. 읽기만 많이 할 땐 S↔S가 함께 가능해 처리량이 올라가고, 쓰기 경쟁은 X로 고립된다.
범위 검색에서는 새 행이 끼어드는 팬텀을 막아야 하는데, PostgreSQL 은 프레디케이트 (SIREAD), SQL Server 는 키 - 범위, MySQL 은 넥스트키로 해결한다. 모든 엔진은 2PL 과 LCM 을 묶어, 허용/대기를 즉시 결정해 정확성과 성능을 동시에 챙긴다.

실무 적용 가이드

단계/영역핵심 체크포인트주요 작업핵심 지표/알림대표 도구/명령근거
도입/설계일관성·격리수준 정의, 경합 표면 최소화인덱스/파티션 설계, 범위 보호 (필요 시)예상 대기·타임아웃 예산(공통) 설계 문서/아키텍처 리뷰InnoDB 넥스트키, Oracle LOCK TABLE (MySQL 개발자 존)
운영/모니터링대기/데드락/에스컬레이션 상시 관측대시보드/알림, 로그 기반 잠금 대기 추적락 대기시간, 데드락 수, 타임아웃 수Postgres pg_locks,pg_stat_activity,log_lock_waitsPG 뷰·파라미터 문서 (PostgreSQL)
MySQL performance_schema.data_locks/data_lock_waitsInnoDB Locking/PS 문서 (MySQL 개발자 존)
SQL Server sys.dm_tran_locks + Extended EventsDMV/XE 공식 문서 (Microsoft Learn)
트러블슈팅블로킹 체인 파악, 범위 겹침 여부긴 트랜잭션 분리, 락 순서 통일, 인덱스 보강평균 대기/최장 대기, 차단 세션 수엔진별 뷰/DMV/PS + 쿼리 재계획InnoDB 스캔→락 범위 설명 (MySQL 개발자 존)
확장/분산읽기 - 쓰기 분리·샤딩, 최신 기능읽기 복제본/RCSI·SI, 샤딩·파티션, Optimized Locking대기 분포, 에스컬레이션 수엔진 옵션 (RCSI/SI), SQL Server Optimized Locking공식 가이드·기능 문서 (Microsoft Learn)
변경관리정책·임계치·테스트 주기화데드락 정책/로그 리뷰, 릴리스 전후 락 회귀 테스트릴리스별 대기·데드락 추이CI 파이프라인·부하테스트PG log_lock_waits 활용 (PostgreSQL)

학습 로드맵

Phase기간 (권장)핵심 주제성과물 (Outcome)필수 레퍼런스
1 기본1–2 주모드 (S/X/IS/IX/SIX), 5×5 매트릭스, 2PL미니 락 매니저 (요청→판정→대기/해제) 구현 노트PG Explicit Locking, LOCK 문서 (PostgreSQL)
2 MGL2–3 주의도 잠금·계층 락킹·에스컬레이션IS/IX/SIX 시나리오 도식·호환성 퀴즈Gray MGL 논문 (CMU 컴퓨터 과학 학교)
3 범위3–4 주프레디케이트·키 - 레인지·넥스트 - 키InnoDB 데모 (갭/넥스트 - 키) 재현 스크립트EGLT·MySQL 문서 (컴퓨터 과학 부서 - 크레타 대학교)
4 MVCC/SSI4–5 주SI 특성·SSI·범위락 병행SI 에서의 비직렬 사례 재현·SSI/레인지락 비교표Fekete 2005 (버클리 데이터 시스템 및 기초 그룹)
5 제품별/운영지속엔진별 차이·모니터링·튜닝pg_locks/Perf Schema/Ext.Events 대기 분석 리포트, SKIP LOCKED 큐 소비기PG/SQL Server 가이드 (PostgreSQL)

학습 항목 정리

단계세부 항목목표실무 연관성설명
1 기본모드 정의 (S/X/IS/IX/SIX)각 모드 의미·의도 신호 이해높음상위→하위 의도 잠금, 실충돌은 S/X/SIX 위주.
1 기본5×5 매트릭스 판독허용/충돌 전부 판단높음" 요청×보유 " 전원 호환일 때만 부여.
1 기본2PL 파이프라인Growing/Shrinking·Grant/Wait/Detect높음데드락 탐지/예방 개념 포함.
2 MGLIS/IX/SIX 규칙계층 자원에서 빠른 충돌 판정높음의도 잠금으로 에스컬 안전화.
2 MGL에스컬레이션임계→상위 락 승격 기준중간메모리·차단 트레이드오프.
3 범위프레디케이트 락팬텀 이론 이해중간실무에선 비용↑, 개념적 기준점.
3 범위넥스트 - 키 (레코드 + 갭)팬텀 실무 방지높음인덱스 스캔 범위에 락 설정.
4 MVCC/SSISI 와 직렬성 간극왜 SSI/범위락이 필요한가높음SI 만으로는 특정 패턴에서 비직렬.
4 MVCC/SSISSI/범위락 병행직렬 가능 보장 설계높음워크로드에 맞춘 병용 전략.
5 제품/운영SKIP LOCKED큐 처리 경합 회피중간멀티 컨슈머 병행 처리.
5 제품/운영관측 지표보유/대기/데드락 시각화높음pg_locks·Perf Schema·Ext.Events.

용어 정리

카테고리용어 (한글, 영문, 약어)정의관련 개념실무 활용
핵심 개념락 호환성 매트릭스 (Lock Compatibility Matrix, 없음)락 모드 간 동시 보유 가능 여부를 2 차원 표로 정리한 규칙 집합. 부여/대기 판단의 기준.트랜잭션, 충돌, 동시성DDL/DML 설계, 충돌 예측, 성능 튜닝
프로토콜두 단계 잠금 (Two-Phase Locking, 2PL)확장 단계 (획득만) 와 수축 단계 (해제만) 로 잠금을 관리해 충돌 직렬성을 보장하는 방식.직렬성, 교착트랜잭션 정책 수립, 커밋 시 일괄 해제
락 모드공유 락 (Shared Lock, S)읽기 공유를 허용하나 쓰기와는 비호환인 잠금 모드.읽기 일관성SELECT 시 충돌 억제
락 모드배타 락 (Exclusive Lock, X)쓰기 전용으로, 다른 모든 락과 거의 비호환.쓰기 일관성UPDATE/DELETE 시 무결성 보장
락 모드업데이트 락 (Update Lock, U)S↔X 전환 시 데드락을 줄이기 위한 중간 모드S/X 전환갱신 후보 행 선점 시 유용
락 모드의도 락 (Intention Lock, IS/IX/SIX)하위 그라뉼러리티에서 잠금을 잡을 의도를 상위 노드에 선언하는 테이블 수준 잠금.다중 그라뉼러리티대용량 동시성에서 충돌 탐지·비용 절감
범위·격리키 - 범위 락 (Key-Range Lock, 없음)인덱스 키와 키 사이의 범위를 보호해 팬텀을 방지하는 잠금 (직렬화 격리 맥락).팬텀 리드, SERIALIZABLE범위 조회/갱신의 일관성 확보
범위·격리스냅샷 격리 (Snapshot Isolation, SI/RCSI)버전 읽기로 읽기 - 쓰기 충돌을 줄이는 격리. 필요 구간만 잠금 강화.MVCC, 비차단 읽기읽기 우세 워크로드의 대기 감소
운영·정책잠금 에스컬레이션 (Lock Escalation, 없음)많은 미세 락을 상위 (페이지/테이블) 락으로 승격해 리소스를 절약. Learn][5])메모리 관리, 경합대량 처리 시 자동/정책 기반 승격
운영·정책데드락 (Deadlock, 없음)트랜잭션들이 서로의 자원을 기다려 진행 불가인 순환 대기 상태.Wait-for 그래프감지기/피해자 선택, 재시도 설계
운영·정책락 타임아웃 (Lock Timeout, 없음)대기 시간이 임계치를 넘으면 요청을 중단하는 정책.서비스 수준, 재시도SLA 보호, 재시도·멱등 처리
모니터링·진단락 관리자 (Lock Manager, 없음)락 테이블·대기열을 관리하고 호환성 판정을 수행하는 엔진 구성요소.호환성 매트릭스부여/대기 결정, 통계 수집
모니터링·진단락 테이블/대기열 (Lock Table/Queue, 없음)현재 보유/대기 락의 상태 저장 구조.Wait-for 그래프병목 분석, 우선순위 조정
모니터링·진단대기 - 그래프 (Wait-for Graph, 없음)트랜잭션 간 대기 관계를 나타내는 그래프 (사이클=데드락).데드락 감지자동 감지·피해자 선정
모니터링·진단잠금 모니터링 뷰 (pg_locks 등, 없음)현재 잠금 현황을 조회하는 뷰/DMV. PostgreSQL 의 pg_locks 가 대표적.블로킹, 경합실시간 진단·튜닝

참고 및 출처