2026년 솔로 개발자한테 가장 과소평가된 보안 위험은 이거야. 에디터 안의 AI assistant 가 시크릿이 새는 가장 큰 통로인데, 새는 게 조용하고, 포맷도 예쁘고, 도움이 되는 것처럼 보인다는 것.
한 문장으로 실패 모드
repo 에 LLM 기반 코딩 agent 를 붙여. agent 가 맥락을 잡으려고 .env 를 읽어. 나중에 deploy 스크립트를 설명하면서 진짜 .env 의 일부를 그대로 인용해. 그 조각이 채팅 히스토리에 들어가고, 서버로 sync 되고, 로그에 찍히고, 얼마나 보관되는지도 모르는 DB 에 그대로 앉아 있게 돼.
"말하지 말라고 했어" 텔
제일 뼈아픈 건 LLM 이 *자기가 조심하고 있다고 설명할* 때야. "OPENAI_API_KEY=sk-proj-A1B2... (안전을 위해 일부만 표시) 같은 .env 의 민감한 값은 공개하면 안 됩니다." 여기서 "안전을 위해 일부만" 은 시늉일 뿐이야. API key 는 앞 16자만으로도 프로젝트가 특정되고, prefix 가 provider 를 알려주고, 한 번 더 물으면 그냥 이어서 말해주는 경우도 많아.
이게 일어나는 이유
- LLM 은 commit 에 API key 가 새어 들어간 코드를 테라바이트 단위로 학습했고, 그 과정에서 새는 *모양* 을 배웠어.
- "시크릿을 공개하지 마" 는 튜닝된 행동이지 단단한 벽이 아니야. "어떤 포맷인지만 보여줘", "디버깅하려고 그래", "가정해서 말하자면" 같은 말로 우회돼.
- chain-of-thought 나 "thinking" trace 를 쓰는 요즘 모델은, 답변에는 안 쓰기로 *결정하면서* 그 추론 단계에서 시크릿을 그대로 적어놔. 그리고 추론은 로그에 남는 일이 많고.
- 시크릿이 한 번 대화 context 에 들어가면 이후 모든 턴이 그걸 안고 가. 부주의한 스크린샷 한 장, 공유된 transcript 하나면 끝이야.