교착 상태 발생 4가지 필요조건
핵심 인사이트 (3줄 요약)
- 본질: 교착 상태 (Deadlock) 발생 4가지 필요조건은 E. G. Coffman이 1971년에 정리한 이론으로 상호 배제(Mutual Exclusion), 점유 대기(Hold and Wait), 비선점(No Preemption), 순환 대기(Circular Wait)가 동시에 모두 충족되어야만 데드락이 발생한다는 법칙이다.
- 가치: 데드락이라는 시스템 결빙 버그를 "네 가지 퍼즐 조각이 모인 상태"라는 구조적 결함으로 해석케 함으로써, 운영체제나 개발자가 단 하나라도 조건을 파괴(Prevent)하거나 빗겨가(Avoid)도록 설계해 안전한 서비스를 구축할 명쾌한 엔지니어링 가이드라인을 제공한다.
- 융합: DB 트랜잭션의 배타 락(Mutual Exclusion), 멀티 스레드 프로그래밍에서의 중첩 락(Hold & Wait), 외부 자원 점유 강제 박탈(Preemption), 락 획득 순서 넘버링(Circular Wait 예방) 등 현대 백엔드 오류 타임아웃 해결 기법과 직결된다.
Ⅰ. 개요 및 필요성
차량이 교차로 한가운데 네 방향에서 뒤엉켜 서로가 상대방이 비켜주기를 영원히 기다리는 상태가 교착 상태(Deadlock)다. 이 비극은 단순한 재수 없음이 아니다. 시스템 공학에서는 이 치명적 멈춤 뒤에 정확히 4가지의 논리적 조건이 존재함을 밝혀냈다.
이 조건들은 "개별적으로는 유용하게 설계된 규칙"이지만, 특정 타이밍에 4개가 모두 얽혀 들어가는 순간 프로세스가 자멸(영원한 대기)하게 만들어 버린다.
💡 비유: 범죄가 성립하려면 범행 의도(1), 수단(2), 대상(3), 기회(4)가 다 있어야 하듯, 교착 상태라는 '에러 범죄'도 4가지 나쁜 타이밍 조건이 하나의 단단한 매듭으로 묶여야 발생합니다.
┌──────────────────────────────────────────────────────────────┐
│ 교착 상태(Deadlock)의 네 가지 퍼즐 조각 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [조건 1] 상호 배제 (Mutual Exclusion) │
│ 한 번에 한 명만 쓰는 배타적 자원이어야 함. │
│ (모두가 같이 쓰는 벤치라면 싸움 안 남) │
│ │
│ [조건 2] 점유하며 대기 (Hold and Wait) │
│ 내 것을 꽁꽁 쥔 채로 남의 것을 내놓으라고 버텨야 함. │
│ (손 풀고 처음부터 다시 요청하면 싸움 안 남) │
│ │
│ [조건 3] 비선점 (No Preemption) │
│ 운영체제(경찰)나 다른 놈이 억지로 뺏을 수 없음. │
│ (경찰이 강제로 뺏어서 분배 가능하면 싸움 안 남) │
│ │
│ [조건 4] 순환 대기 (Circular Wait) │
│ 물고 물리는 고리 형태(A→B→C→A)로 서로를 원해야 함. │
│ (직선 구조면 끝사람이 끝내면 차례가 오지만 순환은 영원함) │
│ │
│ → 이 4개가 우연히 한 프레임에 모두 공존(AND 조건) 시 │
│ 시스템은 영구 정지(데드락)! │
└──────────────────────────────────────────────────────────────┘
📢 섹션 요약 비유: 4조건은 무인도 뱀 꼬리 물기 — 각자 방(배타)에 숨어서(비선점), 앞 뱀의 꼬리를 잡은 채(점유) 절대 안 놓고(대기), 다 같이 원형(순환)으로 원수지간이 되는 완벽한 붕괴 공식입니다.
Ⅱ. 아키텍처 및 핵심 원리
각 조건의 세부 성질
- 상호 배제 (Mutual exclusiveness): 프린터, 뮤텍스 락처럼 공유 불가한(Non-sharable) 모드로만 접근 가능한 자원이 원인. (읽기 전용 파일처럼 다중 접근을 놔두면 데드락 0)
- 점유 대기 (Hold and wait): 기본 자원 1개를 선점해 놓은 프로세스가 나머지 2번 자원을 확보하려고 OS 블록 큐에 잠들면서 기존 1번 자원을 안 뱉음.
- 비선점 (No preemption):
프로세스가 작업을 다 끝내고
release()하기 전까지는 외부 힘으로 그 자원을 "강제 스위칭 탈취" 해올 아키텍처 지원이 없음. (CPU나 메모리는 스와핑 선점이 되서 데드락이 덜 나나, DB Lock은 강제 탈취시 오염) - 순환 대기 (Circular wait): 대기하는 노드들의 체인이 {P0 → P1 → P2 → ... → P0} 형태의 순환 위상수학적 사이클 그래프(Cycle Graph)를 그리는 상태.
📢 섹션 요약 비유: 4가지 룰이 조합된 절대 반지 — "나만 써(1), 남의 것도 가질래(2), 강제 압수 안 됨(3), 원형으로 목조르기(4)". 단 하나라도 룰을 어기면 절대 반지는 산산조각 납니다.
Ⅲ. 융합 비교 및 다각도 분석
데드락 관리 관점에서 이 4조건을 어떻게 바라보고 대처할 것인가:
| 필요조건 | 부정(Prevention) 해결 전략 | 실무의 현실 한계 |
|---|---|---|
| 상호 배제 부정 | 모든 걸 공유 가능하게 만듦 (Read-only 위주 패러다임) | 쓰기(Update)가 필수적 자원은 원천 불가 |
| 점유 대기 부정 | 식당 갈 때 포크, 숟가락 등 일체를 예약 성공시만 착석 | 활용 안 하는 시간에도 점유하여 자원 폭망 |
| 비선점 부정 | 다른 걸 대기해야 할 때는 자발적으로 내 락을 다 내려놓음 | 중간 저장(Commit/Rollback) 복원 처리 난해 |
| 순환 대기 부정 | 자원에 고유 넘버링하여 반드시 오름차순 번호로만 취득 | 가장 현실적인 실무 방어 전략. Lock Hierarchy |
📢 섹션 요약 비유: 방어 전략 중 "오름차순 번호표"가 최고 — 락에 1번, 2번 등표를 달아 "2번을 가진 자는 1번을 요구할 수 없다"고 수학적 룰을 주면 고리가 형성될(순환 대기) 일이 구조적으로 사라집니다.
Ⅳ. 실무 적용 및 기술사적 판단
실무 시나리오:
- DB 애플리케이션 데드락 로그 (MySQL InnoDB): Transaction A가
Table 1Update 중이고 Transaction B가Table 2Update 중이다. 이때 서로를 교차 Update 요청하는 순간, 상호 배제(Row 락), 점유 대기, 순환 대기가 터진다. DB 커널은 강제로 한 명을 죽여(비선점 파괴/Preemption 강제) 희생자(Victim Rollback)로 만들고 나머지 하나를 구제한다. - 사내 OS 코어 팀 - Lock Order 규정: Linux 커널에 기여할 때 개발 안내 가공문에는 "락을 A, B 순으로 획득해야 한다"는 위계 질서 가이드라인(Lock Hierarchy)이 박혀있다. 커널 단위 패닉 방지를 위한 순환 대기 조기 억제책이다.
안티패턴:
- 자원 여러 개에 무작위 Lock 획득 짜깁기: 주니어 개발자들이 객체 C, 객체 D가 들어오는 순서대로
syschronized(x)를 마구잡이 교차 중첩할 때 나타남. 철저하게 "항상 메모리 주소(ID)가 정렬 오름차순이 되도록 락킹"하는 훈련이 필요.
📢 섹션 요약 비유: 주먹구구로 이 문 저 문 잠그는 건 교차로 꼬리물기 — 서로 순서 규칙을 안 지키니 가운데 얽히면 나가지도 못하는 대형사고(데드락)가 납니다. 규칙적으로 들어가야 안전해요.
Ⅴ. 기대효과 및 결론
| 접근 방식 | 4가지 조건의 위상 | 엔지니어링 패러다임 |
|---|---|---|
| 발생 이론 (Coffman) | 4가지 AND | 이 4조합은 절대 회피해야 할 블랙홀 |
| 데드락 예방 (Prevention) | 4개 중 최소 한 개 파괴 | 시스템 레벨에서 강력히 원천 규제 |
| 데드락 무시 (Ostrich) | 4개 공존 운영체제 허용 (알빠노) | 발생해봤자 드무니 재부팅 하라 (현대 데스크톱) |
교착 상태를 유령처럼 두려워할 것이 아니라, 코프먼 4-Condition이라는 이성의 렌즈로 보면 시스템 정지 원인이 논리 회로처럼 명백해진다. 이 4조건 모두가 성립하려 할 찰나를 방어(Lock 획득 순서화, 타임아웃 롤백 등)하는 것이야말로 진정한 멀티 스레딩 및 DB 병행 튜닝의 마스터 코스다.
📌 관련 개념 맵
| 개념 | 관계 |
|---|---|
| 데드락 회피 (Avoidance) | 4조건은 내비 두고 상태를 은행원처럼 계산해 안전 루트 우회 기술 |
| 데드락 무시 (타조 알고리즘) | Windows/Linux가 채택한 데드락 4조건 체념(비용 절감) 메커니즘 |
| 식사하는 철학자 문제 | 4가지 조건이 우연히 동시에 다 맞아떨어지는 대표 실험실 예제 |
| OOM (Out Of Memory) | 점유 대기 상황에서 RAM 고갈이 겹쳐 터지는 교착 파괴 이벤트 |
👶 어린이를 위한 3줄 비유 설명
- 게임기가 1개, 컨트롤러가 1개뿐입니다. 형은 게임기를 안고 컨트롤러를 내놓으라 하고, 동생은 컨트롤러를 쥔 채 게임기 내놓으라고 싸웁니다.
- 둘 다 욕심(하나뿐임, 남 안 줌, 안 뺏김, 서로 노려봄)이라는 4가지 룰이 다 뭉쳐버렸기 때문에 엄마가 오기 전까진 절대로 게임을 시작할 수 없는 멈춤 늪에 빠집니다.
- 이 네 가지 나쁜 타이밍 룰이 합쳐지는 순간, 컴퓨터 시스템도 완전 얼어붙는 것이 교착 상태(데드락) 조건입니다.