Search
🌍

bdh. title: pydantic을 사용하는 경우, dotenv를 사용하는 대신 환경 변수 관리를 위해 settings.py파일을 만들고 pydantic의 BaseSettings를 상속받아 사용하라.

생성
prev summary
♻️ prev note
next summary
🚀 next note
♻️ next note
관련 임시노트
9 more properties
Pydantic BaseSettings는 자동으로 환경변수를 읽어오므로 별도의 load_dotenv()가 필요하지 않다.
from pydantic_settings import BaseSettings from pydantic import computed_field class Settings(BaseSettings): db_driver: str = "postgresql" db_host: str = "localhost" db_port: int = 5432 db_user: str = "user" db_password: str = "password" db_name: str = "mydb" @computed_field @property def DATABASE_URL(self) -> str: return f"{self.db_driver}://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}" model_config = {'env_file': '.env', 'case_sensitive': False} settings = Settings()
Python
복사
클래스 애트리뷰트로 model_config = {'env_file': '.env', 'case_sensitive': False} 를 설정하여, 이 프로젝트가 .env 파일이 있을 때 명시적으로 읽어오겠다는 의도를 표현하고, "이 프로젝트는 .env 파일을 사용한다"는 문서화 효과를 만든다.
만약 패스워드에 대해서는 기본값을 제공하지 않고 반드시 환경변수를 사용하도록 강제하고 싶다면, pydantic의 특성을 이용하여 다음과 같이 작성할 수 있어 코드가 간결해진다.
from pydantic_settings import BaseSettings from pydantic import computed_field class Settings(BaseSettings): db_driver: str = "postgresql" db_host: str = "localhost" db_port: int = 5432 db_user: str = "user" db_password: str # 기본값 없음 = Pydantic 필수값, 즉 반드시 환경변수로부터 전달받아야 함 db_name: str = "mydb" @computed_field @property def DATABASE_URL(self) -> str: return f"{self.db_driver}://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/{self.db_name}" model_config = {'env_file': '.env', 'case_sensitive': False} settings = Settings() # DB_PASSWORD 환경변수 없으면 에러 발생
Python
복사
환경변수를 한 곳에서 관리하므로, 어떤 환경변수들이 존재하는지 확인하기도 쉽고, 추후 Dockerfile, docker compose, Kubernetes와 연계가 간단해진다.
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료을 보관해 두는 영역입니다.
1.
None
from : 과거의 어떤 원자적 생각이 이 생각을 만들었는지 연결하고 설명합니다.
1.
2.
앞의 글에 적용된 내용이다.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는지 연결합니다.
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는지 연결합니다.
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되거나 이어지는지를 작성하는 영역입니다.
1.
ref : 생각에 참고한 자료입니다.
1.
None