채팅 시나리오가 연달아 실패하고, 메시지는 전송되는데 응답도 모달도 오지 않는다
여기서 나오기 쉬운 결론은 "채팅 백엔드가 조용히 무응답이다"이고, 재현하겠다며 같은 스위트를 반복 실행하게 된다
그런데 이 상황엔 함정이 있다 — 재현하려고 돌리는 그 실행이, 응답을 만들어내던 조건을 스스로 태워 없앤다
메시지는 전송됐는데 응답이 오지 않았다
흐름은 단순했다 — 입력을 보내면 사용자 버블은 뜨는데, 에이전트 응답이 끝내 오지 않았다
러너 로그에는 "무응답 / 타임아웃"만 남았고, 그 로그만 읽으면 원인은 자연스럽게 서버로 향한다
실패 스냅샷(스크린샷 / error-context)을 열자 화면엔 다른 게 떠 있었다
"크레딧이 모두 소진되었습니다"
메시지는 전송되지만(사용자 버블은 뜸), 계정 크레딧이 없어 에이전트가 돌지 않아 응답이 오지 않은 것이다
백엔드는 정상이었고, 죽어 있던 건 검증 계정이었다
재현하려 반복할수록 응답이 사라졌다
여기서 진짜 지독한 부분은 "간헐적 실패"처럼 보였다는 점이다
초반 런에서는 응답이 오다가, 뒤로 갈수록 전부 무응답으로 바뀌었다
간헐성의 정체는 제품 쪽 불안정이 아니라, 반복 실행이 검증 계정 크레딧을 회차마다 더 깎아낸 것이었다
관측하려던 대상(응답 여부)을, 관측 행위 자체가 바꾸고 있었다
# ❌ 무응답 → 같은 스위트를 반복 실행해 "재현"한다
run_suite # 회차마다 크레딧을 더 태운다 → 후반 런일수록 무응답
run_suite # 초반 응답 / 후반 무응답 = 가짜 intermittent 생성
run_suite
# ✅ 무응답 → 단발 control probe 로 계정 상태부터 관측한다
send_once # 응답이 오나? 안 오면 화면부터 캡처 → 크레딧 소진 모달 확인
# → 여유 있는 계정으로 전환해 다시 관측
반복 실행은 관측이 아니라 개입이다 — 측정하려는 대상을 스스로 바꾼다
왜 하니스를 먼저 의심하나
FAIL 하나는 두 축의 함수다 — 제품 상태와 검증 하니스 상태(계정·세션·타이밍·로케이터)
이 중 하니스 축은 내가 매 실행마다 직접 건드리고 소유하는 변수이고, 제품 축은 여러 관측자가 공유하며 대체로 안정적이다
그래서 원인을 좁힐 땐 내가 바꾼 쪽(control)을 먼저 배제해야, 남은 변화량이 제품으로 수렴한다
control 을 배제하지 않은 채 나온 "백엔드 무응답"은, 크기만 컸지 근거가 없는 결론이었다
제품을 원인으로 지목하기는 쉽고, 대체로 틀린다
"자동화로는 로그인 불가"라는 단정도 같은 함정이었다
같은 주, MCP 세션이 만료됐을 때 또 다른 미검증 단정이 나왔다
"DEV 로그인은 2FA(OTP)가 필요한데 시드가 없으니 자동화 단독으론 불가"
문제는 그 경로를 한 번도 밟아보지 않고 내린 결론이라는 점이다
실제로 밟아보면 DEV signin 페이지에서 이메일·비번을 넣고 랩스페이스 OTP 칸에 DEV 전용 바이패스 코드를 넣으면 통과한다, 막힌 게 아니었다
게다가 같은 날 자동 로그인 setup 이 성공했다는 반증이 코앞에 있었다
"불가/ 막힘"을 보고하기 전에 그 경로를 실제로 한 번 실행한다, control-first 는 무응답 진단이든 로그인 단정이든 같은 규칙으로 작동한다
control-first 체크리스트
제품 이상을 결론 내기 전에 반드시 거친다
- 무응답이면 먼저 화면을 캡처해 크레딧 소진 / 에러 모달부터 확인한다 — 러너 로그만으로 "백엔드/ 제품" 단정하지 않는다
- 단발 control probe 로 관측한다 — 1회만 전송해 응답이 오는지 본다, 풀 스위트 반복은 금지한다(계정 상태만 더 악화된다)
- 검증 계정 크레딧은 유한하다 — 소진되면 여유 있는 계정으로 전환해 관측한다
- "불가/ 막힘"을 보고하기 전에 그 경로를 실제로 한 번 실행한다 -> 자동화가 이미 하는 일이면 같은 방식으로 되는지부터 확인한다
- "통과/ 실패 = 재현"으로 보고하기 전에, 그 런이 실제로 제품을 굴렸는지(응답 수신 여부)부터 확인한다
핵심 정리
| 증상 | 흔한 오진 | 먼저 배제할 control |
|---|---|---|
| 메시지 전송되나 응답 없음 | 백엔드 무응답 | 계정 크레딧 소진/ 에러 모달 |
| 초반 응답 · 후반 무응답 | 제품 intermittent | 반복 실행이 태운 계정 상태 |
| 세션 만료 후 진입 실패 | 자동화 단독 로그인 불가 | 미검증 경로 — 실제로 한 번 실행 |
- FAIL 은 제품과 하니스의 합이다, 내가 매 런 건드리는 하니스(계정·세션·타이밍·로케이터)를 가장 먼저 배제한다
- 반복 실행은 상태를 바꾼다 — 재현이 아니라 증상을 왜곡할 수 있으니 관측은 단발 probe 로 한다
- "불가 / 막힘"은 그 경로를 한 번 실행해 본 뒤에만 말한다, 반증이 코앞에 있는 경우가 많다
- 화면을 보지 않고 로그만 읽으면 같은 함정에 반복해서 빠진다
'TIL > Claude Code' 카테고리의 다른 글
| [TIL][CI] 실패 메일은 오는데 Slack 알림이 안 온다 - if: always() 가 안 지켜주는 경우 (0) | 2026.09.12 |
|---|---|
| [TIL] Claude Code 커스텀 스킬로 반복 작업 자동화하기 (0) | 2026.05.31 |
| [TIL][Pytest] All Pass 알림은 거짓말이었다 (0) | 2026.05.24 |
| [TIL][Playwright] networkidle이 React 앱에서 거짓말하는 이유 — MutationObserver로 DOM 안정화 대기 내장 (0) | 2026.04.20 |
| [TIL][E2E] UI 선택 없이 언어를 전환하는 방법 - 쿠키 + URL 주입 (4) | 2026.04.18 |