firebase를 이용해서 프로젝트를 하는 중인데, firebase에서 사용하는 API key를 .env 파일에 따로 관리하는 방법을 알게 되었다. 그래서 .env 파일에 대해 간단히 정리해보려고 한다.
1. 환경변수(.env)
1) 환경변수란?
- 운영 체제(Operating System)나 애플리케이션에서 사용되는 변수
- 이 변수들은 시스템 설정, 애플리케이션 구성 및 동작에 영향을 미칠 수 있는 값들을 포함
2) 환경변수 파일 (.env)
- .env 파일은 주로 프로젝트의 환경 변수를 설정하기 위해 사용되는 파일
- "env"는 "environment"의 줄임말로, 환경에 따라 다른 설정 값을 제공하는 데 사용됨
- 일반적으로 .env 파일은 프로젝트의 루트 디렉토리에 위치
- 환경 변수를 키-값 쌍으로 정의
2. .env 파일은 왜 쓰는걸까?
- .env 파일은 주로 개발, 테스트, 운영 등 다양한 환경에서 동일한 애플리케이션을 실행할 때 사용
- .env 파일을 사용하면 환경별로 다른 설정을 쉽게 관리할 수 있음
1) 구성 설정
애플리케이션의 동작을 구성하기 위해 사용
- 예를 들어, 데이터베이스 연결 정보, API 키, 포트 번호 등을 환경 변수로 설정하여 애플리케이션의 동작을 조정
- 환경 변수를 사용하면 애플리케이션 설정을 변경할 때 코드를 수정하지 않고도 설정 값을 쉽게 조정할 수 있음
2) 보안
- 중요한 정보(예: 비밀번호, 암호화 키)를 환경 변수로 설정하여 외부에 노출되지 않도록 보호할 수 있음
- GitHub의 경우 환경 변수 파일을 .gitignore 파일에 추가하여 GitHub 등에 포함되지 않도록 하여 보안상 이점을 제공
- 단, 완벽하게 숨겨지지는 않는다는 점에 유의!!
- React의 경우, 웹 브라우저에서 React app이 실행되면서 결국 환경변수에 설정해 둔 API key값 등을 확인할 수 있다.
3) 환경 구분
애플리케이션이 실행되는 환경(예: 개발, 테스트, 운영)을 구분하기 위해 사용
- 각 환경에 대한 설정을 별도의 환경 변수로 관리하여 애플리케이션을 각각의 환경에 맞게 구성
- 환경 변수는 운영 체제 수준에서 전역적으로 설정되기도 하고, 특정 애플리케이션 내에서만 유효한 범위를 갖기도 함
- 환경 변수는 유연성과 보안성을 제공하여 애플리케이션의 동작과 구성을 관리하는 데 효율적
3. .env 파일 형식
- .env 파일은 일반적으로 key-value 형식으로 구성
# 파일명은 '.env' 이어야 하고,
# .env 파일은 항상 프로젝트의 최상위 경로에 있어야 함
API_KEY = your-api-key
DATABASE_URL = your-database-url
LOG_LEVEL = debug
# React에서 사용할 경우 환경변수의 key값은 'REACT_APP_환경변수명'으로 지어줘야 됨
# (앞에 REACT_APP_ 필수)
REACT_APP_API_KEY = api-key
REACT_APP_AUTH_DOMAIN = auth-domain.com
4. 주의할 점
- .env 파일에 포함된 환경 변수에는 민감한 정보(비밀번호, 암호화된 키 등)를 저장하지 않는다.
- .env 파일 대신 보호된 환경 변수 또는 별도의 보안 저장소에 저장하는 것을 권장
5. 보호된 .env 파일?
- 일반적인 `.env` 파일은 일반 텍스트 파일로서 암호화되거나 보호되지 않은 상태로 저장되어 있음
- 따라서 보안상 중요한 정보(예: 비밀번호, API 키)를 포함하는 경우 일반 .env 파일에 저장하는 것은 금지
- .env 파일을 서버 측에 저장: 보안상 중요한 정보를 포함하는 `.env` 파일은 웹 서버와 같이 외부로부터 접근이 제한된 환경에 저장할 수 있다. 서버 측에서 `.env` 파일을 읽어 애플리케이션에 필요한 환경 변수를 설정한다. 이렇게 하면 외부로부터 직접적인 접근이 어려워지며, 애플리케이션 내부에서만 사용될 수 있음.
- 환경 변수 관리 도구 사용: 대부분의 클라우드 호스팅 서비스는 보호된 환경 변수를 관리할 수 있는 기능을 제공한다. 예를 들어, Amazon Web Services (AWS)의 Elastic Beanstalk, Google Cloud Platform (GCP)의 App Engine, Heroku 등은 애플리케이션에 보호된 환경 변수를 설정하고 관리할 수 있는 인터페이스를 제공한다. 이러한 플랫폼 인터페이스를 이용하면 중요한 환경 변수를 보호하고 관리할 수 있다.
- 암호화된 파일 사용: 중요한 환경 변수를 암호화하여 `.env` 파일에 저장할 수 있다. 이 경우, 애플리케이션에서는 해당 파일을 읽어들이고, 필요한 암호화 키 또는 비밀번호를 사용하여 해당 값을 복호화합니다. 이 방법은 `.env` 파일을 외부에서 읽더라도 중요한 정보를 보호할 수 있다.
'✍️ What I Learned > TIL' 카테고리의 다른 글
[WIL] 팀 프로젝트 회고 (React 뉴스피드 프로젝트) (0) | 2023.07.04 |
---|---|
[TIL] Git / GitHub에 대해 정리 (0) | 2023.06.30 |
[WIL] Week 2 회고 (0) | 2023.05.29 |
[TIL] 20230523 Day 9 - 문자열 연습, 반복문과 조건문 연습 (0) | 2023.05.23 |
[TIL] 20230522 Day 8 - JavaScript 수업 시작 (0) | 2023.05.23 |