공통화할 만한 라이브러리들
import-caching-across-languages 에서 이어지는 내용. "어떤 것들을 공통화하면 좋을까?"에 대한 답.
기준
"한 번 초기화하고 공유해야 하는 것" 들이 공통화 대상이다. os처럼 상태 없이 함수만 제공하는 애들은 굳이 공통화할 필요 없고, 설정이나 연결 상태를 갖는 객체가 공통화 대상이다.
로깅/모니터링 계열
loguru— 포맷, 파일 출력, 레벨 설정을 한 곳에서 하고 설정된logger를 공유structlog— loguru와 동일한 이유sentry_sdk—sentry_sdk.init(dsn=...)은 한 번만 호출해야 함opentelemetry— tracer 설정이 복잡해서 무조건 중앙화
# module/logger.py
from loguru import logger
logger.add("app.log", rotation="10 MB", level="INFO")
__all__ = ["logger"]
# 어디서든
from .logger import logger
설정/환경변수 계열
python-dotenv—load_dotenv()를 여러 번 호출하면 꼬일 수 있음dynaconf,pydantic-settings— settings 객체를 한 곳에서 만들고 공유하는 게 정석
# config.py
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
db_url: str
debug: bool = False
settings = Settings() # .env 읽어서 객체 생성
# 어디서든
from .config import settings
DB/네트워크 연결 계열
sqlalchemy—engine,SessionLocal을 한 번 만들고 공유redis— 커넥션 풀이 있어서 매번 새로 만들면 낭비httpx.AsyncClient— 동일한 이유, 재사용이 성능상 이득