Karen
15k
2018-01-05 11:28:38
1
2934

실리콘밸리를 그리다 - 12. 사고를 쳐도 혼나지 않는 회사 (1/2)


12. 사고를 쳐도 혼나지 않는 회사


너의 실수를 부검한다 - 포스트모템(Postmortem)




우리는 모두 크고 작은 실수를 경험한다. 기업의 활동이 사람들의 크고 작은 결정들로 이루어지다 보니 작은 실수로 인해 큰 손실이 발생하는 일을 막을 수 없다.

어느 증권회사에서 $1,000짜리 1주를 팔아야 하는 상황에서 실수로 $1에 1,000주를 팔았다면 말 그대로 밀리언 달러의 손실을 입게 된다 (그런데 그것이 실제로 일어났습니다). 


내가 다니던 회사에서도 한 엔지니어의 단순한 실수로 데이터베이스가 복구 불가능한 상황이 되어, 클라우드 서비스가 24시간 가까이 정지된 일이 있었는데, 이 일로 회사에서 추정한 손실은 6억 원 정도였다. 아마도 회사의 신뢰도 손상으로 인한 기업 가치의 하락은 그것보다 더 크지 않았을까 싶다. 


한 사람의 의도하지 않은 단순한 실수가 큰 손실을 초래하기도 하지만, 여러 사람이 의논을 통해 결정한 내용이 천천히 시간을 두고 좋지 않은 결과로 나타나는 경우도 있다.

이러한 일을 방지하기 위해 ‘실수는 병가지 상사이니 다음에 잘하자'라고 다짐을 하는 것으로 충분한 것일까? 또는 책임자를 문책하는 것이 재발을 효과적으로 방지하는 방법일까?



포스트모템 (Postmortem)


실리콘밸리 기업들은 포스트모템을 통해 왜 문제가 일어났는지 분석하고 그 대책을 수립한다. 포스트모템(Postmortem), 우리말로 부검 또는 검시라고도 한다.

Post는 “후”, 모르템은 “죽음”이라는 뜻이다. 즉, 피해자(?)를 사망에 이르게 한 직,간접적인 원인을 사후에 총체적으로 알아내기 위한 방법이다. 


회사에서 일어나는 사고를 분석하고 예방하기 위한 방법론을 얘기할 때 왜 이런 차가운 느낌의 단어를 쓰는지 잘 모르겠지만, 비교적 캐주얼한 분위기의 실리콘밸리 기업들에서 엄중한 분위기의 미팅을 지칭하기에 알맞은 이름이라는 생각이 든다.

위키피디아의 포스트모템 페이지에 링크되어 있는 ZDNet의 기사에 성공적인 포스트모템의 포인트들이 잘 설명되어 있는데, 그 몇 가지를 아래에 정리해 보았다.


1. 모든 관계자를 초대하는 미팅

포스트모템은 관련자 모두가 참가하는 것이 바람직하다. 관리자들만 모이거나 팀의 일부만 모일 경우 핵심적인 정보나 통찰(insight)을 놓칠 수 있기 때문이다. 이를 위해 중요도가 높은 공식 미팅으로 일정을 잡되 가급적 사고 수습이 이루어진 직후에 하는 것이 좋다.


2. 시간 분석 (timeline)

사고가 일어난 과정과 그 대응 과정을 상세하게 기술한다. 언제 누가 어떤 정보를 접하고 어떤 결정을 내렸는지, 각 결정을 내리게 된 배경에 어떤 이유가 있었는지를 기술하다 보면, 시간을 거슬러 올라가 근원적 문제점(root cause)을 찾아내거나 복합적인 원인 분석을 하는데 한 발짝 더 가까이 다가갈 수 있다.


3. 잘된 일과 잘못된 일을 모두 인식한다

잘된 일은 모범 사례(best practice)로서, 잘못된 일은 보완해야 할 시스템의 약점을 찾아내는데 꼭 필요하다.


4. 책임자를 문책하는 미팅이 아니다

실수한 사람 또는 문제의 책임자에게 비난의 화살이 돌아간다면, 그 조직은 점점 책임을 회피하기 위해 정보를 각 팀(혹은 각 개인)의 입장에서만 해석하게 된다. 이렇게 되면 진정한 원인 분석을 통한 다음 사고를 예방한다든지, 시스템을 팀 차원에서 개선한다든지 하는 일이 힘들게 된다.


5. 개선책을 도출한다

단순히 피상적인 개선책만 세운다면 다음 사고를 앉아서 기다리는 것과 같다. 근원적 문제점을 찾기 위해 '5 Why'라고 하는 비교적 간단한 기법을 쓰기도 하는데, 이는 계속해서 다시 묻는 것이다. ‘그렇다면 그것은 왜 일어났는가?’ 껍질을 다섯 번 정도 벗기고 나면 우리는 양파의 속에 무엇이 있는지 알아볼 수 있다. 이렇게 해서 찾아낸 가장 근저에 있는 원인에 대한 개선책을 내는 것이다.


6. 공개한다

가능하다면 회사 전체와 공유하는 것이 좋다. 어떤 실수의 위험에 노출되어 있는지, 그를 예방하기 위해 어떤 노력을 하고 있는지, 여러 사람이 알 수록 업무 프로세스나 시스템을 개선하는데 정보 공유나 협조를 구하기 쉽다. 실수를 조직 전체가 지성적인 방법으로 간접 경험하는 그 자체로 가치가 있다.





포스트모템의 예: 집에서 일어나는 실수


우리 동네 초등학교에서는 아이들의 점심을 미리 온라인으로 주문하도록 되어 있다. 우리는 보통 한 달치를 아이들과 상의해서 주문한다.

열 몇 개의 메뉴가 매일 조금씩 바뀌는데, 그 중 아이들이 좋아하는 메뉴를 너무 반복했더니 아이들이 쉽게 질려해서, 가급적 다양한 메뉴를 접해볼 수 있도록 하고 있다.


어느 월요일, 팀원들과 함께 코드 리뷰를 하고 있었는데 모르는 번호로부터 전화가 왔다. 전화를 받아보니 학교였다. 아이가 교무실에 와 있는데, 아이 앞으로 점심식사가 준비되어 있지 않다는 것이다. 아차. 점심 주문을 잊고 있었다.

다행히 직장이 가까워서 회사의 카페에서 아이들 입맛에 맞게 샌드위치를 만들어서 학교로 달려갔다. 입을 삐죽 내밀고 기다리고 있던 둘째는 얼른 샌드위치를 들고 다른 아이들이 먹고 있는 테이블로 달려갔고, 다행히 점심식사 시간이 늦은 첫째는 이제 막 교실에서 나오는 길이라 중간에 만나서 전해줄 수 있었다. 아이들이 내가 만들어주는 샌드위치를 좋아해서 다행이다.


회사로 돌아간 나는 그 달치의 점심을 주문했지만, 이틀 전에만 주문이 가능하기 때문에 다음날 아침 아이들 도시락을 따로 준비해야 했다.

이런 일이 두 번째 일어났을 때, 우리는 이것을 문제로 인식하고, 간단한 예방책을 마련했다. 회사에서 일하던 도중 아이들 도시락을 부랴부랴 챙겨서 학교로 달려가는 일은 부모 입장에서나 아이 입장에서 즐거운 일은 아니다.

지금에서야 드는 생각이지만, 우리의 가장 큰 실수는 이 일이 처음 일어났을 때 문제로 인식하지 않은 일이다. 이 사건을 간단한 포스트모템의 형식으로 재구성하면 아래와 같다.




Post-mortem: 학교에서 아이의 점심이 준비가 안 되었음.


Overview

우리 아이는 학교에서 제공하는 점심을 먹는다. 그 점심은 미리 부모가 주문해 놓아야 제공되는데, 지난 달 말에 부모가 주문을 하는 것을 깜빡했다. 점심이 준비가 안 되어 아이가 점심을 굶을 위기에 처했다. 회사에서 전화를 받은 아빠는 급히 회사 카페에서 샌드위치를 만들어서 학교에 있는 아이에게 가져다주었다. 


Timeline

11:45 아이가 점심이 없는 것을 알게 되었다

11:47 아이가 교무실에 달려가 점심이 없다고 말함

11:48 아이 아빠가 전화를 받는다

11:55 아빠가 회사 카페에서 샌드위치를 만든다

12:10 샌드위치가 아이에게 배달되었다


Immediate Action

가장 빨리 준비할 수 있는 음식을 직접 배달한다. 

옵션 1: In-N-Out 햄버거 가게에서 햄버거를 사서 배달한다. 예상 소요시간 35분

옵션 2: 샌드위치를 만들어서 배달한다. 예상 소요시간 25분


Root Cause Analysis

점심을 오더 하는 것은 잊기 쉬운 일이다. 


5 Why Analysis:

아이들의 점심 주문이 되어 있지 않았다.

Why? 점심은 최소 2일 전에 미리 주문해야만 한다.

Why? 매월 말일 전날에 주문을 해야 했는데 잊었다.

Why? 아이들의 의견을 물어봐서 하려고 하다가 잊었다.

Why? 한 달에 한번 있는 일이라 잊기가 쉽다.

Why? 습관적으로 반복되지 않는 일은 잊기가 쉽다.


Discussions

한 달에 한 번 해야 하는 일이다 보니 잊기 쉽다. 하지만 더 자주 오더 하도록 바꾸면 실수를 더 자주 하게 되는 위험에 노출된다. 한 학기 치를 오더 하게 되면 아이의 입맛에 맞추기 어렵다는 단점이 있다. 휴대전화의 리마인더 기능을 이용하면 좋을 것 같다.


Preventative Measures

한 달에 한 번 한 달치를 아이들과 함께 상의해서 주문한다.

점심 주문은 아빠와 엄마가 같이 하는 것으로 해서 한 사람이 잊더라도 다른 사람이 기억하도록 한다.

두 사람의 휴대전화에 월간 리마인더를 설정하고 런치 주문이 완료되었을 때 해제한다.


Monitoring

주말에 아이들과 학교의 점심에 대화를 하고, 다음 주간 분량의 점심 메뉴를 같이 검토하는 것으로 전체적인 아이들의 점심 식사 만족도에 대한 모니터링을 한다.





구글의 포스트모템


구글이 공개한 “Site Reliability Engineering” 책에 예시로 등장한 실제 포스트모템 문서는 훨씬 전문적이다.


Summary

셰익스피어의 새로운 소네트가 발견되는 바람에 셰익스피어 검색이 폭증했고, 셰익스피어 검색이 66분 동안 다운되었다.


Impact

약 1.21 billion 검색 요청이 손실되었으나 매출에 영향 없음.


Root Causes

등록되어 있지 않은 검색어에 대한 검색 폭증과 시스템 리소스 누수의 복합적 원인으로 시스템이 단계적으로 다운됨.


Trigger

보통 발견되기 힘든 시스템 리소스 누수 버그가 단시간에 집중된 검색 트래픽 증가에 의해 발현됨.


Resolution

임시 클러스터로 용량 10배 증가. 검색 오류가 나지 않도록 검색 인덱스를 업데이트. 시스템 리소스 누수 버그 패치 완료.


Detection

모니터 시스템이 비정상적으로 증가한 시스템 에러(HTTP 500 응답 코드)를 감지하고 시스템 담당자를 호출함.


Action Items

  • 시스템 단계적 다운에 대한 업무 매뉴얼 개선 - 완료
  • 클러스터 간 부하 배분 개선
  • 시스템 단계적 다운에 대한 테스트
  • 검색어를 연속적으로 업데이트하는 방법 조사
  • 검색 랭크 서브시스템의 리소스 누수 버그 잡기 - 완료
  • 셰익스피어 검색의 부하를 완화하는 기능 추가
  • 검색 다운 시 서버가 응답하는 시나리오에 대한 시스템 테스트 추가
  • 검색 랭크 서브시스템 패치 - 완료
  • 시스템 오류 버짓 완전 소모로 인해 한 달간 프로덕션 시스템 업데이트 동결


Lesson Learned

잘 된 일

모니터 시스템이 빠르게 엔지니어들을 호출함

새로운 키워드를 포함한 셰익스피어 검색 시스템을 신속하게 설치함


잘 안 된 일

시스템이 단계적으로 다운되는 상황에 대한 연습 부족

이 일로 시스템 오류 버짓 완전히 소모됨


운이 좋았던 일

셰익스피어 애호가들로부터 새로운 소네트를 입수할 수 있었다

시스템 로그로부터 시스템 다운의 시작점을 찾아냄

새로운 검색어를 인덱스에 포함시키자 시스템 다운이 해결됨


Timeline (2015-10-21)

14:51 셰익스피어의 소네트가 새로 발견되었다는 뉴스 리포트

14:53 셰익스피어 검색 인덱스 트래픽이 88배 증가 (하지만 인덱스에 소네트 없음)

14:54 시스템 다운 시작

14:55 모니터 시스템이 담당자 호출 폭풍

14:57 셰익스피어의 모든 검색 트래픽에 검색 실패

14:58 시스템 담당자가 백엔드 검색 시스템 실패율이 비정상적으로 높은 것을 인지

15:01 사고 접수. Incident commander에 Jennifer.

15:02 누군가 우연히 shakespeare-discuss@ 이메일 리스트에 이메일을 보냈는데 셰익스피어 애호가인 Martym의 눈에 띔

15:03 Jennifer가 shakespeare-incidents@ 리스트에 사고 보고

15:04 Martym이 새로운 소네트를 찾아내고 검색 시스템 업데이트 문서를 찾기 시작

15:06 엔지니어들이 시스템 로그로부터 원인 분석 시작

15:07 Martym이 문서를 찾고 검색 시스템 업데이트 준비 작업 시작

15:10 Martym이 소네트를 추가하고 인덱스 작업 시작

15:18 Clarac 리소스 누수 버그 찾아냄

15:20 인덱스 작업 완료

15:28 트래픽을 더 많은 서버가 소화할 수 있도록 재분배

(중략)

15:36 시스템 회복 시작

(중략)

16:00 시스템 회복 완료

16:30 사고 해결 완료 (시스템 회복 후 30분 동안 정상 운영 조건 만족)






글: Aiden. 엔지니어링 매니저. 데이터 수집을 통한 프로세스 개선에 관심이 많음.



그림: Chili. 디자이너. 생각을 그림으로 요약하는데 관심이 많음.




실리콘밸리를 그리다 (https://brunch.co.kr/@svillustrated/13  )



♣ 에디터 : <12. 사고를 쳐도 혼나지 않는 회사> 의 나머지 이야기는 다음주에 이어집니다. :)


1
  • 댓글 1

  • 복족스
    89
    2018-01-05 13:56:17

    우리회사에도 도입하면 참 좋겠다 싶을정도로 멋진 방법이네요.. 감사합니다.(모두가 모일 수 있는 시간을 낼 수 없다는게 함정이지만요)

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.