00:00:00환경 변수 관리용 오픈 소스 도구인 Valor를 소개합니다. 이 도구를 사용하면
00:00:04비밀번호 같은 민감한 정보를 더 이상 로컬 디스크에 평문으로 저장할 필요가 없습니다.
00:00:10로컬이나 1Password, Bitwarden, AWS 등 다양한 비밀번호 관리자를 통해 환경 변수를 불러오고
00:00:16타입 안정성이 보장된 스키마를 사용해 런타임 시 애플리케이션에 비밀 정보를 주입합니다.
00:00:21덕분에 .env 파일을 AI에게 노출하거나 GitHub에 공개해도 안전하죠. 그런데 이게 어떻게 작동하며
00:00:27이 독특한 문법은 무엇일까요? 구독 누르시고 바로 알아보겠습니다.
00:00:31새로운 개발 프로젝트에 참여해서 코드를 받고 로컬에서 실행했는데
00:00:39작동하지 않았던 적이 몇 번이나 있으신가요? 알고 보니 다른 개발자나
00:00:45암호화된 저장소에서 받아야 하는 .env 파일이 누락되었던 경우 말이죠.
00:00:50.env 파일이 업데이트될 때마다 이 과정을 반복해야 하죠. Valor는 바로 이 문제를 해결하고
00:00:56프롬프트 인젝션 공격을 받은 AI 에이전트가 비밀 정보에 접근하는 문제도 방지합니다.
00:01:02작동 방식을 보시죠. 여기 OpenAI의 Whisper로 트위터 영상을 받아쓰고
00:01:06Claude로 기사를 작성하는 작은 프로젝트가 있습니다.
00:01:12먼저 간단하게 Valor로 포트 번호를 변경해 보겠습니다. Valor가 설치된 상태라면
00:01:17현재 비어 있는 .env.schema 파일이 있을 겁니다. 이 파일은 모든 환경 변수의
00:01:23기준점이 되며, GitHub 퍼블릭 리포지토리에 커밋해도 안전합니다.
00:01:28먼저 간단한 'appenv' 환경 변수를 추가하고 값을 'testing'으로 설정해 보겠습니다.
00:01:33이제 새 탭에서 'varlock load'를 실행해 스키마를 검증하겠습니다.
00:01:39보시다시피 환경 변수를 읽어왔고 'sensitive(민감 정보)'로 설정되었습니다.
00:01:43Valor의 모든 환경 변수는 기본적으로 민감 정보로 설정되지만, 변경할 수 있습니다.
00:01:48파일에 첫 번째 데코레이터를 추가하겠습니다. 파일 내 모든 변수에 영향을 주는
00:01:52루트 데코레이터를 사용해 'default sensitive'를 false로 설정하겠습니다.
00:01:56문법을 보면 앞에 '#'이 붙어 있고 보통 루트 변수는 구분선으로 나뉩니다.
00:02:02이 파일 전체는 Varlock 팀이 만든 오픈 스펙인 'mspec'이라는 도메인 특화 언어를 사용합니다.
00:02:08이제 스키마를 다시 검증해 보면 더 이상 민감 정보로 설정되지 않아
00:02:14환경 변수의 값을 실제로 확인할 수 있습니다. 스키마 파일에서 다른 멋진 기능도 가능한데
00:02:19환경 변수에 타입을 지정하는 것입니다. 'string' 타입을 지정하면 여전히 잘 작동하지만
00:02:24만약 'number'로 바꾸면 문자열을 예상했다는 오류 메시지가 뜹니다.
00:02:29'required' 데코레이터를 추가하고 텍스트를 지워보겠습니다.
00:02:33파일을 확인해 보면 값을 예상했기 때문에 오류가 발생합니다.
00:02:39이런 것들을 '아이템 데코레이터'라고 부르며 Varlock 문서에서
00:02:44전체 목록과 사용 가능한 타입들을 확인할 수 있습니다. 이제 다른 변수를 추가해 보죠.
00:02:50이번엔 이름은 'port', 값은 3002로 하겠습니다. 타입은 'port'로 지정하고
00:02:55위쪽 설정은 다시 민감 정보로, 타입은 문자열로 되돌리겠습니다.
00:03:01이제 두 환경 변수를 모두 찾아냈고 민감 정보라 내용은 숨겨졌습니다.
00:03:05그럼 이 값들을 어떻게 애플리케이션에 넣을까요? 방법은 아주 간단합니다.
00:03:10'varlock run' 뒤에 앱 실행 스크립트를 붙여주면 됩니다. package.json 파일을 보면
00:03:15프론트엔드 실행을 위해 'vite' 명령어를 써야 합니다. 따라서 'varlock run vite'를 실행하면
00:03:21설정을 로드하고 해석한 다음 환경 변수에 주입합니다.
00:03:27정확히 처리되었네요. 이제 포트는 3002가 되었고 코드에서도 잘 작동합니다.
00:03:33Varlock이 주입 중인 포트 환경 변수를 가장 먼저 확인하기 때문이죠.
00:03:38이 스크립트는 자바스크립트 파일에 국한되지 않습니다. Varlock은 어떤 프로젝트든
00:03:43Python, Go, Rust 등 가리지 않고 예상대로 작동합니다. 만약 npm으로
00:03:48설치하고 싶지 않다면 동일하게 작동하는 Varlock CLI도 있습니다.
00:03:54로컬 환경 변수는 여기까지 하고, 이제 쉘 로컬 변수 대신 1Password에서
00:03:59OpenAI나 Anthropic API 키 같은 정보를 가져오는 과정을 살펴봅시다.
00:04:05저는 원래 1Password를 쓰지 않지만 영상 제작을 위해 체험판에 가입했습니다.
00:04:11보시다시피 새 금고를 만들었는데, 이건 아주 중요합니다. 이유는 나중에 설명하죠.
00:04:16금고 안에는 OpenAI API 키와 Anthropic API 키 두 항목이 있습니다.
00:04:24가짜 키라서 보여드려도 상관없습니다. 자, 이 값들을 Varlock 스키마에
00:04:30넣으려면 먼저 1Password 플러그인을 설치해야 합니다.
00:04:36Varlock 플러그인은 전용 루트 및 아이템 데코레이터를 추가할 수 있어서
00:04:42공식 문서에 없는 'init 1password' 같은 새로운 데코레이터를 볼 수 있습니다.
00:04:49설치 후 해당 플러그인을 포함한 루트 데코레이터를 로드하고
00:04:55'init 1password'를 실행합니다. 지금 필요한 건 여기서 가져올 토큰뿐입니다.
00:05:01이 토큰을 얻으려면 개인 금고가 아닌 '새 금고'에 연결해야 하며
00:05:06'개발자 서비스 계정' 메뉴에서 안내에 따라 토큰을 생성할 수 있습니다.
00:05:11영상 후에 토큰과 계정을 삭제할 거라 그냥 보여드리겠습니다. 이 값의 타입은
00:05:15플러그인에서 제공하는 '1password service token'으로 지정하고 민감 정보로 설정합니다.
00:05:21파일에 구문 강조가 안 되는 걸 보셨을 텐데, Varlock 팀이
00:05:26VS Code 플러그인은 만들었지만 Neovim용은 아직 없기 때문입니다.
00:05:32나중에 제가 직접 만들거나 Claude에게 시켜봐야겠네요. 이제 새 환경 변수인
00:05:37'openai api key id'를 만들고 1Password에서 값을 가져오기 위해
00:05:431Password 함수를 실행합니다. 규약(protocol)을 적고 나서
00:05:49금고 이름인 'test', 항목 이름인 'openai', 그리고 필드 이름을 적습니다.
00:05:55확인해 보니 필드 이름은 'credential'이네요. 이것도 민감 정보로 설정하고
00:06:02'varlock load'를 실행하면 몇 초 뒤에 1Password로부터 키를 가져옵니다.
00:06:08값이 '1234' 같은 것으로 바뀌어도 잘 작동하는지 확인해 보죠.
00:06:14다시 로드하면 정확한 값을 가져옵니다. 이제 환경 스키마 파일을
00:06:20커밋할 준비가 끝났습니다. 그런데 1Password 토큰은 노출되어도 안전할까요?
00:06:25솔직히 말씀드리면, 로컬 개발 시 1Password 데스크톱 앱이나
00:06:31CLI를 이미 사용 중이라면 토큰 대신 지문 인식으로
00:06:381Password 잠금을 해제하도록 설정할 수도 있습니다.
00:06:43Varlock은 AWS, GCP, Bitwarden 같은 다른 플러그인도 지원하며
00:06:52Vite, Next.js, Cloudflare Workers 등 다양한 통합 기능도 제공합니다.
00:06:57스키마에서 TypeScript 타입을 생성하거나 다른 파일의 환경 변수를 가져오고
00:07:03로그나 HTTP 응답에서 민감한 정보를 가리는 아주 유용한 기능들도 많습니다.
00:07:08AI 에이전트가 스키마 설정을 자동으로 도와주는 MCP 서버도 있고
00:07:15CI/CD 과정에서 환경 변수를 검증해 주는 GitHub Action도 있습니다.
00:07:21이렇게 멋진 Varlock이지만 몇 가지 아쉬운 점도 있습니다.
00:07:27예를 들어 오프라인에서는 쓸 수 없어서 공항 같은 곳에서 코딩할 때는
00:07:32결국 하드코딩된 환경 변수를 써야 하죠. 하지만 인터넷 없이 코딩하는 사람이 얼마나 될까요?
00:07:37그리고 외부 서비스에서 비밀번호를 가져올 때 약간의 지연이 발생해서
00:07:41스크립트 시작이 조금 늦어질 수 있습니다. Dashlane 같은 서비스 지원이
00:07:46부족하다는 점과, 로컬 쉘의 환경 변수 이름과 스키마 파일의 이름이 같으면
00:07:531Password 대신 로컬 변수를 우선시하는 기이한 버그도 경험했습니다.
00:07:59하지만 Varlock은 활발히 개발 중인 프로젝트라
00:08:05이런 문제들은 미래에 해결될 것이라고 확신합니다.
00:08:10그럼에도 현재 상태로도 저에게는 매우 유용한 도구이며
00:08:16앞으로 모든 사이드 프로젝트에 Varlock 스키마 파일을 사용할 생각입니다.
00:08:21에이전트들이 제 정보를 긁어가는 것을 원치 않기 때문에
00:08:26로컬 쉘 파일까지 대체할 방법이 있다면 꼭 그렇게 하고 싶네요.