[팁].env에 넣으면 안전할까? 브라우저에 전달되는 값 구분하기
파일 이름이 .env라고 해서 그 안의 모든 값이 서버에만 남는 것은 아닙니다. 빌드 도구가 브라우저 코드에 포함하도록 정한 변수는 배포 결과에서도 읽을 수 있습니다.
저장 위치보다 실행 위치를 봅니다
| 값의 종류 | 놓일 위치 | 판단 기준 |
|---|---|---|
| 공개 서비스 주소 | 브라우저 가능 | 누구나 알아도 접근 권한이 바뀌지 않음 |
| Supabase publishable key | 브라우저 사용 가능 | 데이터 접근은 별도 권한 정책으로 제한 |
| 관리자용 secret·service role key | 서버 전용 | 노출되면 권한 경계를 우회할 수 있음 |
| 외부 API 비밀키 | 서버 전용 | 공개 사용을 전제로 발급된 값인지 확인 |
Supabase는 공개용 키와 서버 비밀키의 역할을 구분합니다. 공개용 키를 사용하더라도 RLS가 데이터를 보호하도록 구성해야 합니다. 공식 API 키 설명을 참고하세요.
프런트엔드 접두사를 확인하세요
예를 들어 Vite의 VITE_ 환경변수는 클라이언트 코드에 노출되는 용도입니다. 이름이 그럴듯하다고 안전해지는 것은 아닙니다. 비밀값을 VITE_SECRET_KEY처럼 이름 붙여 전달하면 안 됩니다. Vite 환경변수 문서에서 노출 규칙을 확인할 수 있습니다.
배포할 때 남길 점검
- 서버 전용 값이 프런트엔드 변수에 섞이지 않았다.
-
.env와 로컬 비밀 설정이 Git에 포함되지 않는다. - 브라우저로 배포한 자산에 실제 비밀값이 없는지 확인했다.
- 공개 데이터 접근은 키 이름이 아닌 권한 정책으로 제한했다.
Cloudflare Workers에서는 서버 전용 값을 secret으로 전달할 수 있습니다. Workers secrets 문서에서 관리 방법을 확인하세요.
이미 비밀키가 공개 저장소나 배포 자산에 올라갔다면 파일에서 지우는 것으로 끝내지 말고 해당 키를 폐기·교체해야 합니다. 질문할 때도 키 원문 대신 변수 이름과 사용 위치를 설명해 주세요.
댓글 0
불러오는 중…
댓글을 쓰려면 로그인해 주세요.