멀티 서비스 배포에서 Authentication Token 불일치 해결 방법

발행: (2026년 3월 1일 오전 05:24 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

TL;DR

Railway, VPS, 로컬 Mac Mini 간 인증 토큰 불일치로 인해 일부 API가 실패했습니다. INTERNAL_AUTH_SECRET을 모든 환경에 동일하게 맞추고 Gateway 토큰을 재생성함으로써 문제를 해결했습니다. 핵심 기능은 가시성이 사라져도 계속 실행되었습니다.

다중 환경 마이크로서비스 설정

  • 서비스 간 공유 인증 토큰
  • 아키텍처: Railway (PaaS) + VPS + 로컬 환경

관찰된 증상

Service / SkillStatusNote
sessions_list❌ 403 ForbiddenGateway 토큰 만료
app-nudge-evening❌ Auth failedINTERNAL_AUTH_SECRET 불일치
75 skill executions✅ 정상 작동인증 없이 또는 로컬

핵심 인사이트: 모든 것이 한 번에 실패한 것은 아니었습니다.

Railway 환경

INTERNAL_AUTH_SECRET=abc123old

로컬 환경

INTERNAL_AUTH_SECRET=xyz789new

원인: 로컬에서 변경한 후 Railway 환경 변수를 수동으로 업데이트하는 것을 잊음.

추가 증상

  • openclaw status → Gateway 토큰: 만료
  • sessions_list → 403 Forbidden

원인: 장기 실행 시스템이 토큰 회전을 수행했지만 로컬 설정이 업데이트되지 않음.

환경별 현재 값 확인

echo "Railway: $(railway env get INTERNAL_AUTH_SECRET)"
echo "Local: $INTERNAL_AUTH_SECRET"

비밀키가 불일치하면 동기화

railway env set INTERNAL_AUTH_SECRET="$INTERNAL_AUTH_SECRET"

토큰 상태 확인

openclaw status
# → Gateway token status: expired

새로운 토큰 생성

openclaw gateway token-refresh
# → New token: gw_xxx...

런타임 환경 업데이트

export OPENCLAW_GATEWAY_TOKEN="gw_xxx..."

토큰이 필요한 API 호출 (토큰에 영향)

curl -H "Authorization: Bearer $TOKEN" api/sessions
curl -H "X-Internal-Secret: $SECRET" api/nudge

토큰이 필요 없는 로직 (영향 없음)

local-skill-execution   # ✅ 계속 작동
file-operations         # ✅ 계속 작동
cron-jobs               # ✅ 계속 작동

수정 전후 메트릭

MetricBeforeAfter
sessions_list❌ 403✅ 정상 작동
app-nudge-evening❌ Auth fail✅ 정상 작동
System automation78 % (유지)78 % (유지)
Core skills100 % 성공100 % 성공

총 수정 시간: 9 시간 (진단 4 h + 근본 원인 분석 3 h + 수정 2 h)

교훈

부분 실패에 대비 설계

인증 문제 때문에 핵심 기능이 중단되지 않도록 해야 합니다.

토큰 동기화 자동화

수동 환경 업데이트는 쉽게 놓칠 수 있습니다.

단계적 저하 vs. 전체 실패

일부 API가 실패한다고 전체 시스템이 다운되는 것은 아닙니다.

가시성 vs. 가용성

메트릭 가시성이 사라진다고 시스템이 작동하지 않는 것은 아닙니다.

토큰‑동기화 체크 스크립트 (cron)

#!/bin/bash
# Token sync checker for cron

check_token_sync() {
    railway_secret=$(railway env get INTERNAL_AUTH_SECRET)
    local_secret=$INTERNAL_AUTH_SECRET

    if [ "$railway_secret" != "$local_secret" ]; then
        echo "🚨 Token mismatch detected"
        slack_alert "Auth tokens out of sync"
        exit 1
    fi
}

# Run every 6 hours
0 */6 * * * /path/to/check_token_sync.sh

다중 환경 인증은 항상 drift(드리프트)합니다. 사람의 기억에 의존하지 말고, 체크를 자동화해 즉시 불일치를 감지하세요.

0 조회
Back to Blog

관련 글

더 보기 »

일이 정신 건강 위험이 될 때

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...