[drf] .env를 활용한 키 값 관리

최동혁·2023년 5월 12일
0

DRF

목록 보기
15/19

django-environ

  • 장고 프로젝트를 진행하다 보면, github와 같은 형상 관리 툴에 노출되어서는 안되는 값들이 존재한다.
  • 예를 들어 aws 계정 관련 값, 장고 secret key, DB 정보 등등
  • 이러한 것들을 .env 파일을 이용해 관리하기 쉽게 해주는 모듈이 django-environ 모듈이다.

설정 방법

경로 설정 및 env 객체 생성

from pathlib import Path
import environ

BASE_DIR = Path(__file__).resolve().parent.parent

env = environ.Env()

env_path = BASE_DIR / ".env"
  • Path 객체를 사용해서 장고 프로젝트의 루트 디렉토리 절대 경로를 BASE_DIR 객체에 반환해준다.
  • 그리고 environ 모듈의 Env 메소드를 사용해서 env 객체를 생성해준다.
    • environ.Env 객체의 메소드를 사용하기 위함.
  • BASE_DIR는 Path 객체이다. / 연산자는 Path 객체의 경로를 조작하는데 사용되는 연산자이다. 위의 코드처럼 한다면, BASE_DIR에 .env 파일이 있는 경로를 추가해서 env_path를 Path 객체로 만들어준다.
  • 여기서 설정해준대로 .env 파일은 BASE_DIR로 설정해놓은 루트 디렉토리 바로 밑에 위치시켜야 한다.

.env 파일 읽기

if env_path.exists():
    with env_path.open("rt", encoding="utf8") as f:
        env.read_env(f)
  • txt 파일이 존재하는 경로에 해당 파일이 존재한다면 with 문을 이용해 파일을 읽는다.
  • rt는 텍스트 모드로 열기 위한 모드 문자열이다.
    • r은 읽기 모드(read mode), t는 텍스트 모드(text mode)를 나타낸다.
  • 해당 모드로 읽어온 파일을 f라는 객체로 사용한다.
  • env 객체에서 제공하는 read_env 메소드를 사용해서 해당 파일의 내용을 읽어 현재 환경 변수로 설정해준다.

with 문법

  • with 문은 파일이나 리소스와 같이 컨텍스트 관리자를 사용하는 경우에 유용한 문법이다.

  • with 문을 사용하면 코드 블록 내에서 자동으로 컨텍스트를 설정하고, 블록이 종료되면 컨텍스트를 정리하는 작업을 자동으로 처리할 수 있다.

    • 여기서 말하는 컨텍스트는 어떤 동작을 수행할 때 필요한 환경이나 상황을 나타낸다. 컨텍스트는 일반적으로 어떤 작업을 수행하기 위해 필요한 설정, 리소스, 상태 등을 포함할 수 있다.
    • 파일 관리와 관련하여 예를 들어보면, 파일을 열고 작업을 수행하는 경우 파일의 상태 및 설정을 유지하는 컨텍스트를 설정해야 한다. 이를 통해 파일을 열 때마다 명시적으로 열고 닫는 코드를 작성하지 않아도 된다. with 문은 이러한 컨텍스트를 설정하고 관리하는 데 도움을 준다.
  • 일반적으로 with 문은 파일을 열고 닫을 때 사용된다.

  • 파일을 열어 작업을 수행한 후 with 블록이 종료되면 자동으로 파일을 닫아준다.

  • 이는 코드에서 명시적으로 파일을 닫아줘야 하는 번거로움을 줄여준다.

.env 파일의 secret key 가져와서 적용하기

SECRET_KEY = env.str(
    "SECRET_KEY",
    default="",
)
  • env 객체에서 제공해주는 str 메소드는 .env 파일에 저장되어 있는 SECRET_KEY에 해당하는 값을 문자열로 가져와주는 함수이다.
  • .env 파일에서는 문자열 지정 같은 것이 안되기 때문에 해당하는 value 값을 가져와서 그 값을 자료형에 맞게 변환해줘야한다.
  • 만약 .env 파일에 SECRET_KEY에 해당하는 값이 없다면 빈 문자열로 설정해준다.

.env 파일 작성 형식

SECRET_KEY=abcdefghi
DB_NAME=web
DB_USER=root
DB_PASSWORD=qwer1234
DB_HOST=db
  • 띄어쓰기를 하지말고 = 연산자를 이용해 key와 value를 나눈다.
  • 타입 지정을 해주지 않는다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글