Skip to content
게으른 엔지니어의 기술 블로그
Go back

Claude Code한테도 메모리를 붙여주려다가 7편 — 4초는 대답이 오기엔 너무 짧았다

6편 끝에서 “일주일 정도 실사용하면서 정확도가 유지되는지 지켜본다”고 했다. 근데 막상 일주일이 지나고 물어보니, 지켜본 게 거의 없었다.

검증할 게 없었다는 게, 검증을 안 했다는 뜻은 아니었다

“Honcho 훅 체크하고 있어?”라는 질문을 할 때마다 궁색한 답변이 왔다. — “이번 세션엔 훅이 뭔가를 준 적이 없어서 검증할 게 없었다”는 말을 세 번쯤 받고 나서, 좀 더 디테일한 질문을 했다. “검증이 안 된다는 게, 너(Claude Code)한테 정보를 안 준다는 거야, 아니면 네가 무시하는 거야?”

둘 다 아니었다. 답을 짐작하는 대신 로그부터 뽑아봤다.

4초, 그리고 0.3%

훅 스크립트를 열어보니 원인이 한 줄에 있었다. Honcho에 질문을 보내는 curl-m 4, 4초 타임아웃이 걸려 있었다. 타임아웃되면 훅은 그냥 아무것도 안 넣고 조용히 끝난다(장애가 나도 대화를 막지 않으려는 의도된 설계였다).

실제로 지난 24시간 동안의 호출 시간을 뽑아봤다.

Honcho가 실제로 답을 만드는 데 보통 20초 넘게 걸리는데, 훅은 4초만 기다리고 포기하고 있었다. 뭔가를 받고도 무시한 게 아니라, 거의 매번 답이 도착하기 전에 요청 자체가 버려지고 있었다. 그 사이에도 서버 쪽 계산(그리고 비용)은 그대로 진행됐다 — curl이 기다림을 그만둔다고 이미 시작된 API 호출이 취소되는 건 아니니까.

근데 타임아웃을 왜 4초로 정해뒀을까

여기서 그냥 “버그였다, 늘리면 끝”으로 정리하고 싶었는데, 짚고 넘어가야 할 게 있었다. 4초라는 값 자체는 딱히 아무 근거 없이 정해진 숫자는 아니었을 거다.

이 훅은 매 프롬프트마다 도는 구조다. 만약 타임아웃을 무작정 늘리면, 사용자가 뭔가 입력할 때마다 응답이 20~30초씩 밀리는 셈이 된다. 그리고 더 근본적인 문제도 있다 — 늦게 도착한 정보가 지금 하고 있는 대화랑 계속 관련이 있다는 보장이 없다. 30초 전에 물어본 질문에 대한 답이 지금 막 다른 주제로 넘어간 대화 중간에 뚝 떨어지면, 맞는 내용이라도 이미 늦은 정보다. 4초라는 값은 아마 “그래도 어느 정도는 기다려보되, 대화 흐름을 깨뜨릴 정도로 오래 기다리지는 말자”는 절충이었을 것 같다.

문제는 그 절충이 지금 상황과는 안 맞았다는 거다 — 4초는 “약간의 지연”이 아니라 “거의 항상 실패”를 의미하는 값이 되어 있었다.

30초로 늘리고, 진짜 응답이 오는지 확인했다

curl 타임아웃을 30초로 늘렸다(관측된 응답 시간의 75%를 커버하는 값). 훅 자체의 타임아웃도 35초로 같이 늘려서, curl이 다 기다리기도 전에 상위 프로세스가 먼저 죽이는 일이 없게 했다.

그리고 이론으로 끝내지 않고 직접 호출해봤다. 오늘 있었던 일(정확한 사실관계를 직접 알고 있는 주제)을 그대로 물어봤더니, 27초 만에 응답이 왔다. 내용도 정확했다 — 실제로 코드를 고친 이슈와, 조사해보니 이미 괜찮아서 코드 안 건드리고 닫은 이슈들을 구분해서 요약했다.

첫 응답부터, 다시 같은 문제를 만났다

근데 타임아웃을 고치고 받은 진짜 첫 응답이 하필 이거였다 — “요청하신 초안을 작성했습니다”로 시작하는, 실제로는 쓴 적 없는 파일을 이미 썼다고 말하는 응답. Honcho는 파일을 쓸 수 있는 도구가 없다. 이건 지어낸 완료 보고였다.

타이밍이 상징적이었다. 일주일 내내 “답이 도착 안 해서 검증을 못 했다”고 했는데, 막상 도착이 되기 시작하자마자 나온 첫 내용이 “이미 다 해놨다”는 확인 안 된 주장 이었다. 배달 문제를 고쳤다고 내용 문제까지 저절로 해결되는 건 아니었다.

지금부터는, 도착 시점도 같이 봐야 한다

타임아웃을 고쳤다고 관찰이 끝난 게 아니다. 오히려 이제부터 봐야 할 게 하나 더 늘었다 — 답이 왔는지뿐 아니라, 언제 왔는지. 20~30초는 그사이 대화가 다른 방향으로 넘어가기에 충분한 시간이다. 정확한 답이라도 이미 지나간 맥락에 붙으면 쓸모가 줄어든다. 정확도, 비용, 그리고 도착 타이밍 — 이 세 가지를 다 같이 보지 않으면, “일단 답은 오게 만들었다”는 것만으로 이 기능을 계속 켜둘 이유가 되지는 않는다.

관찰은 오늘부터 다시 시작이다. 이번엔 진짜로 볼 게 생겼다.


Share this post:

Previous Part
Claude Code한테도 메모리를 붙여주려다가 6편 — 모델이 아니라 서랍이 문제였다, 스위치 하나 켰더니 세 개 다 맞았다
Next Part
Claude Code한테도 메모리를 붙여주려다가 8편 — 껐는데, 절반만 껐다