장애 대응은 복구가 아니라 학습이다

장애 대응은 복구가 아니라 학습이다

새벽 3시에 온콜 알림이 울립니다. 결제가 안 된다는 겁니다. 로그를 뒤지고, 롤백하고, 20분 만에 서비스를 복구합니다. 안도의 한숨을 쉬고 다시 잠듭니다. 그리고 2주 뒤, 거의 똑같은 장애가 또 터집니다. (이 장면이 익숙하시다면, 문제는 대응 속도가 아닙니다.) 결론부터 말씀드리겠습니다. 장애 대응의 진짜 성과는 서비스를 얼마나 빨리 복구했는가가 아니라, 같은 장애가 다시 오지 않도록 팀이 무엇을 배웠는가입니다. 복구는 절반입니다. 나머지 절반은 복구 버튼을 누른 다음에 시작됩니다. 그런데 우리는 대개 그 버튼을 누르는 순간 장애가 끝났다고 착각합니다.

복구는 장애 대응의 절반이다

먼저 인정할 게 하나 있습니다. 장애는 막을 수 없습니다. 규모가 어느 선을 넘은 시스템에서 장애는 예외가 아니라 상수입니다. 그러니 목표를 “장애 제로”로 잡는 순간 이미 진 게임을 하는 겁니다. 현실적인 목표는 두 가지입니다. 얼마나 빨리 복구하는가, 그리고 같은 장애를 얼마나 확실히 막는가.

앞의 절반, 복구 속도는 이미 업계 표준 지표가 있습니다. DORA의 2024년 보고서는 배포 실패 복구 시간(과거의 MTTR)을 소프트웨어 전달 성과의 안정성 축으로 봅니다. 숫자는 냉정합니다.

구분복구 시간변경 실패율
엘리트 팀1시간 이내약 5%
저성과 팀1주 이상약 40%

몇 년 전 실시간 송금 서비스를 운영하던 시절, 저는 이 앞의 절반에만 매달렸습니다. 국내 정산 기관과 여러 해외 파트너사를 연동하는 구조라 장애가 잦았고, 장애가 날 때마다 불을 끄기 바빴습니다. 모니터링 체계와 원인 보고 체계를 세우고 나서야 복구 시간이 눈에 띄게 줄었습니다. 그런데 이상하게도 장애 자체는 줄지 않았습니다. 빨리 끄는 데는 능숙해졌는데, 같은 불이 계속 났습니다. 뒤의 절반, 즉 학습을 건너뛰고 있었기 때문입니다.

‘근본 원인’이라는 착각

장애 회고에서 가장 먼저 버려야 할 말은 “근본 원인이 뭐였죠?”입니다. 이 질문은 답이 하나 있다고 전제하지만, 복잡한 시스템은 그렇게 고장 나지 않습니다.

시스템 안전 연구자 리처드 쿡은 1998년 논문 「How Complex Systems Fail」에서 이렇게 정리합니다. 겉으로 드러난 장애가 일어나려면 여러 개의 결함이 필요하다. 각각의 결함은 그 자체로는 장애를 일으키기에 부족하다. 이들이 동시에 겹칠 때만 장애가 된다. 따라서 하나의 근본 원인을 분리해내는 것은 불가능하다(Cook, 1998). 쿡은 한 발 더 나아가, 근본 원인을 굳이 하나로 지목하려는 태도는 기술적 이해가 아니라 특정 대상을 탓하려는 사회적 필요에서 나온다고 지적합니다.

그 탓의 대상은 대개 사람입니다. 배포한 사람, 알림을 놓친 사람, 설정을 잘못 건드린 사람. 하지만 안전과학자 시드니 데커의 표현을 빌리면, 인적 오류는 원인이 아니라 더 깊은 곳에 있는 문제의 증상입니다. 그는 사후확신편향(hindsight bias)을 이렇게 경고합니다. 사후에 돌아보면 결함으로 보이지 않을 인간의 판단은 거의 없다(Dekker, 2014). 장애가 터진 뒤에 보면 “그때 왜 그걸 몰랐지”가 뻔해 보이지만, 그 사람은 사고 시점에 가진 정보로는 합리적으로 행동한 겁니다. 우리가 고쳐야 하는 것은 그 사람이 아니라, 그 시점에 잘못된 정보를 그럴듯해 보이게 만든 시스템입니다. 이건 방치된 기술 부채가 장애의 기여 요인으로 쌓이는 방식과 정확히 같습니다.

범인을 찾으면 학습이 멈춘다

비난이 왜 위험한지는 심리학이 명확하게 답합니다. 하버드의 에이미 에드먼슨은 병원 팀을 연구하면서, 성과가 좋은 팀일수록 오류를 더 적게 보고할 거라 예상했습니다. 결과는 정반대였습니다. 좋은 팀이 오류를 더 많이 보고했습니다(Edmondson, 1999). 오류를 더 많이 낸 게 아니라, 보고해도 안전하다고 느꼈기 때문입니다. 차이는 오류율이 아니라 검출율이었습니다.

장애도 똑같습니다. 회고가 범인 색출로 흘러가는 순간, 팀은 다음 장애를 숨기는 법을 배웁니다. 위험 신호를 늦게 공유하고, 실수를 축소하고, “제 잘못 아닙니다”를 준비합니다. 그렇게 조직은 학습 능력을 잃습니다. 이것이 구글 SRE 팀이 비난 없는 포스트모템(blameless postmortem)을 문화의 기본값으로 삼은 이유입니다. 그들의 원칙은 한 문장으로 요약됩니다. 사람은 고칠 수 없지만, 사람이 옳은 선택을 하도록 시스템은 고칠 수 있다(Google SRE). 회고는 처벌이 아니라 회사 전체를 위한 학습 기회라는 겁니다.

결국 관건은 어떤 질문을 던지느냐입니다. 같은 장애를 놓고도 질문을 바꾸면 회고의 방향이 바뀝니다.

비난을 부르는 질문학습을 부르는 질문
누가 배포했나어떤 조건에서 이 배포가 안전해 보였나
왜 못 막았나어떤 신호가 있었고, 왜 늦게 도달했나
근본 원인이 뭔가어떤 기여 요인들이 겹쳤나
다시는 안 그러겠다는 다짐오너와 기한이 붙은 액션 아이템

이런 회고가 가능하려면 팀에 심리적 안전감이 먼저 깔려 있어야 합니다. 안전감 없는 블레임리스는 구호일 뿐입니다.

배우는 회고를 설계하는 법

비난 없는 회고는 마음가짐이 아니라 절차입니다. 실무에서 제가 쓰는 순서는 이렇습니다.

먼저 판단을 빼고 타임라인부터 적습니다. “누가 실수해서”가 아니라 “몇 시 몇 분에 무슨 일이 있었다”는 사실만. 그다음 근본 원인 한 줄 대신 기여 요인 여러 개를 나열합니다. 부족한 알림, 놓친 모니터링 지표, 애매한 롤백 절차, 몰려 있던 배포. 각각은 사소하지만 겹쳐서 장애가 된 것들입니다.

그리고 모든 질문을 사람이 아니라 시스템으로 돌립니다. “왜 그 시점에 그 정보로는 그 판단이 합리적이었나.” 마지막으로 액션 아이템에 반드시 오너와 기한을 붙입니다. 이게 없으면 회고는 잘 쓴 문서로 남았다가 조용히 죽습니다. 이 감각은 결함을 찾는 검사가 아니라 이해를 전달하는 대화라는 점에서 코드 리뷰의 본질과 닮았습니다.

여기에 하나를 더합니다. 감지 시간 자체를 줄이는 것. 아무리 좋은 회고도 장애를 늦게 아는 문제는 못 고칩니다. 예전에 한 팀에서 온콜 알림 체계를 다시 잡아 장애 인지 시간을 40% 가까이 줄인 적이 있습니다. 복구가 빨라진 게 아니라, 사람이 장애를 알아차리는 시점이 당겨진 겁니다. 그만큼 대응할 시간과 학습할 여유가 늘어납니다. 특히 AI가 만든 코드가 커밋의 상당 부분을 차지하는 지금, 사람이 미처 예상 못 한 실패 모드를 빨리 감지하는 능력은 더 중요해졌습니다.

결론

복구는 실력의 끝이 아니라 시작입니다. 불을 빨리 끄는 팀은 많지만, 같은 불이 다시 나지 않게 만드는 팀은 드뭅니다. 그 차이를 가르는 건 대응 매뉴얼의 두께가 아니라, 장애를 대하는 태도입니다. 근본 원인 하나를 지목하고 범인을 찾아 회고를 닫을 것인가, 아니면 여러 기여 요인을 드러내고 시스템을 고쳐 다음을 대비할 것인가.

다음 장애가 터지면 스스로에게 물어보시기 바랍니다. 우리는 이번에 무엇을 복구했고, 무엇을 배웠는가. 복구만 있고 학습이 없다면, 그 장애는 곧 다시 찾아옵니다.


참고 자료

자주 묻는 질문

블레임리스 포스트모템이란 무엇인가요? +

개인을 탓하지 않고, 왜 그 시점에 그 정보로는 그 판단이 합리적이었는지를 조사하는 장애 회고입니다. 사람을 고치려 하지 않고 시스템과 프로세스를 고치는 데 초점을 둡니다. 그래야 다음 장애가 숨지 않고 보고됩니다.

포스트모템은 어떻게 작성하나요? +

사실 기반 타임라인, 영향 범위, 단일 근본 원인 대신 여러 기여 요인, 그리고 오너와 기한이 붙은 재발 방지 액션 아이템으로 구성합니다. 판단과 비난이 아니라 관찰과 시스템 개선을 적습니다.

장애 대응에서 복구 시간(MTTR)이 왜 중요한가요? +

복잡한 시스템에서 모든 장애를 막는 것은 불가능하므로, 얼마나 빨리 복구하느냐가 신뢰성의 실질 지표가 됩니다. DORA 2024 기준 엘리트 팀은 배포 실패를 1시간 이내에 복구합니다.

장애의 근본 원인(root cause)은 하나로 정할 수 있나요? +

복잡한 시스템에서 단일 근본 원인은 존재하지 않습니다. 각각으로는 부족한 여러 기여 요인이 동시에 겹칠 때 장애가 됩니다. 원인을 하나로 지목하는 것은 기술적 결론이 아니라 탓할 대상을 찾으려는 심리에 가깝습니다.

이 글 공유하기

개발자 이력서, 코드만으로 충분할까요?

커리어노트가 당신의 강점을 정리해 드립니다

무료로 시작하기

관련 글

기술 부채는 갚는 게 아니라 관리하는 것이다

기술 부채는 갚는 게 아니라 관리하는 것이다

기술 부채를 0으로 만들겠다는 목표는 처음부터 틀렸다. 쓰이는 소프트웨어는 그대로 둬도 복잡도가 늘어나는 시스템이라, 부채는 제거할 결함이 아니라 이자율로 다루는 포트폴리오다. 커닝햄의 원래 비유와 파울러의 사분면으로 좋은 빚과 나쁜 빚을 가르고 우선순위를 매기는 법을 정리했다.

더 읽기
코드 리뷰는 코드를 보는 일이 아니다

코드 리뷰는 코드를 보는 일이 아니다

AI가 커밋 코드의 절반 가까이를 쓰는 지금, 리뷰 요청은 폭증하는데 리뷰하는 방식은 5년 전 그대로다. 문법과 결함 검출은 기계에 넘기고, 사람은 의도·경계·시스템 영향이라는 기계가 못 보는 층을 봐야 한다. 코드 리뷰의 본질은 처음부터 검사가 아니라 이해의 전달이었다.

더 읽기
AI가 짠 코드는 누가 테스트하는가

AI가 짠 코드는 누가 테스트하는가

AI가 코드 작성 비용을 거의 0으로 떨어뜨렸지만, 그 코드가 맞는지 판단하는 일은 여전히 사람의 몫입니다. 테스트 커버리지 숫자가 안심을 주지 못하는 이유, AI가 만든 테스트의 자기참조 함정, 그리고 검증의 책임을 어디에 다시 세워야 하는지 데이터와 함께 살펴봅니다.

더 읽기