proto 업데이트 뒤 환경 변수만 빠지는 이유와 복구 방법

proto를 0.63으로 올린 뒤 Node 버전은 맞는데 프로젝트 환경 변수와 셸 별칭만 사라졌다. 같은 .prototools 파일에서 왜 일부 설정만 빠지는 걸까?

proto 업데이트 뒤 환경 변수만 빠지는 이유와 복구 방법
세 줄 요약
  • proto 0.63에서는 같은 .prototools 안에서도 버전 지정과 환경 변수의 적용 조건이 다르다.
  • status·diagnose로 신뢰되지 않은 파일을 찾고, 내용을 검토한 뒤 필요한 범위를 신뢰한다.
  • 신뢰는 파일 내용이 아닌 경로에 남으므로 이후 설정 변경도 검토해야 한다.

설정 파일을 못 읽은 것이 아니라 일부를 적용하지 않은 것이다

proto를 업데이트한 뒤 Node 버전은 맞는데 프로젝트 환경 변수나 셸 별칭이 사라졌다면, .prototools의 신뢰 상태가 원인일 수 있다. 10월에 공개된 proto 0.63은 신뢰되지 않은 로컬 설정에서 코드를 실행하거나 실행 대상을 바꿀 수 있는 항목을 적용하지 않는다.

반면 기본 제공 도구의 버전 지정은 그대로 적용한다. 따라서 같은 파일에 Node 버전과 [env]가 함께 있어도 버전 지정만 작동할 수 있다. 설정 문서에 따르면 환경 변수, 셸 설정, 플러그인과 기본 제공 도구가 아닌 도구의 버전 지정 등은 신뢰가 필요한 항목이다.

이 차이는 설정 파일이 단순한 버전 목록보다 많은 일을 하기 때문에 생겼다. 셸 활성화 기능은 폴더에 들어갈 때 환경과 별칭을 적용한다. 새로 복제한 저장소의 설정이 검토 없이 그 동작을 바꾸지 못하도록 한 것이다.

신뢰되지 않은 파일을 찾은 뒤 그 파일만 허용할 수 있다

공식 FAQ는 환경 변수·별칭·플러그인이 무시될 때 proto status 또는 proto diagnose로 신뢰되지 않은 설정을 찾으라고 안내한다.

proto status
proto diagnose

표시된 파일의 환경 변수와 플러그인 경로 등을 읽고, 적용하려는 설정인지 판단한다. 현재 폴더의 설정 파일 하나를 신뢰하려면 다음 명령을 사용한다.

proto trust ./.prototools

셸 활성화 경고가 계속 보이지 않는다고 신뢰됐다고 판단해서는 안 된다. activate 문서에 따르면 신뢰되지 않은 설정에 대한 경고는 셸 세션마다 한 번만 출력된다. 설정이 적용되지 않는다면 진단 명령으로 상태를 다시 보는 편이 정확하다.

폴더를 신뢰하면 나중에 생기는 하위 설정도 포함된다

proto trust의 범위는 넘기는 경로에 따라 달라진다. 인자 없이 실행하는 명령은 현재 디렉터리를 신뢰한다.

명령신뢰하는 범위
proto trust ./.prototools지정한 설정 파일 하나다.
proto trust현재 디렉터리와 하위 디렉터리의 설정이다. 나중에 생기는 파일도 포함한다.

파일 하나를 지정해도 이후 내용이 바뀔 때마다 다시 승인하는 방식은 아니다. 신뢰 기록은 내용이 아니라 경로를 기준으로 유지된다. 신뢰한 저장소에서 새 커밋을 받을 때는 .prototools 변경도 코드 변경과 함께 검토해야 한다.

등록을 되돌리는 명령은 proto untrust ./.prototools다. 다만 상위 디렉터리 등 다른 경로를 통해 여전히 신뢰되는지까지 확인해야 한다. 파일의 개별 등록을 지우는 것과 그 파일에 적용되는 모든 신뢰를 없애는 것은 다를 수 있다.

CI 성공만으로 로컬 설정까지 적용됐다고 볼 수 없다

CI에서는 설정을 자동으로 신뢰한다. 사용자 설정인 ~/.prototools와 전역 설정인 ~/.proto/.prototools도 자동 신뢰 대상이다. 같은 프로젝트가 CI에서는 동작하고 로컬에서는 민감한 설정을 빠뜨리는 상황이 가능한 이유다.

이 차이를 없애려고 로컬 셸에 CI를 설정하는 방식은 적절하지 않다. 필요한 파일이나 프로젝트의 신뢰 범위를 직접 지정해야 한다. 신뢰 이후에도 환경 값이 기대와 다르다면 기존 셸 값을 확인한다. [env]의 값은 이미 전달되거나 상속된 환경 변수를 덮어쓰지 않는다. 신뢰 여부와 값의 우선순위를 나눠 확인하면 불필요하게 도구 전체를 다시 설치할 필요가 없다.