ACTIVE INCIDENT
00:00 elapsed
LABLAB-DB-10-TRANSACTION-LOCKSEV-1
트랜잭션 락·데드락 — 격리수준·lock_timeout·SKIP LOCKED
ELAPSED
00:00
PHASE
0 / 4
SLA
45분
🗄️ Database
← 목록
INCIDENT RESPONSE
0 / 5 단계 완료
📚 PREREQUISITES
Labpostgresql-lock-deadlock
Theorydatabase/transactions-acid
Theorydatabase/transaction-isolation
TRACK
DATABASE
SLA
45분
SEV
SEV-1
PHASES
3단계
ENV
local
INCOMING TICKET
슬랙 알람: "재고 차감 배치가 서로 물려서 멈췄습니다. 데드락 에러가 로그에 찍히는데 왜 나는지 모르겠고, 어떤 워커는 30초씩 락 대기하다 타임아웃 나요."
YOUR ROLE
주니어 인프라 엔지니어
IMPACT IF UNRESOLVED
재고 차감 배치 중단 — 주문 처리 지연, 일부 워커 락 대기 타임아웃. 데드락 원인과 락 대기 정책을 모르면 배치가 계속 물림
🚨INCIDENT BRIEF
재고 차감 배치가 멈췄습니다.
"여러 워커가 동시에 재고를 차감하는데, 가끔 'deadlock detected' 에러가 나고 어떤 워커는 락 대기하다 30초 만에 타임아웃 나요. 데드락이 왜 나는지, 락 대기를 어떻게 다뤄야 하는지 모르겠어요."
데드락을 직접 재현해 "왜 발생하는가"를 눈으로 확인하고, 행 접근 순서를 고정해 예방합니다. 그다음 lock_timeout으로 무한 대기를 끊고, SELECT FOR UPDATE의 NOWAIT·SKIP LOCKED 옵션으로 워커들이 서로 안 물리고 일감을 나눠 갖는 큐 패턴을 익힙니다.
⏱ 45분📊 고급🔧 3단계#postgresql#transaction#deadlock#lock
MISSION
1
데드락 재현 — 역순 UPDATE
두 세션에서 행을 역순으로 UPDATE해 데드락을 발생시키고 ERROR: deadlock detected를 확인한다
2
데드락 예방 — 행 접근 순서 고정 + lock_timeout
SELECT ... FOR UPDATE ORDER BY id로 접근 순서를 강제해 데드락을 예방하고, lock_timeout으로 무한 대기를 끊는다
3
경합 회피 — FOR UPDATE NOWAIT / SKIP LOCKED 큐 패턴
NOWAIT으로 즉시 실패, SKIP LOCKED로 잠긴 행을 건너뛰는 작업 큐 패턴을 구현하고 검증한다
📌 선수 지식
ℹ️ 실습 환경
환경: local
필요 도구: bash, postgresql, psql
검증 스크립트: /labs/lab-db-10-transaction-lock/scripts/verify.sh
🔒
실습 실행은 Pro 플랜 전용입니다
인시던트 브리프와 학습 자료는 지금 바로 확인할 수 있습니다. 실제 실습 진행 및 터미널 사용은 Pro 플랜에서 가능합니다.
Pro로 업그레이드 →
>_ LAB TERMINAL↔ 너비 조절
NOTES