코드 작성 중 꼭 필요한 내용이지만 유출되면 안되는 내용들이 있습니다
이전에 포스팅했던 jwt토큰 생성에 필요한 시크릿 키나
데이터베이스 접속관련 정보들(DB이름, 포트, 비밀번호 등등)이 대표적인 경우입니다
그리고 소셜 로그인을 담당하시게 되면 아시겠지만
로그인 파트는 담당하는 내용이 늘어나는 만큼 시크릿키가 계속 늘어납니다.. :D
그럼 이것들은 따로 메모장에 적어두나?
그건 또 아닙니다
시크릿키는 복호화할 때 또 필요하기 때문에 파일트리에 꼭 들어가있어야 합니다
엥 그럼 코드는 보통 깃에다가 배포를 하는데 어떡하지?
네 바로 그부분에 대한 해결을 도움을 드리고자 하는 오늘의 포스팅
바로 시작하겠습니다 :D
.env 파일은 환경변수를 저장하는 파일로
애플리케이션의 설정을 쉽게 관리할 수 있도록 도와줍니다
보통 개발, 테스트, 프로덕션 등의 환경에 따라 설정값이 달라지는데
.env 파일을 통해 이러한 값들을 외부로부터 분리하여 저장할 수 있어요!
(유출되어선 안되는 부분이며 유출되었다면 재설정할 필요가 있습니다!)
아래는 간단한 .env 파일의 예시입니다.
## .env
DB_USERNAME=root
DB_CONNECTION=mysql
DB_PASSWORD=1234
DB_DATABASE=thread
DB_HOST=127.0.0.1
DB_PORT=3306
SERVER_PORT=8000
SECRET_KEY=poison
위와 같이 알려지지 않아야 할 내용들을 모두 .env파일에다가 입력해둡니다
그리고 필요할 때마다 뽑아서 쓰면 되는 것인데!
이 기능을 해주는 라이브러리가 따로 있습니다
바로 dotenv! 그냥 .env를 읽은 이름 입니다ㅋㅋ
dotenv 라이브러리는 .env 파일의 내용을 읽어서
환경변수로 만들어주는 역할을 하는 라이브러리 입니다
이 라이브러리를 사용하면 손쉽게 환경변수를 로드하여 코드에서 사용할 수 있습니다
먼저 설치!
npm install dotenv
아래는 dotenv 라이브러리를 사용하는 간단한 예시입니다.
// index.js
const express = require('express');
const dotenv = require('dotenv');
const app = express();
// dotenv 라이브러리를 사용하여 .env 파일의 내용을 환경변수로 로드
dotenv.config();
const port = process.env.SERVER_PORT || 3000;
const dbHost = process.env.DB_HOST;
const dbUser = process.env.DB_USERNAME;
const dbPassword = process.env.DB_PASSWORD;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
console.log(`Database connection: ${dbUser}@${dbHost}`);
});
위의 코드에서 dotenv.config()를 호출하고
process.env.(.env에서 설정한 이름)으로 호출해서 사용하면 됩니다!
(헷갈리다면 해당 값을 console.log()로 콘솔창에 띄워보시면 됩니다!)
환경변수파일은 깃에 포함이 되지 않게끔 해주어야 합니다!
(같이 배포되어 버리면 낭패..)
gitignore에 등록해주는것 까먹지 않도록 해주세요!
환경변수의 변경 용이성
애플리케이션을 다른 환경으로 이관하거나 배포할 때 .env 파일의 내용만 변경하면 됩니다!
따라서 설정을 쉽게 관리하고 유지보수를 간편하게 만들어줍니다.
동적 설정
애플리케이션이 실행 중일 때 환경변수를 동적으로 변경할 수 있습니다
이는 애플리케이션의 동작을 유연하게 조정할 수 있게 해줍니다!
환경변수는 설정과 민감한 정보를 안전하게 관리하는 핵심 도구 중 하나입니다!
.env 파일과 dotenv 라이브러리를 사용하여
설정값을 외부로 분리하고 소스 코드를 깔끔하게 유지할 수 있죠!
이는 보안과 유지보수성을 향상시키는데 큰 도움이 될 겁니다 :D
(한번 더 얘기하지만 깃에 포함이 되지 않게끔 꼭 gitignore에 등록!)
++
발돋움 중인 예비 개발자 입니다.
태클 및 의견 공유 언제나 환영 :D