본문 바로가기
Algorithm Trading/ComDon 프로그램 개발이야기

6. .env 파일 작성

by 컴돈AI 2024. 1. 21.

목차

.env 파일 필요한 이유

  • 우리는 보통 코드를 작성하면 깃허브에 올리거나 어디에 공유합니다. 이럴 경우 보안상 매번 API key 값을 지우고 올리고 이런 작업을 반복해야 합니다. 이러한 작업을 방지하기 위해 .env 파일을 생성한 뒤 API key 등 보안적인 값들을 작성하고 .gitignore에 .env파일을 작성해 주면 됩니다.
  • 또한 여러 가지 세팅 정보들이 존재할 수 있습니다. 자동매매를 예시로 들면 몇 개의 종목을 매수할지 제한사항이나 몇 번 분할 매수를 진행할지 몇 프로 익절을 할지 등 여러 세팅값들이 존재합니다. 이러한 값들을 .env 파일에 작성해두면 추후에 .env 파일만 변경해주면 해당 값을 손쉽게 변경해줄 수 있습니다.

.env 파일 예시

  • .env 파일 예시
    • BINANCE_KEY = ""
      BINANCE_SECRET = ""
      
      EBEST_KEY = ""
      EBEST_SECRET = ""
      
      STOCK_BUY_COUNT = "5"
      STOCK_PROFIT_PERCENT = "1"
      STOCK_LOSS_PERCENT = "1"
       
  • dotenv 라이브러리를 통해 .env 파일을 읽어올 수 있습니다.
    • 설치 : pip install python-dotenv
    • 코드
      • from dotenv import load_dotenv
        import os
        
        # .env 파일 로드
        load_dotenv()
        
        # 환경 변수 읽기
        BINANCE_KEY = os.getenv("BINANCE_KEY")
        BINANCE_SECRET = os.getenv("BINANCE_SECRET")
        
        EBEST_KEY = os.getenv("EBEST_KEY")
        EBEST_SECRET = os.getenv("EBEST_SECRET")
        
        print(BINANCE_KEY)
        print(BINANCE_SECRET)
        print(EBEST_KEY)
        print(EBEST_SECRET)

FastAPI에서 .env 파일 읽어오기

  • 참고 : https://fastapi.tiangolo.com/advanced/settings/
  • 이 프로젝트에서는 .env 파일에 작성한 내용을 수정하지 않을 것이기 때문에, 전역객체를 생성하는 방법을 적용하도록 하겠습니다.
  • utils 폴더 안에 __init__.py와 config.py 파일을 작성합니다.
    • config.py 파일 작성
      • from pydantic_settings import BaseSettings, SettingsConfigDict
        
        
        class Settings(BaseSettings):
            BINANCE_KEY: str
            BINANCE_SECRET: str
            EBEST_KEY: str
            EBEST_SECRET: str
            STOCK_BUY_COUNT : int
            STOCK_PROFIT_PERCENT : int
            STOCK_LOSS_PERCENT : int
        
            model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8")
        
        settings = Settings()
      • Settings 클래스 안에는 .env 안에 있는 모든 변수에 대한 type 이 지정되어야 합니다.
    • __init__.py 파일 작성
      • from utils.config import settings
      • 이렇게 __init__.py안에 작성해 두면 추후에 from utils import settings 만 입력하더라도 settings 객체를 불러올 수 있습니다.
  • main.py 파일 작성
    • import uvicorn
      
      from fastapi import FastAPI
      from utils import settings
      
      app = FastAPI()
      
      
      @app.get("/info")
      async def info():
          return {
              "BINANCE_KEY": settings.BINANCE_KEY,
              "BINANCE_SECRET": settings.BINANCE_SECRET,
              "EBEST_KEY": settings.EBEST_KEY,
              "EBEST_SECRET":settings.EBEST_SECRET,
              "STOCK_BUY_COUNT":settings.STOCK_BUY_COUNT
          }
      
      if __name__ == "__main__":
          uvicorn.run("main:app",host="127.0.0.1", port=8000 ,reload=True)
  • 실행 결과