이것저것 개발기록

교착 상태(Deadlock)의 발생 조건과 해결 방법 본문

IT 이야기

교착 상태(Deadlock)의 발생 조건과 해결 방법

Garam Kim 2026. 1. 1. 12:00

"서버가 멈춘 것 같은데 에러 로그도 없어요..."
프로세스들이 서로의 자원이 해제되기만을 무한정 기다리는 상태, 데드락(Deadlock)에 대해 파헤쳐 봅니다.

1. 데드락 발생의 4가지 필수 조건

다음 4가지 조건이 모두 충족될 때 데드락이 발생합니다. 하나라도 깨뜨리면 예방할 수 있죠.

  • 1. 상호 배제 (Mutual Exclusion): 한 번에 한 프로세스만 자원을 사용할 수 있음.
  • 2. 점유와 대기 (Hold and Wait): 자원을 가진 상태에서 다른 자원을 기다림.
  • 3. 비선점 (No Preemption): 다른 프로세스의 자원을 강제로 뺏을 수 없음.
  • 4. 환형 대기 (Circular Wait): 대기 관계가 원형을 이룸.

2. 어떻게 해결하나요?

실제 운영체제는 데드락을 예방(Prevention)하거나 회피(Avoidance)하기보다는, 발생했을 때 탐지(Detection)하고 복구(Recovery)하는 방식을 주로 사용합니다.

💡 실무 노트

실무 백엔드 개발에서는 DB 트랜잭션 간의 데드락을 자주 마주하게 됩니다. 두 트랜잭션이 서로 다른 테이블의 락(Lock)을 잡으려고 할 때 발생하죠.

팁: 가장 쉬운 해결책은 **자원에 접근하는 순서를 통일**하는 것입니다. 모든 로직에서 A 테이블을 수정한 뒤 B 테이블을 수정하도록 순서만 맞춰도 환형 대기(Circular Wait) 조건을 깨뜨려 데드락을 방지할 수 있습니다.