<aside> 💡
Notation
inspect() 같은 함수를 사용하여 repository의 return을 도메인 객체화는 등 보일러플레이트를 최소화한다.-m package_name.main 으로 실행SQLAlchemy
__repr__에 id와 name을 담아 디버깅을 용이하게 만든다.my_field: Mapped[클래스] 와 같은 방식을 사용한다.Mapped[ … | None] 과 같이 자동으로 추론되므로 명시적으로 적지 않는다.FastAPI
arg: Annotated[Type, Depends(dependable)] - 으로 적는다.환경 변수는 애플리케이션이 정해진 런타임 입력으로만 읽고, Pydantic의 BaseSettings를 상속받아 시작 지점에서 한 번 검증한다.
.env는 Compose, 개발 서버 또는 로컬 실행 명령이 읽어 필요한 값을 프로세스 환경변수로 전달한다. 애플리케이션 코드가 특정 .env 파일을 직접 찾거나 불러오지 않는다.from pydantic_settings import BaseSettings
from pydantic import computed_field
class Settings(BaseSettings):
db_driver: str
db_host: str
db_port: int
db_user: str
db_password: str
db_name: str
@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}"
# `.env`의 위치는 실행 도구가 알고, Settings는 프로세스 환경변수만 읽는다.
settings = Settings() # 필수 프로세스 환경변수가 없으면 시작 단계에서 에러 발생
vo는 frozen=True로 설정하여 immutable하게 만든다.
ConfigDict(frozen=True)