On Call
아마존에 오기 전 아마존이 다닐만한 회사인지 조사하는 데, 온콜에 대한 불만을 토로하는 글이 많이 보였다. 온콜이 뭐길래 그러지? 사전을 찾아보니 다음과 같이 설명되어 있다. 우리 말로 하면 '당직'과 비슷한 개념일 것 같다.
on call: (of a person) able to be contacted in order to provide a professional service if necessary, but not formally on duty. Your local GP may be on call round the clock.
온콜은 서비스 긴급 상황에 대응할 전담 인원으로 팀원들이 한 주씩 돌아가며 맡는다. 온콜을 맡은 한 주 동안은 프로젝트 업무 대신 장애 대응 및 운영 업무를 하게 된다. 평상 업무 시간에는 서비스 점검, 배포, 운영 매뉴얼 업데이트 등의 작업를 하고, 긴급 상황이 발생하면 즉시 해당 이슈에 대응한다. 한밤중이나 새벽, 주말에 상관 없이 항상 대응해야 하니 분명 달가운 일은 아니다.
면접관에게 온콜을 어떻게 생각하는지 물어보기도 했다. 면접관은 온콜이 즐거운 것은 아니지만 긍정적인 효과도 있다는 점을 강조했다. '아마존에서는 자기이 만든 서비스를 자기가 책임지는 것이 기본 원칙이다, 한밤중에 호출되는 것은 괴로운 일이므로 그런 일이 생기지 않도록 안정적인 시스템을 만들려고 더 노력하게 된다'고 했다. 듣고 보니 그럴듯 했다. 면접관 입장에서 회사에 대한 불평 불만에 동조할 수는 없었을 테니 당연한 대답이기도 했다. 어쨌든 아마존 직원 중 온콜을 좋아하는 사람은 없다.
아마존에서 근무한 지 세 달쯤 되어 온콜 로테이션에 합류했다. 온콜 로테이션 합류 전에 세 달이나 시간이 있었던 것은 그 당시 팀에 여유가 있었기 때문이다. 일부 팀원이 다른 팀으로 옮기고 퇴사한 사람도 생겨 팀원 수가 줄어들자 일정이 빡빡해졌다. 최근에는 다시 팀원이 늘어 로테이션에 조금 여유가 생겼다. 나에겐 기쁜 일이고 새로 합류한 사람들에겐 반갑지 않은 일이겠지만, 새로 합류한 사람들은 한 달 정도의 적응 기간이 지나자 바로 온콜 로테이션에 들어왔다.
얼마 전 다섯 번째 온콜을 마쳤다. 온콜을 맡으면 한 주 내내 신경이 곤두선다. 여전히 아는 것보다는 모르는게 많다. 간단한 이슈는 그럭저럭 처리하지만 알지 못하는 문제가 생기면 어떡하나 항상 불안하다. 온콜 주간에는 제발 삐삐가 울리지 않기를 바랄 뿐이다. 그래도 많이 나아졌다. 처음에는 삐삐가 울리면 안절부절 못했지만 이젠 조금 여유가 생겼다. 가장 최근 온콜에서는 삐삐가 다섯 번밖에 안 울렸다. 세 번은 업무 시간에 울렸고 두 번은 새벽에 울렸다. 이 정도면 아주 편안하게 지나갔다 할 수 있겠다.
우리 팀은 티어1 서비스를 네 개나 가지고 있다. 티어1 서비스란 장애 발생 시 고객이 주문을 할 수 없게 되는 서비스를 뜻한다. 특히 디바이스 프락시는 모든 디바이스에서 오는 요청을 다운스트림 서비스로 중계하는 역할을 하므로 디바이스 프락시가 다운되면 아마존 비디오 전체가 먹통이 될 수 있다. 그러나 디바이스 프락시에 문제가 생기는 경우는 거의 없다. 대부분의 경우는 다운스트림 서비스에 문제가 생겨 알람이 울린다.
마이크로 서비스 아키텍처로 각 서비스는 비교적 단순한 작업을 처리하지만, 워낙 트래픽이 많기 때문에 서비스 당 서버가 수십 대에서 많게는 수천 대에 이를 수도 있다. 따라서 일부 서버에 문제가 생긴다고 해서 전면 장애로 확대되는 경우는 거의 없다. 서비스 상태를 확인하고 이상 징후 발생 시 알람을 가동시키는 내부 모니터링 시스템이 잘 갖춰져 있다.
장애가 감지되면 즉각 알람이 울리고 티겟이 생성되어 온콜에게 할당된다. 티켓은 사태의 심각성에 따라 SEV1, SEV2, SEV3 등으로 나뉘는데, SEV1의 등급이 가장 높다. 할당된 티켓 등급이 SEV2 이상인 경우 스마트폰에 설치된 삐삐 앱을 통해 온콜이 호출된다. 온콜 호출 시 즉각 대응이 필요하기 때문에, 이 온콜 삐삐 앱은 휴대폰의 매너 모드를 무시하고 무조건 시끄러운 사이렌 소리를 낸다. 이 소리를 들으면 자다가도 화들짝 놀라 깨지 않을 수 없다.
SEV1은 발생 시 즉각적인 주문 감소로 이어질 수 있어 파급 효과가 크다. SEV1이 발생하면 온콜이 호출될 뿐 아니라 장애 대응 컨퍼런스 콜이 소집된다. 온콜은 컨퍼런스 콜에 참여해 현재 상태를 보고하고 주기적으로 상황을 업데이트해야 한다.
내가 온콜이었을 때 SEV1 장애가 두 번이나 발생해 컨퍼런스 콜에 참석한 적이 있다. 한국 회사 같으면 위에서 위에서 불호령이 떨어지고 엔지니어들은 식은 땀을 흘리며 문제를 해결하는 그림이 일반적이지만, 아마존에서는 그렇게 살벌한 분위기는 아니었다. 그러나 실수한 내용에 대해서는 철저히 원인을 분석하고 문서로 남겨 같은 실수를 반복하지 않게 한다.
SEV2 역시 즉각 대응이 필요하다. 온콜은 호출되면 가능한 빨리 체크인 해 티켓 상태를 Researching
으로 업데이트해야 한다. Researching
상태 에서는 주어진 시간 안에 Work in Progress
로 업데이트해야 한다. 정해진 시간 안에 티켓 상태를 업데이트를 하지 못하면 매니저가 호출된다. 티켓 상태가 Work in Progress
면 해당 티켓을 해결할 조금 길게 주어진다. SEV1일 때보다 SEV2일 때 간 단계별로 주어지는 시간이 더 길다.
SEV2는 일상적인 장애다. 사용자는 장애가 발생했는지 눈치채지 못할 것이다. 그러나 SEV2에 즉각 대응하지 않으면 상황이 심각해 질 수 있고 결국 사용자에게 영향을 줄 수도 있다. 잠시 기다리면 문제가 해결되는 경우도 많지만, 다운스트림 서비스 온콜을 호출해야 하는 경우도 있다.
아마존 직원이라면 누구나 첫 온콜에 대한 기억이 있을 것이다. 그래서인지 온콜 교육 자료 중에 첫 온콜을 맡았을 때의 심경을 말하는 인터뷰 동영상도 포함되어 있다. 간단히 요약하면 '첫 온콜이 두려웠지만 잘 해냈다, 무엇보다도 온콜은 혼자 하는 게 아니라 팀이 같이 하는 것이고, 내가 해결히지 못하면 관리자와 다른 팀원이 도와주기 때문에 너무 걱정할 필요는 없다'는 내용이다.
처음 온콜을 맡으면 할 줄 아는 게 거의 없기 때문에 매니저도 함께 온콜을 하는 것과 마찬가지다. 삐삐가 울려도 할 수 있는 게 없어 매니저를 호출할 수밖에 없다. 그리고 매니저와 티켓을 함께 처리하며 어떻게 대응하는지 배운다. 이렇게 티켓을 몇 개 처리하고 나면 이슈 패턴을 알게 되고 기본적인 문제를 처리할 수 있게 된다.
그런 면에서 온콜은 교육을 강제하는 효과가 있는 것 같다. 적극적으로 나서지 않으면 배울 수 없는 일, 귀찮은 운영 업무 등을 짧은 시간에 강제로 배우게 된다. 그리고 팀에서 개발하고 운영하는 시스템을 더 잘 이해할 수 있게 된다. 온콜이 없었다면 지금보다 시스템을 이해하는 정도가 훨씬 낮았을 것 같다. 온콜을 하면서 여러 지표를 보는 방법, 시스템의 문제를 빠르게 찾는 방법을 배웠다.
그리고 어떻게 하면 운영 부담을 줄일 수 있을지 고민하게 되었다. 서비스 개선이나 팀 운영 등의 거창한 차원이 아니라, 어떻게 한밤중에 삐삐좀 덜 울리게 할 수 없을까 하는 고민 말이다. 면접관이 했던 말이 맞는 것 같다.