회의실의 공기가 무겁다. 개발자는 기획자의 무리한 일정에 짜증을 내고 있고, 기획자는 리소스가 부족하다며 고객과 맞서고 있다. 서로의 논리는 너무 완벽해서, 개발자는 안정성 부족의 위험을 얘기하고, 기획자는 추가 투자가 필요하다며 고객의 예산을 붙잡고 있다. 셋 중에서 누구도 먼저 손을 놓은 생각이 없다. 이 팽팽한 대치 상황에서 누군가 가장 이성적인 한 마디를 던진다.
"서로 데드락(Deadlok) 상태면, 당분간 얘기하지 말죠."

꼬일대로 꼬인 상황에서는 누구의 답도 정답이 아닐 수 있는 것이 데드락
개발자라면 익숙한 교착상태(Deadlock)는 운영체제(OS) 교과서에서나 보던 현상이지만, 회사의 사무실에서도 매일같이 벌어지는 일입니다. 보통 윈도우즈와 같은 운영체제에서는 아주 특정한 조건에서 이런 데드락이 발생하는데요. 복잡한 말로는 상호 배제, 점유 대기, 비선점, 그리고 환형 대기(Circular Wait)이라고 부르는 말들이 있지만, 쉽게 이해하는 방법이 있습니다.
여러분이 보고서 A를 열어서 수정하고 있는데, 내용을 완성하려면 보고서 B의 표가 필요해서 B를 열려고 합니다. 그런데 옆자리 동료는 보고서 B를 이미 열어서 수정 중이고, 그 내용을 완성하려면 여러분이 잡고 있는 보고서 A의 데이터가 필요해서 A를 열려고 시도 중입니다.
엑셀(프로그램)은 파일이 열려 있으면 수정 권한을 안 주죠. 나는 B가 열리길 기다리고, 동료는 A가 열리길 기다립니다. 둘 다 으르렁거리며 쳐다만 볼 뿐, 영원히 작업은 끝나지 않습니다. 이런 현상을 데드락이라고 해요. 물론, 기술적으론 더 복잡하고, 최신 운영체제는 이런 현상이 일어나지 않지만 이해를 위해서 쉽게 설명했습니다.
그런 면에서 데드락이 발생하면 컴퓨터에서는 서로 양보하길 기다리면서, 꼬리에 꼬리를 물고 CPU와 메모리, 자원들은 계속 낭비되는 일이 발생하죠. 그럴 때 우리가 사용하는 치트키는 바로 Ctrl + Alt + Del을 눌러서 CPU나 메모리 점유율이 100% 가까이 올라가면서, '응답없음' 상태인 프로세스를 강제로 '끝내기'를 실행하는 겁니다.
끝내기인가 아니면 지루한 기다림, 어떤 것이 정답일까?
이럴 때 필요한 건 무리한 돌파나 뜨거운 토론이 아닐 수도 있습니다. 역사 속에서 지혜를 빌려오자면, 로마의 장군 파비우스 막시무스(Fabius Maximus)의 전략이 필요한 때일 수도 있죠.
제2차 포에니 전쟁 당시, 로마는 천재적인 전략가 한니발에게 연전연패를 당하고 있었습니다. 한니발은 코끼리 부대를 이끌고 험준한 알프스 산맥을 넘어 이탈리아 본토를 기습했고, 한니발이 이끄는 카르타고의 군대에 정면 승부를 걸었던 로마군은 트레비아, 트라시메누스, 칸나에 전투까지 붙으면 붙는대로 전멸당했죠. 이 때 파비우스 장군은 '싸우지 않는 것'을 전략으로 택했습니다. 그는 한니발과의 직접적인 교전을 피하고, 시간을 끌며 적의 보급로를 끊고 지치게 만들면서 힘을 온전히 보전하는 장기전에 돌있했어요. 당시 로마 시민들은 그를 굼벵이(지연하는 자, Cunctator)라고 조롱했지만, 결국 로마를 구한 건 화려한 돌격이 아니라 지루한 '지연'이었습니다.

파비우스는 겁쟁이로 놀림받았으나, 철저한 지연작전으로 로마의 생명연장을 이뤄냈다.
그는 전쟁이 한창이던 203년, 77세의 나이로 로마에서 사망했는데요. 그 사이 로마의 젊은 장군인 스키피오 아프리카누스가 카르타코의 본국인 북아프리카를 직접 공격했고, 기원전 202년 스키피오는 한니발을 격파했습니다. 파비우스는 한니발이 이탈리아에서 철수할 즈음에 사망해서 승리를 거두는 것을 볼 수는 없었지만, 그를 놀렸단 '지연하는 자'라는 별명은 오히려 '로마를 지키는 굳건한 방패'로 로마 시민들이 장례를 치뤄주었습니다. 그의 지연 작전이 아니었다면, 지금의 로마도 없었겠죠.
회의실에서 벌어지는 데드락도 마찬가지입니다. 서로의 논리가 팽팽하게 맞물려 옴짝달싹 하지 못할 때, 억지로 결론을 내려고 덤벼대면 감정만 상하고 프로젝트는 망가져요. 이걸 비유한 유명한 사건이 바로 '피로의 승리(Pyrrhic Victory)'입니다. 기원전 3세기에 그리스 에피로스의 왕 피로스는 로마군과 서로 거의 죽다 살아날 정도의 전투에서 양측 모두 전멸에 가까운 피해를 입었지만 결국 승리를 거뒀는데요. 승리를 거두긴 했지만 핵심 장교들과 정예 병력 대부분을 잃고 이런 말을 남겼죠.
"이런 승리를 한 번 더 거두었다간, 우리는 완전히 망하게 될 것이다."
그러니, 당분간 얘기하지 말자는 얘기는 회피나 도망이 아니라, 과열된 CPU를 식히기 위한 '컨텍스트 스위칭(Context Switching)' - 일종의 환제 전환이자, 파비우스가 선택했던 전략적 후퇴인 것이죠. 잠시 노트북을 덮고, 탕비실로 가서 커피 한 잔 내리는 것, 서로가 쥐고 있던 자원(고집)을 잠시 내려놓고(Release), 환형 대기의 고리를 끊는 것이 회사에서의 데드락을 이겨내는 방법입니다.

회사에서 죽자고 싸워서 이겨봐야, 결국 팀은 없고, 나만 남습니다.
물론, 상대방을 경쟁상태(Race Condition)에서 눌러 압살해 버리고, 내가 자원을 점유하고, 일정을 맘대로 해버리는 승리도 있겠지만 조직에서 오래 살아남는 법은 그런게 아닙니다. 그리고, 내가 의사결정권자가 아니라면 굳이 이 싸움에 끼어들지 않는 것이 좋습니다. 이런 전략을 우리는 타조 알고리즘(Ostrich Algorithm)이라고 하기도 하죠. 타조가 위험을 느끼면 모래에 머리를 박고 모른 척 하듯, 가끔 상사들의 데드락 상태는 모른 척 하고 있는 것이 좋아요.
전체 사이트에서 댓글·관련 글을 함께 보시려면
이야기 공장에서 보기 →