프로젝트 버전을 저장 및 다른 기기에서 이어서 작업을 할 수 있도록 github에서 작업을 진행하는데
DB 연결 정보가 있다보니 commit 을 하기 전 비밀번호를 실제와 다른 것으로 저장한 후에 진행했다.
지금은 가려야 하는 것은 DB 정보 밖에 해당하지 않아서 번거롭기는 하지만 잊어버리지 않을 정도는 되지만
민감 정보가 많아지고, DB 연결이 더 많아지는 경우에 하나 하나 관리하기 어려워 진다는 문제가 있다.
이를 위해서 민감 정보를 모아두는 파일을 따로 만들고 그곳에 민감 정보를 저장, gitignore 파일에 포함시켜 commit에서 제외시킨다.
먼저, .env 파일을 불러올 수 있도록 패키지를 설치한다
python3 -m pip install python-dotenv
그 후 프로젝트 폴더 내 .env 파일을 만들어준다.
# 프로젝트 구조
-app
-controller
-model
-routers
-memo.py
main.py
.env #생성
.env 파일 안에 DB 주소를 입력한다. "DB_ADDRESS" 텍스트는 실제 사용할 DB 주소를 입력한다.
#.env
DB_ADDRESS = "DB_ADDRESS"
DB를 사용할 파일로 이동한 후 BASE_DIR 변수에 .env 가 포함된 디렉터리를 지정한다.
그 다음, load_env로 .env 파일을 불러온 다음 os.environ["DB_ADDRESS"] 처럼 .env 에 저장한 변수를 불러온다.
# memo.py
from dotenv import load_dotenv
import os
router = APIRouter(prefix = "/api/memo", tags = ["memo"])
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
load_dotenv(os.path.join(BASE_DIR, ".env"))
ca = certifi.where()
client = MongoClient(os.environ["db_address"], tlsCAFile=ca)
db = client.collection
위 코드의 경우, os.path.abspath 로 현재 파일 위치를 파악하고
os.path.dirname 으로 현재 파일의 디렉토리 (router)를 지정, 다시 os.path.dirname 으로 상위 디렉토리 (app)를 지정한다.
다음으로 os.path.join 을 통해 현재 폴더 위지 + 파일명을 지정하여 app 디렉토리의 .env 파일을 찾아서 로드하는 과정이다.
테스트 결과, 정상적으로 작동하는 것을 확인했다.
'Backend > Python' 카테고리의 다른 글
[Python] Selenuim 스크롤 조작하기 (0) | 2024.02.01 |
---|---|
[FastAPI] AWS DB - MySQL 연결하기 (1) | 2023.12.20 |
[FastAPI] Project Levup - 메모 수정 & 삭제 기능 만들기 (0) | 2023.11.29 |
[FastAPI] Project Levup - 서비스 구조화하기 (0) | 2023.11.18 |
[FastAPI] Project Levup - 메모 기능 만들기 (0) | 2023.11.16 |