서비스를 운영하는 입장에서 누구든 그렇겠지만 장애는 달갑지 않은 손님입니다. 하지만 장애는 찾아오지 말란다고 오지 않는 존재는 아닙니다. 안정적인 서비스 제공을 위해서는 언제나 장애가 발생하지 않도록 예방하고 만약에 장애가 발생한다면 이를 신속히 인지하고 처리하는 노력을 기울여야 합니다.
오늘은 최근 있었던 서비스 장애 사례를 가지고 이야기를 해 볼까 합니다.
다른 장애와 마찬가지로 이번 장애는 예고 없이 찾아왔습니다. 최근 릴리즈 한 기능에서 사용한 라이브러리의 특정 버전에서 발생하는 버그로 인하여 장애가 발생하였고, 이로 인해 일부 기능이 동작하지 않는 문제가 생겼습니다.
일반적으로 신규 기능 출시 및 기존 기능 개선을 위한 릴리즈 작업 시에는 회사 내 SW QA 조직의 검증 프로세스를 거쳐 검증이 완료된 경우에만 운영 환경 릴리즈를 진행합니다. 하지만 이번 케이스는 검증 단계에서 바로 재현이 되는 것은 아니었고, 마치 우리 몸에 쌓이는 피로도와 같이 서서히 누적되다가 어느 순간 빵 터졌습니다.
그러나 문제는 지금부터였습니다. 장애는 어떤 서비스에서든지 발생할 수 있습니다. 하지만 장애가 발생한 경우 빠르게 조치해야 하는데 이를 인지하지 못하면 오랜 시간 동안 장애가 복구되지 않아 서비스를 이용하는 고객들의 신뢰를 잃어버릴 수 있습니다. 이번 장애 케이스는 바로 그런 케이스였습니다. 장애 발생은 새벽 5시에 이루어졌고, 개발팀은 장애가 발생했다는 사실을 오전 11시가 돼서야 인지할 수 있었습니다.
장애 발생 사실 인지 후 우선 가장 먼저 진행한 일은 원인을 분석하는 일이었습니다. 애플리케이션 로그 및 데이터베이스에 저장된 데이터를 확인하고, 로그를 통해 장애 원인을 파악 후 장애 해결을 위해 긴급 릴리즈를 진행했습니다. 라이브러리의 버전을 교체하는 작업이었습니다.
사실 장애 발생 사실을 인지하고 원인 분석 후 조치하는 데까지는 20~30여분 정도가 소요되었습니다. 하지만 실제 장애가 발생한 시각과 개발팀이 장애 발생 사실을 인지하는 시간의 간격이 약 5 ~ 6시간이 걸렸기 때문에 고객들은 해당 시간 동안 일부 서비스를 이용할 수 없었습니다.
이후 장애 보고서를 작성하여 어떤 부분이 미흡했는지 파악하고 팀원들과 이번 장애에 대해 회고하는 시간을 가졌습니다. 가장 큰 문제는 장애 인지 시각이었고 이를 보완하기 위한 여러 가지 아이디어가 도출되었습니다.
현재 개발/운영하고 있는 서비스는 Infrastructure에 대한 모니터링은 수행하고 있지만 별도로 APM(Application Performance Management) 도구를 사용하고 있지 않습니다. 일부 중요 로직에는 Exception 처리 부분에 개발자들이 알림을 받을 수 있도록 처리한 부분이 존재하지만 전체적으로 설정한 것은 아니기 때문에 언제든지 개발자들이 인지하지 못하는 장애가 발생할 수 있습니다.
가장 좋은 방법은 APM을 사용하는 것입니다. APM 제품마다 차이는 있겠지만 대부분 애플리케이션의 에러 로그 탐지 및 프로세스 체크, URL 상태 체크, DB Slow Query 분석 등의 기능을 제공합니다. 이를 이용하여 애플리케이션의 Health를 꾸준히 건강하게 유지할 수 있습니다.
그리고 만약 APM 제품의 알림 기능이 부족하다면 Pagerduty와 같은 인시던트 관리 서비스를 이용하는 것도 하나의 방법입니다. 인시던트 관리 서비스는 고객이 인시던트 발생 여부를 빠르게 인지하고 처리할 수 있도록 Email, SMS, VoiceCall, 모바일 앱 등 다양한 수단의 알림 기능을 제공하고 인시던트가 일정 시간 동안 처리되지 않으면 다음 담당자에게 알림을 보낼 수 있는 에스컬레이션 기능을 지원하고 있습니다. 해외에는 Pagerduty 뿐만 아니라 OpsGenie, Splunk On-call 등의 서비스가 있고 국내에는 AlertNow 서비스가 존재합니다.
서비스 장애는 언제든지 예고 없이 찾아올 수 있습니다. 기장 좋은 방법은 장애가 발생하지 않도록 예방하는 것이고, 장애가 발생하더라도 고객이 서비스를 이용하는 데 불편함이 적도록 빠른 복구를 위한 가이드라인을 만들어 이를 실전에 활용해야 할 것입니다. 장애는 여태까지 발생하지 않았다고 해서 앞으로도 발생하지 않으리라는 보장은 없습니다. 안정적인 서비스를 제공하기 위해서는 평소 서비스 장애에 관심을 가지고 계속 꾸준히 노력해야 할 것입니다.