FastAPI의 「Depends」는 의존성 주입(DI) 시스템입니다.
DB 세션·인증된 사용자·설정 같은 「공통적으로 필요한 값」을 함수가 자동으로 받게 해 줍니다.
테스트도 매우 쉬워집니다.
기본 패턴.
from fastapi import Depends.
def get_db(): db = SessionLocal(); try: yield db; finally: db.close().
@app.get("/users") def list(db = Depends(get_db)): return db.query(User).all().
라우트 함수가 db를 자동으로 받음.
체이닝.
의존성이 또 다른 의존성을 가질 수 있습니다.
def get_current_user(token: str, db = Depends(get_db)): ...
→ 라우트가 user = Depends(get_current_user)만 선언해도 db도 자동으로 따라옴.
yield로 정리 코드.
yield 다음에 쓴 코드는 응답이 나간 후 실행.
db.close(), 파일 닫기, 트랜잭션 commit 같은 정리 작업이 자동.
with 문과 비슷한 라이프사이클.
테스트 친화적.
app.dependency_overrides[get_db] = test_db로 의존성 통째로 교체 가능.
실제 DB 대신 테스트 DB나 모킹된 객체를 주입할 수 있어, 라우트 코드를 안 바꾸고도 단위 테스트 작성이 쉽습니다.
한 줄 요약
FastAPI의 Depends는 DI 시스템으로 DB·인증·설정 같은 공통 값을 자동 주입합니다.
yield로 정리 코드, dependency_overrides로 테스트가 쉽습니다.
더 알아볼 것
- BackgroundTasks — 응답 후 작업
- dependency_overrides 테스트
- Sub-dependencies 구조