인증 헬스체크의 캐시 의존을 실시간 핑으로 교체해 감지 사각지대 제거
목차
인증 상태를 캐시에 의존해 판정하던 스크립트를 실제 1회 핑 방식으로 바꿨다. 거짓 정상 상태가 감지되지 않던 사각지대를 제거한 작업이다.
캐시 기반 체크의 위험성
우리 인증 체크 스크립트(claude-auth-check.sh, codex-auth-check.sh)는 원래 이전 실행 결과나 시스템 상태 캐시를 읽어서 "지금 인증이 정상입니다"라고 판정했다. 빠르고 경량이라는 장점이 있었다. 그런데 여기에 함정이 있다.
캐시는 시간이 지나면서 현실과 맞지 않기 시작한다. 예를 들어:
- 토큰이 만료되었는데 캐시엔 아직 유효한 상태로 기록돼 있다
- 네트워크 단절이나 API 서버 장애가 발생했는데, 지난번 성공한 결과가 캐시에 남아있다
- 인증 서비스가 부분적으로 장애 난 상황(한두 테넌트만 문제)을 감지하지 못한다
이런 상황에서 모니터링은 "모든 게 정상입니다"라고 거짓 신호를 보낸다. 온콜이 평화로울 때 실제로는 사용자들이 인증 에러를 마주치고 있고, 우린 그걸 인지하지 못한다. 내가 마지막에 발견한 사건도 이렇게 시작됐다.
실시간 핑으로 뒤집기
변경 내용은 간단하다.
# before: 캐시 파일 확인
if [ -f "$CACHE_FILE" ]; then
CACHED_AT=$(stat -f %m "$CACHE_FILE" 2>/dev/null)
if [ $((NOW - CACHED_AT)) -lt 300 ]; then
# 5분 내 캐시면 OK
exit 0
fi
fi
# after: 실제 요청 한 번
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"$AUTH_ENDPOINT/ping")
if [ "$RESPONSE" = "200" ]; then
exit 0
else
exit 1
fi
실제로 인증 엔드포인트에 핑을 날려본다. 200이 돌아오면 진짜 정상이다. 그게 안 돌아오면, 그 시점에 문제가 있다는 뜻이다. 캐시의 시차 문제를 완전히 제거한다.
| 방식 | 정확도 | 성능 | 감지 시간 |
|---|---|---|---|
| 캐시 기반 | 낮음 (시차) | 빠름 (0~1ms) | 5분~∞ |
| 실시간 핑 | 높음 (현재값) | 중간 (100~500ms) | 즉시 |
우린 정확도를 택했다.
팀과 온콜에 미친 영향
이 변경의 진짜 의미는 모니터링 신뢰도다.
예전엔 "체크 스크린이 초록불인데 왜 사용자가 로그인 못 한대?"라는 불협화음이 생겼다. 운영팀 입장에서 혼란스럽고, 우리 개발팀도 "스크립트가 뭔가 놓친 건가"라며 매번 디버깅했다. 이제 스크립트가 빨간불을 켜면, 실제로 문제가 있다는 뜻이다. 신호의 신뢰도가 높아졌다.
또한 이런 작은 수정이 쌓이면서:
- 온콜 담당자의 대응 속도가 빨라진다 (가양성이 줄어든다)
- 장애 추적과 분석이 더 정확해진다 (캐시 문제로 인한 혼선이 없다)
- 다음 엔지니어가 이 코드를 읽을 때 의도가 명확하다 (캐시의 복잡함 vs 핑의 직관성)
배운 점: 모니터링과 캐시의 거리
헬스체크나 모니터링 스크립트를 짤 때 자주 마주치는 실수다. 성능 때문에 캐시를 도입하면, 그 캐시가 버그 하나가 되기 쉽다. 특히 인증이나 상태 확인처럼 정확성이 중요한 부분에선 더욱 그렇다.
실시간 핑은 추가 네트워크 비용이 있지만:
- 헬스체크는 보통 5분~10분 간격으로 돈다 (충분히 spacing 가능)
- 장애를 놓치는 비용 >> 핑 한 번의 네트워크 비용
- 거짓 정상 하나가 온콜의 신뢰를 깎아먹는다
다음.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.