환경 변수로 시크릿 다루기
API 키와 비밀번호를 코드 밖에 두기
⏱ 예상 ~7분
01 · 읽기
회사에 수백만 달러 손실을 안기는 실수: API 키와 비밀번호를 소스 코드에 직접 commit하는 것.
시크릿이 git 히스토리에 들어가면 영원히 남아요. 다음 commit에서 지워도, 리포를 clone한 사람은 누구든 히스토리에서 찾을 수 있어요. 봇이 GitHub을 적극적으로 스캔해서 실수로 commit된 키를 찾아 몇 분 안에 악용해요.
해결책은 간단해요. 환경 변수. 코드에 시크릿을 쓰는 대신, 절대 commit하지 않는 .env 파일에 저장하세요. 프로그램이 실행될 때 값을 읽고, 시크릿은 안전하게 유지돼요.
💡 상상해 봐요환경 변수는 사무실 금고와 같아요. 비밀번호를 모니터에 붙이지 않죠(그게 코드에 하드코딩하는 거예요). 금고(.env 파일)에 잠가두고 필요할 때 꺼내요. 당연히 금고 내용물을 복사해서 모두에게 나눠주지도 않고요(git에 commit하기).
02 · 읽기
심각한 문제가 있는 Node.js 앱을 물려받았어요. 시크릿이 소스 코드에 하드코딩돼 있어요. 먼저 찾고, 그다음 설정을 고쳐서 시크릿을 안전하게 저장할게요.
03 · 터미널 실습
먼저 코드에서 하드코딩된 시크릿을 찾아요. grep으로 API 키나 비밀번호처럼 보이는 걸 검색하세요.
(이 섹션은 인터랙티브해요 — JavaScript를 켜 주세요.)
04 · 터미널 실습
이제 .env 파일을 만들어 시크릿을 안전하게 보관해요. 이 파일에 실제 값을 넣되, git에 절대 commit하지 않게 할 거예요.
(이 섹션은 인터랙티브해요 — JavaScript를 켜 주세요.)
05 · 터미널 실습
가장 중요한 단계: .env를 .gitignore에 추가해서 절대 commit되지 않게 하세요. 이게 없으면 git add . 한 번에 시크릿이 다음 commit에 들어가요.
(이 섹션은 인터랙티브해요 — JavaScript를 켜 주세요.)
06 · 코드 예제
아래는 수정된 app.js가 어떻게 보이는지예요. 하드코딩된 값 대신, .env를 로드한 다음 process.env에서 읽어요.
app.js — 환경 변수 사용(수정 완료)
require('dotenv').config();
const express = require('express');
const app = express();
// Secrets come from .env, not hardcoded
const API_KEY = process.env.API_KEY;
const DB_PASSWORD = process.env.DB_PASSWORD;
const PORT = process.env.PORT || 3000;
console.log('API key loaded:', API_KEY ? 'Yes' : 'No');
// NEVER log the actual key value!
process.env는 dotenv가 로드된 다음 .env 파일에서 읽어요. || 3000은 PORT가 설정되지 않을 때 기본값을 제공해요. .env 없이도 앱이 돌게 해주는 흔한 패턴이에요.
07 · 퀴즈
절대로 git에 commit하면 안 되는 것은?
- API 키가 들어 있는 .env 파일
- 리포가 너무 커져서
- Git이 .env 파일을 지원하지 않아서
- .env 파일은 내 컴퓨터에서만 작동해서
08 · 빈칸 채우기
Node.js에서 dotenv를 쓸 때, API_KEY라는 환경 변수에 접근하려면 process._____.API_KEY를 쓰세요.
09 · 체크리스트
환경 변수 보안 체크리스트예요. 이 세 단계는 모든 프로젝트에서 본능이 돼야 해요.
- .env가 .gitignore에 들어 있어요
- 실제 시크릿 값은 절대 로그로 찍지 않아요
- 자리표시자 값이 있는 .env.example을 만들었어요
⚠ 전체 인터랙티브 경험에는 JavaScript가 필요해요. JavaScript를 켜고 새로 고침해 주세요.
※ 이 사이트는 독립 운영되는 교육 프로젝트로, Anthropic의 공식 제품이 아니에요. Claude™ 는 Anthropic, PBC 의 상표예요.