본문 바로가기
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)
    • 실행 결과