[python] 환경변수를 사용하여 민감한 정보의 코드 노출 피하기 [2]

신두다·2022년 6월 19일
0

공부노트

목록 보기
11/12

NOTE

  • 220623_TIL / NoSQL를 할 때 API 키, 패스워드 등의 민감 정보를 가릴 수 있도록 getenv를 활용하는 것에 대해 언급한 적이 있었다.
  • 해당 내용에 대해 내가 근미래에 사용할 것 같은 것만 간단히 정리해본다.

지난 번엔 환경 변수가 뭔지랑 기본적인 세팅은 어떻게 하는지 봤다. 이번에는 내가 실제로 프로젝트를 진행하면서 할 만한 환경 변수 활용을 실습해보려고 한다.


.env 파일

  • 프로젝트를 할 때 민감한 정보 등은 .env 파일에 몰아서 저장해두고 사용할 수 있다.
  • 프로젝트 폴더(루트)에 .env 파일을 만들고 다음과 같이 사용하고 싶은 변수를 정의해주면 끝!
    • (파일 위치는 아무데나 해도 상관없긴 하다고는 하는데, 굳이 프로젝트 폴더에 안 둘 이유가 없는 것 같기도 하다)
hello=Hola Mundo
password=dowoqkdkdk # 문자열이어도 따옴표 안 붙인다.
  • 이러면 이제 작업하는 파이썬 파일에서 어떤 패키지만 사용하면 저 변수들을 가져다 쓸 수 있게 된다.

.gitignore 파일

  • .gitignore 파일에는 원격 저장소(ex. 깃헙)에 커밋하고 싶지 않은 내용들을 작성해두면 된다.
  • 항상 .git 폴더가 위치한 루트 디렉토리에 위치해야 한다고 하는데, 일단 당장은 쉽게 생각해 프로젝트 폴더 루트에 생성한다고 생각해두면 될 듯 하다.
  • 해당 파일 예시 이미지다. 숨기고 싶은 폴더나 파일이 뭔지를 적어두면 된다.
  • 파일 생성, 문법 등은 해당 글에 자세하게 잘 적혀있으니 참고해서 다음 주에 프로젝트 할 때 따라해보면 될 것 같다. 오늘 이건 안 해볼 거임.

아무튼 이걸 왜 얘기하냐면, 아까 만들어둔 .env 파일을 이 .gitignore 파일에도 등록을 해두어야 한다는 것을 말하기 위해서다! .env 파일을 나만 볼 수 있어야 되니까!


dotenv 패키지 통해 변수 사용하기

  • 자, 그럼 .env 파일에 있는 변수를 파이썬 파일에서 가져와 사용하는 걸 해보자. 이때 dotenv 패키지를 사용하면 된다.
    • 설치해줘야 함 $ pip install python-dotenv
  • 파이썬 파일에서 사용 예시
import os
from dotenv import load_dotenv

load_dotenv()

print(os.getenv('hello'))
print(os.getenv('password'))
  • 실행해본 결과: 출력되었다! 이렇게 API키 등 공개하고 싶지 않는 정보를 변수로 가져다가 쓰기만 하면 되는 것이다~ 많이 쓰게 될 것 같다.

참고 load_dotenv() 메소드

  • 위에서 load_dotenv()를 써야 하는 걸 보고 왜 그래야 하는지 역할을 좀 더 찾아봤다.
  • 역할은 한 마디로 .env 파일에서 환경 변수를 가져오는 것이다. (출처)
  • 참고로 load_dotenv는 디폴트로 시스템 환경 변수를 .env 파일에서 정의한 환경변수로 덮어쓰지 않는다. (첫 시간에 기본 세팅했을 때 그거 생각하면 될 듯) 즉, 동일한 변수명에 다른 값이 지정되어 있는 차이가 있을 때 무엇을 우선시 할 것이냐로 생각하면 될 것 같다.
  • load_dotenv()는 다음과 같은 옵션들을 쓸 수 있다.
def load_dotenv(
    dotenv_path=None, #.env 파일의 절대경로 및 상대경로
    stream=None, # .env 파일 내용에 대한 StringIO 객체
    verbose=False, # .env 파일 누락 등의 경고 메시지를 출력할 것인지에 대한 옵션
    override=False, # 앞서 말한 덮어쓰기 옵션. 시스템 환경변수를 .env 파일에 정의한 환경변수가 덮어쓸지에 대한 옵션
    **kwargs
)
  • (참고로 dotenv_values()를 대신 쓸 수도 있다고 하는데, 거의 유사하게 작동된다고 한다. 파일 시스템이 아닌 네트워크에서 환경 변수를 로드해올 수 있도록 하는 듯? 나중에 필요한 상황에 추가공부하자.)
profile
B2B SaaS 회사에서 Data Analyst로 일하고 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 9월 15일

shift나 cut은 처음인데 흥미로와요🥸

답글 달기