6장. 장애는 어떻게 보이는가

장애 대응에서 확인된 사실과 가설을 분리하는 법

장애 대응 채널에는 무엇을 나눠 적어야 하나요?

확인된 사실, 검증 중인 가설, 실행한 조치 세 종류를 분리합니다. 배포 시각과 장애 시각이 겹친다는 것은 사실이고, 그 변경이 원인이라는 것은 아직 가설입니다. 나누지 않으면 초기 가설이 확정된 사실처럼 굳습니다.

화요일 오전 10시 16분, 결제 확인 지연 알림이 울리자 장애 대응 채널이 열렸다. 주문은 완료됐지만 일부 사용자에게 결제 확인 화면이 늦게 나타나고 있었다.

운영 책임자 수진이 첫 메시지를 올렸다.

“결제 확인 지연 비율이 10시 12분부터 올라갔습니다. 자동 알림은 10시 14분에 발생했습니다.”

서비스 기획자 지민이 바로 답했다.

“새 결제 확인 화면을 10시 5분에 배포했으니 그 변경이 원인 아닌가요?”

개발자 현우가 답했다.

“시각은 겹칩니다. 다만 이번 변경은 결제 상태 조회 호출 자체를 바꾸지는 않았습니다.”

수진이 고객 문의 내역을 덧붙였다.

“첫 문의는 10시 8분입니다. 현재 확보한 가장 이른 사용자 증거입니다.”

현우가 로그와 실패 요청 하나의 트레이스를 함께 올렸다.

“우리 서비스가 보낸 외부 결제 상태 조회 호출이 제한 시간 안에 끝나지 않았습니다. 이 트레이스에서는 주문 서비스 구간에 두드러진 오류나 지연이 보이지 않았고, 결제 상태 조회 스팬에서 시간이 많이 소비됐습니다.”

지민이 물었다.

“그럼 외부 결제사가 원인인가요?”

“타임아웃이 기록된 사실과 한 요청의 긴 스팬까지 확인됐습니다. 왜 그 구간이 길어졌는지는 아직 가설입니다.”

“원인이 확정되기 전이라도 새 화면을 먼저 닫을까요?”

수진이 답했다.

“사용자 영향을 줄이기 위해 노출을 중단하겠습니다. 이후 지연 비율과 외부 응답 조건을 함께 보겠습니다.”

수진은 채널 상단에 세 줄을 고정했다.

확인된 사실

검증 중인 가설

실행한 조치

초기 가설이 확정 사실처럼 굳지 않으려면 이 세 종류를 분리해야 했다.

장애는 신호를 통해 드러난다

대응팀은 시스템과 사용자가 남긴 신호를 통해 내부 상태를 추론한다. 사용자 문의, 메트릭 변화, 로그 기록, 트레이스, 배포 이력이 그 신호다.

관측 가능성은 이런 외부 신호로 시스템 내부에서 어떤 일이 일어나는지 질문하고 추론할 수 있는 정도를 뜻한다.

모니터링은 미리 정한 상태와 조건을 지속적으로 수집·표시하고 기준을 벗어나면 알림을 보낸다. 관측 가능성은 그 신호를 연결해 예상하지 못한 질문도 조사할 수 있게 한다. 둘은 경쟁하는 개념이 아니라 탐지와 조사를 함께 지탱한다.

장면에서 결제 확인 지연 조건을 감시해 알림을 울린 것은 모니터링이다. 최근 화면 변경과 외부 응답 지연 중 무엇이 영향을 줬는지를 좁히려면 여러 신호를 연결해야 한다.

애플리케이션과 시스템이 외부로 내보내는 관측 데이터를 텔레메트리라고 한다. 로그·메트릭·트레이스가 대표적이다. 필요한 상태가 기록되지 않았거나 보존되지 않았다면 장애 뒤에 그 빈칸을 완전하게 복원하기 어렵다.

자료의 양만 늘린다고 판단이 정확해지는 것은 아니다. 무엇을 수집했고 어떤 조건이 빠졌는지, 수집과 표시가 얼마나 늦었는지를 함께 본다.

관측 공백도 기록 대상이다. 필요한 메트릭이 없었는지, 로그에 버전과 환경이 빠졌는지, 트레이스가 서비스 경계에서 끊겼는지를 남겨야 다음 장애에서 같은 추측을 반복하지 않는다. 관측 가능성은 신호를 많이 모으는 경쟁이 아니라, 필요한 질문에 답할 수 있도록 기록의 연결성과 품질을 설계하는 일이다.

메트릭은 규모와 변화를 보여 준다

메트릭은 서비스 실행 중 측정한 수치를 시간과 속성에 연결해 기록한 신호다. 많은 측정을 집계해 요청량, 오류, 지연, 자원 사용의 규모와 추세를 보여 준다.

장면에서는 결제 확인 지연 비율이 변했다. 그래프를 통해 변화가 시작된 것으로 관측된 시각과 규모, 영향이 집중된 환경·버전, 조치 전후의 방향을 볼 수 있다.

집계 수치에는 개별 요청의 맥락이 가려질 수 있다. 전체 평균이 정상이어도 특정 결제수단이나 일부 단말에서만 지연이 커질 수 있다. 오류율이 상승해도 어떤 사용자의 요청이 어느 구간에서 실패했는지는 알 수 없다. 반대로 집계 값이 경보 기준에 도달하기 전에 사용자가 먼저 불편을 신고할 수 있다.

이 사례의 시각은 서로 다른 증거를 뜻한다.

첫 문의가 접수된 오전 10시 8분은 현재 확보한 가장 이른 사용자 증거다. 실제 첫 영향은 더 앞서 시작됐을 수 있다. 지연 메트릭은 10시 12분부터 변한 것으로 관측됐고, 자동 알림은 10시 14분에 발생했다.

사건이 실제로 일어난 시각, 시스템이 기록·수집한 시각, 대응팀이 화면이나 알림으로 인지한 시각은 다를 수 있다. 그래프의 시간 단위와 집계 대상, 수집 지연을 함께 보아야 하는 이유다.

로그는 사건을 기록한다

로그는 특정 시각에 발생하거나 관측된 사건, 오류, 상태 변화를 기록한다.

사건 시각, 발생 서비스, 환경, 버전, 심각도, 상관 식별자 같은 속성이 함께 남으면 다른 신호와 연결하기 쉽다.

장면의 로그는 우리 서비스가 보낸 외부 결제 상태 조회 호출이 호출자에게 허용된 시간 안에 완료되지 않았다는 사건을 보여 줬다. 이 기록은 중요한 단서다.

그러나 로그 한 건만으로 같은 사건의 빈도와 영향 대상, 그 사건이 원인인지 결과인지를 알 수는 없다. 외부 응답이 느렸을 수도 있고, 내부 처리나 다른 하위 호출 때문에 해당 구간 안에서 시간이 소비됐을 수도 있다.

그래서 로그에서 확인된 사실은 다음과 같다.

외부 결제 상태 조회 호출에서 타임아웃 사건이 기록됐다.

다음 문장은 아직 가설이다.

외부 결제사의 응답 지연이 이번 장애의 원인이다.

알림도 원인명이 아니다. 정한 메트릭이나 로그 조건이 기준을 벗어나 조사가 필요하다는 신호다. 알림 이름과 발화 조건은 무엇을 먼저 볼지 알려 주지만 장애의 발생 메커니즘을 대신 설명하지 않는다.

오전 10시 5분 화면 변경 배포, 10시 8분 첫 고객 문의, 10시 12분 지연 메트릭 상승, 10시 14분 자동 알림, 10시 16분 장애 대응 시작이 시간 순서로 표시된다. 각 사건은 변경, 사용자 증거, 시스템 신호, 대응 네 줄로 나뉘어 어떤 종류의 기록인지 구분된다. 첫 고객 문의에는 현재 확보한 가장 이른 사용자 증거라는 설명이 붙고, 배포 시각과 원인은 다르다는 표시와 사실과 가설을 분리해 기록하라는 경고가 있다.
그림 7. 첫 고객 문의, 메트릭 변화, 자동 알림, 대응 시작은 서로 다른 시각에 나타난다. 시간선에는 확인된 사건과 검증 중인 가설을 구분해 기록한다.

장애 대응에서 먼저 맞춰야 할 것은 원인 이름보다 사건과 신호, 조치의 시간 순서다.

배포는 10시 5분에 끝났다. 첫 문의는 10시 8분이었다. 메트릭은 10시 12분부터 상승한 것으로 보였고, 알림은 10시 14분에 울렸다. 대응팀이 공동 조사를 시작한 시각은 10시 16분이었다.

이 순서는 원인을 자동으로 확정하지 않는다. 대신 어느 시점에 어떤 근거를 얻었고, 어떤 가설이 생겼으며, 조치 뒤 어떤 신호가 변했는지를 보여 준다.

사후 자료가 추가되면 최초 영향 추정 시각은 더 앞당겨질 수 있다. 사건 시각과 관측 시각, 대응팀의 인지 시각을 나눠 기록해야 하는 이유다.

시간선에는 판단이 바뀐 순간도 남긴다. 처음에는 최근 변경을 우선 가설로 두었다가 외부 응답 지연 자료가 추가돼 가설의 우선순위가 달라질 수 있다. 이런 변화는 대응이 흔들렸다는 뜻이 아니라 새로운 증거에 맞춰 설명을 수정한 과정이다.

한 요청의 경로를 잇는 트레이스

트레이스는 하나의 요청이 여러 구성 요소를 지나간 경로를 연결한 기록이다.

장면의 결제 확인 요청은 다음 흐름을 지났다.

사용자 화면

→ 주문 서비스

→ 결제 상태 조회

→ 확인 화면 표시

트레이스를 이루는 개별 처리 구간을 스팬이라고 한다. 스팬에는 시작과 종료 시각, 상태, 속성, 앞뒤 관계가 담길 수 있다.

실패 요청 하나에서는 주문 서비스 구간에 두드러진 오류나 지연이 보이지 않았고, 결제 상태 조회 스팬이 길었다. 긴 스팬은 해당 계측 구간 안에서 시간이 많이 소비됐다는 뜻이다. 외부 응답 대기, 내부 처리, 재시도, 하위 호출 중 무엇이 시간을 사용했는지는 스팬 속성과 연결 기록을 더 봐야 한다.

스팬이 겹쳐 실행될 수 있으므로 모든 스팬 시간을 더한 값이 요청의 전체 경과 시간은 아니다. 트레이스는 시간이 소비된 위치를 좁혀 주지만 이유를 자동으로 확정하지 않는다.

한 요청의 로그와 스팬을 연결하려면 같은 흐름이라는 표시가 필요하다. 트레이스 ID나 조직이 정의한 상관 식별자가 서비스 경계를 따라 이어지면 흩어진 기록을 묶기 쉽다. 이름과 형식은 시스템마다 다르므로 어느 식별자가 어디까지 전달되는지 확인한다.

상관 식별자에는 사용자 이름이나 주문 원문 같은 민감정보를 직접 넣지 않고 내부에서 관리하는 별도 값을 사용한다.

기록의 공백도 남을 수 있다. 모든 요청을 저장하지 않는 샘플링, 계측 누락, 문맥 전달 실패, 수집 지연, 보존 기간 때문에 일부 요청이나 스팬이 보이지 않을 수 있다.

트레이스 부재는 요청 부재가 아니라 기록 부재일 수 있다. 한 트레이스가 보인다고 전체 실패 요청이 같은 경로를 가졌다고 단정하지도 않는다.

이 트레이스에서는 결제 상태 조회 스팬이 길었습니다. 다른 실패 요청에서도 같은 패턴이 나타나는지 보겠습니다.

세 패널이 메트릭, 로그, 트레이스를 비교한다. 메트릭 패널은 오류율·지연·처리량을 시간에 따라 보여 주며 규모와 추세를 나타낸다. 로그 패널은 10시 12분의 결제 요청 실패, 재시도 시작, 외부 결제 서비스 타임아웃, 재시도 실패, 결제 승인 실패를 차례로 기록한다. 트레이스 패널은 앱과 웹 80밀리초, API 220밀리초, 결제 서비스 40밀리초, 데이터베이스 30밀리초로 이어지는 한 요청의 경로와 총 370밀리초를 보여 준다. 세 신호를 함께 봐야 원인을 좁힐 수 있다는 설명이 붙어 있다.
그림 8. 메트릭은 규모와 추세, 로그는 개별 사건과 상태, 트레이스는 한 요청의 경로와 구간 시간을 보여 준다. 같은 장애라도 세 신호가 보여 주는 범위는 서로 다르다.

같은 장애도 집계 수치, 개별 사건, 요청 경로에서 서로 다른 모습으로 나타난다.

메트릭으로 변화 범위와 규모를 좁힌 뒤 같은 시간대와 대상의 로그에서 사건을 찾을 수 있다. 개별 로그와 트레이스는 상관 식별자로 연결해 한 요청의 경로를 본다.

이 순서는 고정 공식이 아니다. 사용자 문의, 로그, 트레이스 중 어느 자료가 먼저 단서를 줄지는 상황마다 다르다. 각 자료가 보여 주는 범위를 알고 공통 시간·서비스·환경·버전과 개별 상관 식별자를 구분해 연결하는 일이 중요하다.

교통 관제실로 보는 관측 신호

교통 관제실의 평균 속도와 통행량은 전체 정체 규모를 보여 준다. 사고 신고는 특정 사건을 남기고, 차량 한 대의 경로는 어느 구간에서 지연됐는지를 보여 준다. 한 신고나 한 차량이 전체 정체를 대표하지는 않는다.

우회로로 통행을 회복시킨 뒤에도 사고 원인 조사가 남는다. 실제 소프트웨어에서는 요청이 분기·재시도되고 관측 자료도 지연되거나 일부만 저장될 수 있어 신호의 생성·수집 범위를 함께 봐야 한다.

사실과 가설을 분리해 기록한다

장애 대응 중에는 관측 사실, 가능한 설명, 실행한 조치, 조치 뒤 결과가 빠르게 쌓인다. 이 네 가지를 섞으면 추측이 확정 사실처럼 공유된다.

첫 문의와 지연 메트릭 상승, 타임아웃 로그, 한 트레이스의 긴 스팬은 현재 확인된 사실이다. 최근 화면 변경과 외부 응답 지연, 두 조건의 결합은 검증 중인 가설이다.

사용자 영향 완화를 위해 새 화면 노출을 중단한 뒤 결제 확인 지연 비율이 내려갔다. 같은 시기에 외부 응답 조건도 정상 범위로 돌아왔다.

이 결과만으로 어느 가설이 맞았는지 즉시 확정하기는 어렵다. 화면 노출 중단이 영향을 줄였을 수도 있고, 외부 응답 조건의 회복이 영향을 줬을 수도 있다. 두 변화가 함께 작용했을 가능성도 남는다.

반박된 가설과 보류된 판단도 기록한다. 어떤 경로를 살폈고 왜 제외했는지가 남아 있으면 같은 조사를 반복하지 않는다.

최근 변경과 회복을 검증한다

배포 시각과 오류 증가 시각을 겹쳐 보는 일은 중요하다. 최근 변경은 조사 우선순위를 높이는 강한 단서다.

원인 후보로 검증할 때는 세 가지를 본다.

1. 변경 대상이 실제 실패 경로와 영향 사용자에 포함됐는가
2. 변경 전후 요청 동작이 어떻게 달라졌는가
3. 되돌림 뒤 결과와 같은 시각의 다른 조건 변화는 무엇인가

장면의 새 화면은 결제 상태 조회 호출 자체를 바꾸지 않았다. 그렇다고 변경의 영향을 바로 제외할 수도 없다. 호출 시점이나 대기 처리, 화면 상태 갱신 방식에 간접 영향이 있었는지는 추가 분석이 필요하다.

원인을 모두 규명하기 전에 사용자 영향을 줄이는 완화 조치를 먼저 실행할 수 있다. 새 화면 노출 중단의 첫 목적도 발생 메커니즘을 확정하는 일이 아니라 결제 확인 지연을 줄이는 일이었다.

영향을 받던 기능의 지표와 사용자 증상이 정한 정상 범위로 돌아오면 해당 장애의 사용자 영향이 회복됐다고 판단한다. 신규 지연 문의 증가가 멈추고 결제 확인 지표가 정상 범위로 돌아왔는지, 주문 완료 상태에 추가 이상이 없는지도 본다.

사용자 영향 회복, 공동 대응 종료, 사후 분석 완료는 서로 다른 상태다. 회복 뒤에는 다음 세 묶음이 남는다.

  • 최근 변경과 외부 응답 지연의 기여 범위
  • 탐지와 추적 과정에서 생긴 공백
  • 재발 가능성과 영향을 줄이기 위한 추가 조치

장애를 드러낸 사건과 발생 메커니즘, 영향을 키운 조건도 구분한다. 트리거는 잠재된 문제를 실제 장애로 드러나게 한 사건이다. 원인은 장애가 어떤 메커니즘과 구조적 조건으로 발생했는지를 설명한다. 기여 요인은 장애 확대·탐지 지연·복구 지연에 영향을 준 조건이다.

복잡한 장애는 하나의 원인만으로 설명되지 않을 수 있다.

사실과 가설을 나눈 장애 보고

장애 채널 초반에는 두 문장이 빠르게 올라왔다.

“새 화면을 배포했으니 그 변경이 원인 아닌가요?”

“외부 결제 상태 조회에서 타임아웃이 기록됐습니다.”

현재 상태를 정확하게 보고하면 다음과 같다.

오전 10시 8분에 현재 확인된 첫 결제 확인 지연 문의가 접수됐고, 10시 12분부터 지연 메트릭이 상승한 것으로 관측됐습니다. 외부 상태 조회 타임아웃 로그와 한 실패 요청의 긴 스팬을 확인했지만, 최근 화면 변경과 외부 응답 지연의 기여 범위는 아직 검증 중입니다. 새 화면 노출을 중단한 뒤 결제 확인 지연은 정상 범위로 돌아왔습니다.

회복 상태와 남은 분석도 분리한다.

영향을 받던 기능의 사용자 증상은 회복됐습니다. 원인과 기여 요인, 탐지 지연과 추적 공백은 사후 분석으로 이어갑니다.

회의에서는 다음 세 문장으로 장애의 증거를 확인한다.

1. 지금 확인된 사실과 아직 검증 중인 가설은 각각 무엇인가요?
2. 메트릭·로그·트레이스는 어느 시간·서비스·버전·요청 범위를 보여 주나요?
3. 실행한 완화 조치 뒤 어떤 신호가 어떻게 변했고, 원인 분석에는 무엇이 남았나요?

장애 대응에서는 가장 그럴듯한 설명을 먼저 고르는 대신, 신호의 범위와 시간선을 맞추며 가설을 줄여 가야 한다.


이 장에서 함께 다루는 질문

로그에 타임아웃이 찍혔으면 외부 서비스가 원인인가요?

로그 한 건만으로는 같은 사건의 빈도와 영향 대상, 그 사건이 원인인지 결과인지 알 수 없습니다. 외부 응답이 느렸을 수도 있고 내부 처리나 다른 하위 호출 때문에 해당 구간 안에서 시간이 소비됐을 수도 있습니다.

알림 이름이 원인을 알려주나요?

알림도 원인명이 아닙니다. 정한 메트릭이나 로그 조건이 기준을 벗어나 조사가 필요하다는 신호입니다. 알림 이름과 발화 조건은 무엇을 먼저 볼지 알려 주지만 장애의 발생 메커니즘을 대신 설명하지 않습니다.

트레이스가 안 보이면 그 요청이 없었던 것인가요?

트레이스 부재는 요청 부재가 아니라 기록 부재일 수 있습니다. 모든 요청을 저장하지 않는 샘플링과 계측 누락, 문맥 전달 실패, 수집 지연, 보존 기간 때문에 일부 요청이나 스팬이 보이지 않을 수 있습니다.

장애 시각은 하나로 적으면 되나요?

사건이 실제로 일어난 시각, 시스템이 기록하고 수집한 시각, 대응팀이 화면이나 알림으로 인지한 시각은 다를 수 있습니다. 나눠 기록해야 사후 자료가 추가됐을 때 최초 영향 추정 시각을 앞당길 수 있습니다.

EPUB으로 소장하기

전체 내용과 부록을 EPUB으로 읽고 소장할 수 있습니다.

9,900원

이 장이 실린 책

비개발자를 위한 인프라 감각

이 책의 목차 보기

같은 분야의 다른 책

이 글 공유하기

X 스레드 네이버 카카오톡

최종 수정일 2026년 9월 3일

이 콘텐츠는 저자가 기획하고 AI 도구를 집필·정리 과정에 활용했습니다. 구성, 사실 확인, 표현, 최종 판단과 출판 책임은 저자와 보이드로그에 있습니다.