본문 바로가기
카테고리 없음

[기획 연재 15편] 데드락(Deadlock): 4거리 교차로에서 멈춰버린 시스템 (교착 상태의 비극)

by khhjyc_ 2026. 1. 19.

서론: 우주선이 응답하지 않을 때

컴퓨터를 쓰다가 갑자기 화면이 멈추고 마우스조차 움직이지 않는 '프리즈(Freeze)' 현상을 겪어보셨을 겁니다. NASA 관제 센터에서 가장 공포스러운 순간이 바로 탐사 로봇이 이런 상태에 빠져 아무런 명령도 듣지 않을 때입니다.

이 현상의 주된 원인 중 하나가 바로 '데드락(Deadlock)', 우리말로는 '교착 상태'입니다. 지난 시간에 배운 멀티 스레드들이 서로 자원을 차지하겠다고 욕심을 부리다, 결국 아무도 자원을 쓰지 못하고 영원히 대기하는 최악의 상황이죠.

오늘 15편에서는 꽉 막힌 4거리 교차로처럼 오도가도 못하게 된 시스템의 비극과, 이를 해결하기 위한 공학적 고민을 다뤄보겠습니다.

본론 1: 네 대의 차가 멈춘 교차로

데드락을 가장 쉽게 이해하는 방법은 신호등 없는 4거리 교차로를 상상하는 것입니다.

  • 4방향에서 차 4대가 동시에 진입했습니다.
  • 교통 법규상 "내 오른쪽 차가 지나가면 내가 간다"는 규칙이 있다고 칩시다.
  • 북쪽 차는 동쪽 차를 기다리고, 동쪽은 남쪽을, 남쪽은 서쪽을, 서쪽은 다시 북쪽 차를 기다립니다.

결과는? 아무도 움직이지 못합니다. 누구 한 명이 양보하거나 후진하지 않는 이상, 이 상태는 영원히 지속됩니다. 컴퓨터 내부에서도 스레드 A가 자원 1을 쥔 채 자원 2를 달라고 하고, 스레드 B는 자원 2를 쥔 채 자원 1을 달라고 할 때 정확히 똑같은 현상이 발생합니다.

본론 2: 식사하는 철학자 문제 (Dining Philosophers)

컴퓨터 과학의 전설적인 난제, '식사하는 철학자 문제'를 들어보셨나요? 데드락을 설명하는 가장 유명한 모델입니다.

  1. 원탁에 5명의 철학자가 앉아 있고, 접시 사이사이에 포크가 하나씩(총 5개) 있습니다.
  2. 스파게티를 먹으려면 반드시 양손에 포크(왼쪽, 오른쪽)를 쥐어야 합니다.
  3. 만약 5명의 철학자가 동시에 자기 왼쪽 포크를 집어 들면 어떻게 될까요?
  4. 모든 철학자가 왼쪽 포크는 쥐었지만, 오른쪽 포크는 옆 사람이 가져가 버려서 없습니다.
  5. 모두가 오른쪽 포크가 생기길 하염없이 기다리다 결국 굶어 죽습니다.

이것이 바로 운영체제에서 프로세스들이 자원을 공유하다가 발생하는 순환 대기(Circular Wait)의 공포입니다.

본론 3: 해결책은 '교통정리'뿐

NASA 엔지니어들은 이 데드락을 피하기 위해 시스템 설계 단계에서부터 엄격한 규칙을 적용합니다.

  • 자원 순서 강제: 모든 포크(자원)에 번호를 매기고, 반드시 "낮은 번호부터 집어야 한다"는 규칙을 만듭니다. 이렇게 하면 순환 고리가 끊어져 데드락이 발생하지 않습니다.
  • 타임아웃(Timeout): "3초 동안 기다려도 자원을 못 얻으면, 쥐고 있던 자원을 내려놓고 포기한다"는 규칙을 넣습니다. (철학자가 포크를 내려놓게 만듭니다.)

결론: 양보가 시스템을 살린다

데드락은 욕심(경쟁) 때문에 발생합니다. 서로 자원을 독점하려고만 할 때 시스템은 멈춰버립니다. 프로그래밍에서도 적절한 양보(Yield)순서(Ordering)가 있어야만 전체 시스템이 원활하게 돌아갑니다.

이것으로 시스템 보안과 운영체제를 다룬 [Part 3]가 마무리되었습니다.

이제 20부작의 마지막 챕터, [Part 4. 컴퓨터 과학의 미래와 철학 (확장편)]으로 넘어갑니다. 16편에서는 "어떤 코드가 좋은 코드인가?"를 수학적으로 증명하는 [알고리즘의 효율성: Big-O 표기법]에 대해 NASA 과학자의 쉬운 비유로 설명해 드리겠습니다.