본문으로 건너뛰기
백엔드 기초집: Python FastAPILESSON 11

의존성 주입(Depends)

난이도초급
예상 시간35분
선수지식이전 강의

11강. 의존성 주입(Depends)

1. 이번 강의에서 해결할 문제

여러 endpoint가 같은 저장소 생성, 인증 확인, 설정 읽기를 반복하면 교체와 테스트가 어렵습니다. 필요한 값을 함수 밖에서 준비해 주입합니다.

2. 학습 목표

3. 핵심 개념

의존성은 endpoint가 일을 수행하기 위해 필요한 값이나 선행 검사입니다. FastAPI는 dependency 함수의 인자도 다시 해결하고 결과를 같은 요청 안에서 재사용합니다. yield 앞은 자원 획득, 뒤는 응답 이후 정리에 사용되어 나중에 DB Session을 안전하게 닫을 수 있습니다.

4. 단계별 코드 예시

파일 경로: game-ranking-api/app/services/records.py

app/services/records.py
class RecordStore:
def __init__(self) -> None:
self.items: list[dict[str, object]] = []

def list(self) -> list[dict[str, object]]:
return self.items.copy()


record_store = RecordStore()

파일 경로: game-ranking-api/app/dependencies.py

app/dependencies.py
from collections.abc import Generator

from app.services.records import RecordStore, record_store


def get_record_store() -> Generator[RecordStore, None, None]:
try:
yield record_store
finally:
pass # 14강에서 DB Session 정리로 교체합니다.

파일 경로: game-ranking-api/app/routers/records.py

app/routers/records.py
from typing import Annotated

from fastapi import APIRouter, Depends

from app.dependencies import get_record_store
from app.services.records import RecordStore

router = APIRouter(prefix="/records", tags=["records"])
RecordStoreDep = Annotated[RecordStore, Depends(get_record_store)]


@router.get("")
def list_records(store: RecordStoreDep) -> dict[str, object]:
return {"items": store.list()}

실행 위치: game-ranking-api/

python -m uvicorn app.main:app --reload
Invoke-RestMethod http://127.0.0.1:8000/records

5. 코드가 동작하는 이유

FastAPI가 요청마다 get_record_store를 호출하고 yield 값을 endpoint 인자에 넣습니다. endpoint는 저장소의 생성 위치를 모르므로 이후 메모리 구현을 DB Session이나 테스트 대역으로 바꿔도 함수 계약을 유지할 수 있습니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

의존성 주입(Depends) 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“의존성 주입(Depends)” 구현을 설계할 때 책임과 구조를 올바르게 나눈 선택은 무엇인가요?
  2. 문제 2‘yield 뒤 정리 코드를 생략합니다.’ 상태에 관한 “의존성 주입(Depends)” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

11강. 의존성 주입(Depends) 미완료 상태