중요도가 높은 서비스에서 장애가 발생했다. 원인을 따라가니 낮은 등급으로 분류한 서비스에 의존하고 있었다. 호출에 실패하면 폴백(Fallback)으로 요청을 처리하도록 했지만 이 경로도 동작하지 않았다.
낮은 등급으로 관리하던 서비스가 고객의 주요 기능을 멈춘 것이다. 서비스 등급만 보고는 그 서비스를 호출하는 요청이 고객에게 얼마나 중요한지 알기 어려웠다.
기존에는 의존 관계를 서비스 단위로 묶어 봤다. 어떤 서비스가 다른 서비스를 호출하는지는 알 수 있었지만 어떤 요청에서 호출하는지는 구분하기 어려웠다.
같은 서비스 안에서도 기능마다 의존 관계가 다르다. 일부 기능에서만 쓰는 서비스와 모든 요청이 거쳐야 하는 서비스를 같은 관계로 표현하면 실패했을 때의 영향을 판단하기 어렵다.
그래서 고객이 사용하는 기능에서 시작해 요청별 의존 관계를 확인할 방법을 검토했다. 어떤 서비스를 호출하고 그 호출이 실패하면 요청을 계속 처리할 수 있는지 볼 필요가 있었다. 다른 도구에서도 같은 정보를 사용할 수 있도록 조회 API도 검토했다. 당시에는 제공 가능 범위를 확인하는 단계였다.
의존하는 서비스를 모두 높은 등급으로 올리는 것도 부담이 있다. 등급이 올라가면 해당 팀이 지켜야 할 운영 기준과 대응 범위도 늘어난다. 먼저 고객 영향과 폴백의 동작 여부를 확인해야 불필요한 부담을 늘리지 않고 필요한 곳의 기준을 높일 수 있다.
폴백을 준비했어도 이번 장애처럼 실패 조건에서 동작하지 않을 수 있다. 일부 정보가 없어도 기능을 제공할 수 있다면 폴백으로 요청을 계속 처리하는지 검증해야 한다. 그 정보 없이는 요청을 처리할 수 없다면 의존 서비스의 운영 기준을 고객 영향에 맞춰야 한다.
이번 장애에서 낮은 등급은 낮은 고객 영향을 뜻하지 않았다. 그 서비스를 호출하는 주요 기능이 멈췄고 폴백도 막아주지 못했다. 서비스 등급을 정할 때는 해당 서비스의 역할뿐 아니라 실패하면 어떤 고객 기능이 멈추는지까지 확인해야 한다. 그 영향에 맞춰 등급을 다시 검토하거나 호출 실패를 견딜 수 있도록 바꿔야 같은 위험을 줄일 수 있다.