profile Yoon ChaeYoung Backend

.env 파일 사용법

» Study

개요


사용 계기

프로젝트를 진행하면서 AWS S3, RDS를 활용하기 위한 AWS 계정의 Access Key, SMTP 기능을 구현하기 위한 포트 번호, 비밀번호를 안전하게 저장하는 것이 중요했다. 하지만 프로젝트 초기에 보안 문제를 해결하지 않고 Public으로 설정한 Github Repository에 commit 및 push 했다. 이때 민감한 정보가 노출되어 보안 문제가 발생했다.

이 문제를 해결하기 위해 .env 파일에 대해 조사하였다.


목적

  • SECRET_KEY, AWS_ACCESS_KEY, EMAIL_HOST, 포트 번호 등 외부에 알려지면 안 되는 값들을 보안, 유지보수를 용이하게 하기 위함

사용 방법

1. decouple 설치

// Terminal 창

pip install python-decouple

2. 프로젝트 최상위 루트 경로에 .env 파일 생성

Django Framework를 사용한 프로젝트는 manage.py와 같은 경로에 위치

env파일경로

3. .env 파일에 보안이 필요한 정보 작성

// 예시 

SECRET_KEY = 

DATABASE_NAME = 
DATABASE_USER = 
DATABASE_PASSWORD = 
DATABASE_HOST = 
DATABASE_PORT = 

EMAIL_HOST = 
EMAIL_PORT = 
EMAIL_USER = 
EMAIL_PASSWORD = 

AWS_REGION = 
AWS_STORAGE_BUCKET_NAME = 
AWS_ACCESS_KEY_ID = 
AWS_SECRET_ACCESS_KEY = 

주의사항

Key=Value (O)

Key=”Value” (X)

4. .env 파일 정보 사용

  • Django Framework를 사용한 프로젝트는 settings.py에 설정값 작성
// import 설정
from decouple import config

// 코드 내 작성 예시
SECRET_KEY = config('SECRET_KEY')

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': config('DATABASE_NAME'),
        'USER': config('DATABASE_USER'),
        'PASSWORD': config('DATABASE_PASSWORD'),
        'HOST': config('DATABASE_HOST'),
        'PORT': config('DATABASE_PORT'),
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        }
    }
}

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = config('EMAIL_HOST')
EMAIL_USE_TLS = True
EMAIL_PORT = config('EMAIL_PORT')
DEFAULT_FROM_EMAIL = config('EMAIL_USER')
EMAIL_HOST_USER = config('EMAIL_USER')
EMAIL_HOST_PASSWORD = config('EMAIL_PASSWORD')

AWS_REGION = config('AWS_REGION')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')

AWS_S3_CUSTOM_DOMAIN = f"{AWS_STORAGE_BUCKET_NAME}.s3.{AWS_REGION}.amazonaws.com"

5. .gitignore 파일에 .env 파일 추가

// .gitignore 파일

.env

느낀점

초기에 보안 문제를 간과하면 나중에 해킹이나 개인정보 유출 문제로 이어질 수 있음을 깨달았다. 앞으로는 보안 검토를 강화하고, 민감한 데이터를 안전하게 보호하려 한다.