AI한테 "이 키로 연결해 줘" 하면서 채팅창에 키를 붙여 넣으면 안 될까요? 제일 빠르긴 해요. 근데 제일 위험한 방법이었어요.
자동화를 만들다 보면 비밀번호 같은 값이 계속 생겨요. OpenAI API 키, 인스타그램 토큰, 스레드 토큰, 블로그 응용 프로그램 비밀번호까지요. 이걸 어떻게 보관하는지, API 키 보관법을 코딩 몰라도 따라 할 수 있게 적어 볼게요.

API 키 보관법 한눈에 보기
- 키와 토큰은 AI 채팅, 메신저, 코드 파일, 화면 캡처에 남기지 않아요
- 내 컴퓨터의 "사용자 환경변수"에만 넣고, 자동화는 거기서 읽기만 해요
- 넣을 때도 화면에 안 보이게 입력해요
- 오류 메시지와 기록(로그)에도 키가 안 찍히게 가려요
- 새어 나갔다 싶으면 바로 새 키로 바꿔요
왜 AI 채팅에 붙이면 안 될까
AI 채팅에 붙인 건 대화 기록에 남아요. 나중에 그 대화를 공유하거나, 다른 기기에서 열거나, 화면을 캡처해서 누구한테 보여 주는 순간 키도 같이 퍼져요.
키는 그 자체가 열쇠예요. 누가 제 키를 가지면 제 돈으로 AI를 쓰거나, 제 계정으로 게시물을 올릴 수 있어요.
저도 한 번 아찔했어요. 블로그 관리자 화면을 캡처해서 AI한테 보여 주다가, 2단계 인증용 QR 코드가 같이 찍힌 거예요. 그 QR은 안 쓰기로 하고 캡처 파일도 지웠어요. 캡처도 붙여 넣기랑 똑같다는 걸 그때 배웠어요.
어디에 넣을까, 사용자 환경변수
윈도우에는 "사용자 환경변수"라는 칸이 있어요. 내 계정에서 돌아가는 프로그램이 읽을 수 있는, 이름표 붙은 저장 칸이에요.
저는 키마다 이름을 붙여서 이 칸에 넣어요. 블로그 주소, 블로그 아이디, 블로그 응용 프로그램 비밀번호를 각각 다른 이름으로요. 자동화 코드는 그 이름으로 값을 읽기만 해요. 코드 파일에는 키가 한 글자도 안 들어가요.
넣을 때도 화면에 안 보이게
환경변수에 넣을 때 화면에 키가 그대로 보이면, 그것도 캡처나 기록에 남을 수 있어요. 그래서 저는 윈도우 PowerShell에서 이렇게 넣어요.
$p = Read-Host "비밀번호" -AsSecureString; [Environment]::SetEnvironmentVariable('이름', [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($p)), 'User')
실행하면 "비밀번호"를 물어봐요. 붙여 넣어도 화면엔 별표처럼 가려져 보이고, 엔터를 누르면 그 값이 '이름' 칸에 저장돼요. '이름' 자리에 원하는 이름을 넣으면 돼요.
한번은 이걸 붙여 넣었는데 PowerShell에서 안 들어가더라고요. 시프트+엔터를 쳤더니 됐어요. 별것 아닌데 한참 헤맸어요.
기록에도 안 남게 가려요
자동화가 실패하면 오류 메시지가 기록에 남아요. 근데 어떤 오류는 요청에 쓴 키를 그대로 보여 주기도 해요.
그래서 자동화가 기록을 남기거나 알림 메일을 보낼 때, 키처럼 생긴 값은 [REDACTED]로 바꿔서 남기게 했어요. 오류를 들여다볼 때도 키는 안 보여요.
새어 나갔다 싶을 때
바로 새 키를 만들고, 예전 키는 지워요. 대부분 서비스는 키를 지우는 순간 그 키로는 아무것도 못 해요.
사용 기록도 확인해요. 내가 안 쓴 사용량이 있는지 보는 거예요.
그리고 사용 한도를 걸어 둬요. 한도가 있으면 최악이어도 피해가 그 안에서 멈춰요.
정리하면, 키를 넣으면 안 되는 곳은 이래요. AI 채팅, 메신저, 메일, 코드 파일, 공유 문서, 화면 캡처, 스크린 녹화, 오류 기록과 알림 메일이요.
키 보관은 귀찮아도 한 번만 정해 두면 돼요. 저는 이 원칙을 자동화 규칙 파일에 적어 두고, AI한테도 "비밀값은 채팅에 붙이지 말고 환경변수에만"을 지키게 해요.
API 키를 처음 만들고 한도를 거는 방법은 이 글에 있어요.
→ OpenAI API 키 발급 방법: 프로젝트 나누기와 사용 한도 설정까지
AI한테 일 시킬 때 지킬 것들을 모은 글도 같이 보세요.
