learn

공통화할 만한 라이브러리들

공통화할 만한 라이브러리들

import-caching-across-languages 에서 이어지는 내용. "어떤 것들을 공통화하면 좋을까?"에 대한 답.

기준

"한 번 초기화하고 공유해야 하는 것" 들이 공통화 대상이다. os처럼 상태 없이 함수만 제공하는 애들은 굳이 공통화할 필요 없고, 설정이나 연결 상태를 갖는 객체가 공통화 대상이다.


로깅/모니터링 계열

  • loguru — 포맷, 파일 출력, 레벨 설정을 한 곳에서 하고 설정된 logger를 공유
  • structlog — loguru와 동일한 이유
  • sentry_sdksentry_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-dotenvload_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/네트워크 연결 계열

  • sqlalchemyengine, SessionLocal을 한 번 만들고 공유
  • redis — 커넥션 풀이 있어서 매번 새로 만들면 낭비
  • httpx.AsyncClient — 동일한 이유, 재사용이 성능상 이득