<aside> 💡
Notation
inspect() 같은 함수를 사용하여 repository의 return을 도메인 객체화는 등 보일러플레이트를 최소화한다.-m package_name.main 으로 실행SQLAlchemy
__repr__에 id와 name을 담아 디버깅을 용이하게 만든다.my_field: Mapped[클래스] 와 같은 방식을 사용한다.Mapped[ … | None] 과 같이 자동으로 추론되므로 명시적으로 적지 않는다.FastAPI
arg: Annotated[Type, Depends(dependable)] - 으로 적는다.환경 변수는 .env 파일에 정의하고, Pydantic의 BaseSettings를 상속받아 관리한다.
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}"
# .env 파일이 있을 때 명시적으로 읽어오겠다는 의도를 표현하고, "이 프로젝트는 .env 파일을 사용한다"는 문서화 효과를 만든다.
model_config = {'env_file': '.env', 'case_sensitive': False}
settings = Settings() # DB_PASSWORD 환경변수 없으면 에러 발생
vo는 frozen=True로 설정하여 immutable하게 만든다.
ConfigDict(frozen=True)