채팅방에서 질문을 보냈는데 답이 돌아오지 않으면 연결부터 의심하게 돼요. 오래된 대화가 문제인지, 서비스가 멈췄는지, 질문이 전달되지 않았는지 사용자가 구분하기 어렵죠. 5월의 응답 장애도 처음에는 그런 여러 가능성이 섞여 있었어요.
초기 기록에서는 오래된 대화 상태와의 충돌을 의심했어요. 그럴듯한 설명이었지만 그 설명만으로 원인이 확인된 것은 아니었어요. 이후 확인에서는 메시지가 이미 접수됐고, 응답을 처리하는 단계에서 멈춘 사실이 드러났어요. 처음 추측을 고집하면 질문을 받는 쪽을 계속 손봤을 상황이었어요.

연결됐다는 확인 다음에 필요한 것
질문 접수와 답변 처리를 분리해 보니 확인 순서가 달라졌어요. 메시지가 들어왔다면 적어도 모든 연결이 끊긴 것은 아니에요. 그다음에는 답을 만드는 과정과 만들어진 응답을 읽어 전달하는 과정 중 어디가 멈췄는지 살펴야 했어요.
뒤의 진단은 응답 형식과 처리 방식이 맞지 않는 지점으로 좁혀졌어요. 답변을 처리하는 쪽이 예상한 모양과 실제 돌아온 내용 사이에 차이가 있었고, 그 차이를 다루는 부분에서 중단된 거예요. 대화가 오래됐다는 가설과는 수정할 대상이 달랐어요.
이때 중요한 건 가장 먼저 나온 설명을 최종 원인처럼 남기지 않는 일이었어요. 문제를 찾는 동안 추측은 바뀔 수 있어요. 기록에는 무엇을 먼저 의심했는지와 어떤 확인 때문에 판단을 바꿨는지가 함께 있어야 나중에 같은 증상을 다시 봐도 잘못된 출발점을 반복하지 않을 수 있어요.

짧은 답을 확인한 뒤, 적용 범위를 넓히기
먼저 개인 프로필에서 응답 처리를 수정하고 실행을 다시 시작했어요. 짧은 요청에 답이 돌아오는 것을 확인한 기록이 있어요. 적어도 수정한 경로에서 접수부터 응답까지 이어졌다는 근거가 생긴 거죠. 코드가 바뀌었다는 설명보다 한 단계 더 나아간 확인이었어요.

이후 다른 프로필에서도 같은 유형의 문제가 보고됐고 관련 처리를 반영한 뒤 운영 프로세스를 다시 시작했어요. 사용자 입장에서는 어느 프로필을 쓰느냐에 따라 같은 질문이 멈추는 상황을 피해야 했어요. 한 곳의 시험 성공을 전체 적용으로 대신할 수는 없었어요.
짧은 답이 돌아온 사실도 범위를 갖고 있었어요. 원래 질문은 더 긴 맥락을 필요로 했을 수 있고, 프로필마다 사용하는 자료도 달라요. 당시 기록에는 처음 질문을 모든 프로필에서 다시 처리하고 사용자가 답을 확인한 결과까지 남아 있지는 않았어요.
그래서 이 작업은 부분적인 실응답 확인과 확대 적용까지로 정리했어요. 답변이 돌아오는 길을 복구한 것과 원래 요청이 끝난 것은 다른 상태였죠. 후속 확인이 필요한 부분을 남겨야 사용자는 다시 물어야 할 질문이 무엇인지 판단할 수 있어요.
서비스가 침묵하면 사용자는 기다리거나 같은 말을 반복해야 해요. 이 문제를 다루며 줄이려던 부담은 그 불필요한 반복이었어요. 접수됐지만 답하지 못한 상태를 구분할 수 있어야 하는 이유도 여기에 있었고요. 응답 장애를 모두 연결 문제라고 부르면 이런 차이가 가려져요.
같은 증상을 여러 프로필에서 봤다는 사실도 원인 판단에 도움이 됐어요. 하지만 같은 증상만으로 모든 환경이 동일한 원인이라고 단정할 수는 없었어요. 앞서 확인한 응답 처리 문제와 각 프로필의 상태를 연결한 뒤 적용해야 했어요.
재시작이 필요한 이유도 수정 자체와 나눠 설명할 수 있었어요. 이미 실행 중인 서비스가 이전 처리를 계속 쓰면 파일이 고쳐져도 채팅의 침묵은 남을 수 있어요. 수정된 경로가 실제 요청을 처리하도록 이어 주는 단계였어요.
내가 이 기록에서 배우고 싶었던 것은 원인 이름을 외우는 일이 아니었어요. 처음 가설을 어떻게 확인했고 어떤 근거로 바꿨는지였죠. 그 순서가 남으면 이후 답이 멈췄을 때도 대화 상태를 무조건 비우는 대신 멈춘 단계를 먼저 찾을 수 있어요.
이번 과정에서 판단이 바뀐 지점은 분명했어요. 오래된 대화를 의심하던 단계에서, 실제로 접수된 질문이 응답 처리에서 멈춘다는 근거로 이동했어요. 무엇을 고쳤는지만큼 왜 그 부분을 고치게 됐는지가 남아야, 사용자가 겪은 침묵을 제대로 설명할 수 있었어요.

