비밀값은 코드 밖에 둔다
앞 절의 요청에 저희는 "주최자 확인에 쓰는 값은 코드에 적지 말고 배포할 때 환경변수 ADMIN_KEY로 넣을게."라는 한 줄을 넣었습니다. 49초 뒤에 받은 main.py에는 키 값이 없고 이 한 줄만 있었습니다.
ADMIN_KEY = os.environ.get('ADMIN_KEY', '')
서버에 ADMIN_KEY라는 이름의 메모가 있으면 읽고, 없으면 빈칸으로 둔다는 뜻입니다.
저희는 이 코드를 이 책을 쓰는 컴퓨터에서 두 번 켜 봤습니다. 한 번은 ADMIN_KEY를 gamgyul-2026으로 넣고 켰고, 앞 절의 주최자 화면은 모두 그때 찍었습니다. 다른 한 번은 ADMIN_KEY 없이 켜고 아무 키로 마감 요청을 보냈습니다. 서버는 503과 "관리자 키가 아직 설정되지 않았어요."로 답하고 마감하지 않았습니다.
1. 키가 없으면 문을 열지 않습니다
그 503은 키를 확인하는 코드의 첫 줄에서 나옵니다.
if not ADMIN_KEY:
raise HTTPException(status_code=503, detail='관리자 키가 아직 설정되지 않았어요.')
키를 넣는 것을 잊고 배포해도 주최자 기능은 열리지 않습니다. 잊어도 문이 닫혀 있는 쪽으로 만든 것이고, 이런 것을 안전한 기본값이라고 합니다.
반대로 만들 수도 있었습니다. 환경변수가 없을 때 admin 같은 값을 대신 쓰도록 만들었다면, 키를 잊은 앱은 누구나 짐작할 수 있는 키로 열립니다. 앱은 잘 돌아가고 주최자 화면도 잘 열리니 겉으로는 드러나지 않습니다. 내 앱이 어느 쪽인지는 이렇게 묻습니다.
환경변수가 하나도 없을 때 이 앱은 어떻게 동작해? 비밀값이 비어 있으면 미리 정해 둔 값으로 열리는 기능이 있는지 찾아서 알려 줘.
그런 기능이 있다는 답이 오면 "비어 있으면 그 기능을 열지 말아 줘"라고 말합니다.
2. 미리보기의 /admin이 늘 닫혀 있는 까닭
바이브 코딩의 미리보기에는 환경변수를 넣는 칸이 없습니다. 미리보기 서버에는 ADMIN_KEY가 늘 비어 있고, 그래서 /admin은 어떤 키에도 위의 503 문구를 냅니다. 앞 절의 [키 없이 지우기 보내기]가 403이 아니라 503을 받는 것도 같은 까닭입니다. AI가 답에 "ADMIN_KEY를 설정하지 않으면 주최자 기능이 동작하지 않으니 배포 설정에서 꼭 확인해 주세요."라고 쓴 것도 이 때문입니다. 키를 넣고 확인하는 일은 배포한 뒤에 합니다.
3. 코드는 생각보다 멀리 갑니다
키를 코드에 적었다면 코드가 가는 곳마다 키가 따라갔을 것입니다. 이 앱의 코드는 이런 곳으로 갑니다.
- 화면 쪽 파일(
static/아래의 HTML·CSS·JavaScript)은 신청 페이지를 여는 사람의 브라우저로 내려갑니다. 누구나 열어 볼 수 있습니다. 무료 회원이 배포한 앱은 갤러리에 자동으로 공개되니, 그 '여는 사람'에 모르는 사람이 들어갑니다. 키가 여기 있으면 그날로 끝입니다. main.py는 브라우저로 내려가지 않습니다. 그래도 바이브 코딩의 [코드] 탭에 그대로 보이고, 친구에게 프로젝트를 ZIP으로 건네면 함께 가고, AI에게 "이 코드 봐 줘"라며 붙여 넣으면 대화에 남습니다. 이 책도 완성본 코드를 ZIP으로 나눠 줍니다.
코드를 GitHub 같은 저장소에 올렸다면 저장소가 고친 내역을 처음부터 보관해서, 지금 판에서 키를 지워도 옛 판에 남습니다. 그래서 새어 나간 키는 지우는 것보다 바꾸는 것이 먼저입니다(『필수 지식』 4장 3절).
환경변수의 값은 서버에만 있습니다. 코드에는 메모의 이름(ADMIN_KEY)만 있으니, 코드를 누구에게 보여 줘도 값은 따라가지 않습니다. 배포한 앱의 '코드·데이터 내려받기' ZIP에도 환경변수 파일(.env)은 빠져 있습니다.
바이브 코딩의 AI는 처음부터 API 키나 비밀번호 같은 비밀값을 코드에 넣지 않도록 되어 있습니다. 저희가 말하지 않았어도 키를 코드에 적지는 않았을 것입니다. 그래도 요청에 직접 적은 것은 어디에 넣을지(환경변수 ADMIN_KEY)를 저희가 정해 두어야 배포할 때 헷갈리지 않아서입니다.
배포한 앱에서는 앱 화면의 '환경변수'에 키를 넣습니다. 그 칸에는 "API 키 같은 비밀 값은 코드에 넣지 말고 여기에 저장하세요."라고 적혀 있습니다. 넣는 순서는 6장 1절에 있습니다.
4. 키를 정하고 건네는 법
저희가 시험에 쓴 gamgyul-2026은 저희 컴퓨터 안에서만 켠 서버라서 괜찮았습니다. 배포한 앱에는 이런 단어 하나와 연도를 쓰지 않습니다. 키는 외울 필요가 없으니 길고 남이 짐작하기 어려운 글자로 정하고 따로 적어 둡니다.
키를 아는 사람은 누구나 주최자입니다. 함께 운영하는 친구에게 키를 알려 주면 그 친구도 지우고 마감할 수 있습니다. 거둬들이려면 환경변수의 값을 새 키로 바꾸고, 예전 키로 /admin에 들어가 "관리자 키가 맞지 않아요."가 나오는지 확인합니다.
실제 키는 AI와의 대화에 쓰지 않습니다. 입력창 아래 문구대로 민감한 정보는 넣지 않고, 대화에 쓴 글은 AI를 만든 회사로 갑니다(『필수 지식』 4장 6절). 주최자 화면이 이상하면 "ADMIN_KEY를 넣었는데 /admin에서 '관리자 키가 아직 설정되지 않았어요.'가 나와"처럼 이름과 증상만 말합니다.
마지막 수정