Skip to content

프로젝트 이름 바꾸기는 생각보다 어렵다

프로젝트 이름 바꾸기는 생각보다 어렵다
   
MissingEnvVarError: Missing env var "CLAWDBOT_GATEWAY_TOKEN"
referenced at config path: gateway.auth.token

분명히 그 토큰을 설정했다. 어제 이 게이트웨이를 사용했다. 뭐가 바뀌었나?

내 머신에서 바뀐 건 없다. 프로젝트가 바뀌었다. clawdbot에서 openclaw로 이름이 바뀌었다. 설정 파일은 여전히 옛 환경 변수 이름을 참조했다.

증상

프로젝트가 여러 번 이름이 바뀌었다:

  • clawdbotmoltbotopenclaw

각 이름 변경은 코드, 문서, 저장소를 업데이트했다. 하지만 환경 변수는 사용자 환경에 산다—셸 설정, Keychain 항목, CI 시크릿. 그것들은 커밋을 푸시해도 자동 업데이트되지 않는다.

내 설정 파일:

{
  "gateway": {
    "auth": {
      "token": "${CLAWDBOT_GATEWAY_TOKEN}"
    }
  }
}

내 환경:

export OPENCLAW_GATEWAY_TOKEN="actual-token"  # 새 이름
# CLAWDBOT_GATEWAY_TOKEN은 존재 안 함

설정이 옛 이름을 참조했다. 에러는 정확했다—그 변수는 정말로 없었다.

왜 이름 변경이 속임수인가

프로젝트 이름 바꾸기는 찾기-바꾸기 작업처럼 느껴진다. 아니다. 실제로 업데이트 필요한 것:

산물위치자주 놓침
Env var 접두사사용자 셸 설정
설정 파일 경로~/.oldname/ 디렉토리
LaunchAgent 레이블~/Library/LaunchAgents/
Keychain 항목계정/서비스 이름
심링크옛 디렉토리 가리킬 수 있음
CI/CD 시크릿GitHub Actions 등때때로
문서README, 위키때때로
패키지 이름npm, pip, cargo보통 업데이트됨
저장소 이름GitHub, GitLab보통 업데이트됨

보이는 산물(레포, 패키지, 문서)은 버전 관리에 있어서 업데이트된다. 보이지 않는 산물(env vars, 로컬 설정, 시스템 서비스)은 뒤에 남는다.

해결

  1. 새 접두사를 사용하도록 설정 업데이트:
{
  "gateway": {
    "auth": {
      "token": "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}
  1. Keychain 항목 이름 변경:
# 옛 항목 삭제
security delete-generic-password -a "$USER" -s "clawdbot-gateway-token"

# 새 이름으로 추가
security add-generic-password -a "$USER" -s "openclaw-gateway-token" -w "actual-token"
  1. 옛 이름을 참조하는 래퍼 스크립트 업데이트.

  2. 다른 사용자를 돕기 위해 지원 중단 경고 추가:

Warning: Deprecated environment variables detected:
  CLAWDBOT_GATEWAY_TOKEN  Use OPENCLAW_GATEWAY_TOKEN

예방: 이름 변경 체크리스트

프로젝트 이름을 바꿀 때, 마이그레이션 가이드 생성:

## oldname에서 newname으로 마이그레이션

### 환경 변수
| 옛 | 새 |
|-----|-----|
| OLDNAME_API_KEY | NEWNAME_API_KEY |
| OLDNAME_TOKEN | NEWNAME_TOKEN |

### 설정 경로
- `~/.oldname/``~/.newname/`
- 설정 파일: `~/.oldname/config.json``~/.newname/config.json`

### 시스템 서비스 (macOS)
- LaunchAgent: `com.oldname.daemon``ai.newname.daemon`

### 명령
실행: `newname migrate`로 로컬 설정 자동 업데이트

하위 호환성

더 부드러운 전환을 위해:

// 옛 이름과 새 이름 둘 다 지원
const token = process.env.OPENCLAW_TOKEN || process.env.CLAWDBOT_TOKEN;

if (process.env.CLAWDBOT_TOKEN && !process.env.OPENCLAW_TOKEN) {
  console.warn('CLAWDBOT_TOKEN is deprecated. Use OPENCLAW_TOKEN');
}

사용자에게 업데이트할 시간을 주면서도 작동한다.

Doctor 명령

doctor 또는 diagnose 명령이 이런 문제를 잡을 수 있다:

$ openclaw doctor

✓ Config file found
✓ API token valid
⚠ Deprecated env var CLAWDBOT_TOKEN detected
  → Rename to OPENCLAW_TOKEN

Issues found: 1 warning

교훈

코드 이름 변경은 사소했다: 찾기와 바꾸기. 생태계 이름 변경은 아니었다. 환경 변수, Keychain 항목, LaunchAgent, 로컬 설정 모두 버전 관리 밖에서 살면서, 여전히 옛 이름을 가리켰다.

프로젝트 이름 바꾸기는 저장소 밖에서 일어나는 브레이킹 체인지다. 문서화하라. 마이그레이션 도구를 제공하라. 최소 한 버전은 하위 호환성을 지원하라.

에러 메시지는 정확했다: CLAWDBOT_GATEWAY_TOKEN이 없었다. 하지만 진짜 버그는 프로젝트 이름 변경이 사용자 환경을 자동으로 업데이트할 거라고 가정한 것이었다.