절대 들키면 안 되는 비밀: 환경 변수
데이터베이스 비밀번호, API 결제 키, JWT 시크릿 키 등을 자바스크립트 코드 파일(app.js)에 직접 적어두는 것(하드코딩)은 자살 행위와 같습니다. Github에 코드를 올리는 순간 전 세계 해커들의 봇(Bot)이 1초 만에 스크래핑하여 해킹을 시도합니다. 이를 막기 위해 코드와 비밀번호를 완전히 분리하는 기술이 바로 환경 변수(Environment Variables)입니다.
dotenv 패키지란?
Node.js에서는 dotenv라는 아주 유명한 패키지를 사용하여 이 문제를 해결합니다. 서버 컴퓨터(또는 로컬 PC)에만 .env라는 금고 파일을 몰래 만들어두고, 코드에서는 그 금고 안의 내용물만 꺼내어 쓰는 방식입니다.
// 1. 패키지 설치: npm install dotenv
// 2. 프로젝트 최상단에 .env 파일 생성 후 작성 (따옴표나 세미콜론 절대 금지!)
DB_PASSWORD=super_secret_password
SERVER_PORT=4000
// 3. app.js 코드 최상단에서 금고 열기 (로드)
require('dotenv').config();
// 4. 금고에서 꺼내 쓰기 (항상 process.env.변수명 으로 꺼냅니다)
const password = process.env.DB_PASSWORD;
console.log(password); // "super_secret_password" 출력됨
🚨 가장 중요한 마지막 1퍼센트: .gitignore
아무리 .env 파일로 잘 분리했다 하더라도, .env 파일 자체가 Github에 올라가버리면 아무 소용이 없습니다! 프로젝트 폴더에 있는 .gitignore 파일을 열어서 .env라는 글자를 반드시 추가해야 합니다. 그래야 Git이 .env 파일을 무시하고 업로드하지 않습니다.
환경 변수(dotenv) 보안 시뮬레이션
코드 파일(app.js)에 비밀번호를 직접 적지 않고, 로컬에만 존재하는 .env 금고 파일에 보관하여 해킹을 방지하는 원리를 확인해 보세요.
/* === 1. app.js (GitHub에 공개될 소스 코드) === */
// 💡 dotenv 모듈을 불러와서 로컬 PC의 .env 파일(금고)을 엽니다.
require('dotenv').config();
// Github에 올라가는 소스코드에는 진짜 비밀번호가 전혀 보이지 않습니다!
// 오직 process.env.변수명 이라는 '열쇠 이름'만 적어둡니다.
const password = process.env.DB_PASSWORD;
console.log('[보안 점검] 소스코드 안전 상태: 양호 (하드코딩 없음)');
console.log(`[서버 내부 로직] DB 연결 시도 (패스워드: ${password})`);
/* === 2. .env (로컬 PC 금고 파일, GitHub 업로드 제외) === */
DB_PASSWORD=super_secret_1234
Terminal (Server Logs & Security Monitor)
$ node app.js
[보안 점검] 소스코드 안전 상태: 양호 (하드코딩 없음)
[서버 내부 로직] DB 연결 시도 (패스워드: super_secret_1234)
> 🤖 [해킹 방어 테스트] 악성 봇(Bot)이 Github 저장소를 크롤링합니다...
> ✅ [방어 성공] app.js 소스코드 파일에는 "process.env.DB_PASSWORD" 라는 변수명만 적혀 있습니다.
> ✅ [방어 성공] 실제 비밀번호가 적힌 .env 파일은 .gitignore 규칙에 의해 업로드가 차단되어, 해커가 절대 볼 수 없습니다!