Deadlock(교착 상태) - 1. 도입: 왜 데드락(교착 상태)을 알아야 할까?

2025. 3. 25. 21:57프로그래밍/시스템

 

1. 도입: 왜 데드락(교착 상태)을 알아야 할까?

✅ 데드락이 중요한 이유

데드락(Deadlock, 교착 상태)은 둘 이상의 프로세스 또는 스레드가 서로 필요한 자원을 점유한 채, 무기한 대기에 빠지는 상황을 말합니다. 이는 단순한 코드 오류를 넘어 서비스 중단, 성능 저하, 자원 낭비 등의 심각한 결과로 이어질 수 있습니다.

🔎 실무에서 데드락이 중요한 이유

  • 서비스 장애를 유발할 수 있습니다.
    두 개의 트랜잭션이 서로의 자원을 점유한 채 대기하면, 데이터베이스가 응답하지 않거나 전체 시스템이 멈추는 상황이 발생합니다.
  • 시스템 자원을 낭비합니다.
    데드락 상태에서는 점유된 자원이 해제되지 않아, CPU, 메모리, DB 커넥션 등의 자원이 비효율적으로 고정됩니다.
  • 재현과 디버깅이 어렵습니다.
    데드락은 주로 동시성 상황에서 특정 타이밍에 발생하기 때문에, 테스트 환경에서는 쉽게 드러나지 않고 로그 분석도 복잡합니다.
  • 경제적 손실로 이어질 수 있습니다.
    2019년 국내 대형 커머스 플랫폼 A사에서는 트랜잭션 데드락으로 인해 주문 API가 약 7분간 정지되어, 수천 건의 주문 실패와 수억 원 규모의 매출 손실이 발생한 바 있습니다.

🔄 데드락이 자주 발생하는 환경과 실제 사례

환경 데드락 발생 예시
운영체제(OS) 두 프로세스가 각각 파일과 프린터를 점유하고, 서로의 자원을 요청하며 대기하는 경우
데이터베이스(DB) 트랜잭션 A가 레코드 X를, 트랜잭션 B가 레코드 Y를 잠근 뒤, 서로 상대 자원을 기다리는 경우
멀티스레드 프로그래밍 스레드들이 각각 필요한 락을 점유한 상태로, 다른 락을 기다리며 교착 상태에 빠지는 경우
분산 시스템 여러 노드가 분산 락을 획득하려다 순환 대기가 발생해 시스템 전체가 멈추는 상황
웹 서버 / API 동시에 들어온 요청들이 공유 캐시나 DB 락을 서로 점유하고 대기하여 전체 응답이 지연되는 경우

💡 면접과 학습에서 자주 등장하는 이유

데드락은 운영체제, 데이터베이스, 동시성 프로그래밍 등에서 반드시 짚고 넘어가야 할 핵심 개념입니다. 면접에서는 문제 해결 능력과 시스템 설계 능력을 평가하기 위한 질문으로 자주 활용됩니다.

📋 자주 묻는 면접 질문 예시

  • 데드락이란 무엇인가요? 발생 조건은 무엇인가요?
  • 멀티스레드 환경에서 데드락을 방지하려면 어떻게 해야 하나요?
  • 데드락이 발생했던 경험이 있다면, 해결 방법을 설명해 주세요.

📚 학습 및 평가에서의 활용

  • CS 과목(운영체제, DB 등)에서 핵심 주제로 반복 학습됩니다.
  • 코딩 테스트 및 시스템 설계 과제에서 자원 관리와 락 처리 전략을 설계할 때 필수적으로 고려해야 합니다.

📝 요약

데드락은 시스템의 안정성과 직결되는 중대한 이슈입니다.
실무에서는 장애 예방 및 대응 역량, 면접과 학습에서는 동시성에 대한 깊은 이해도를 보여주는 핵심 주제로 반드시 숙지하고 있어야 합니다.