백엔드 기초집: 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
0 / 2의존성 주입(Depends) 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
11강. 의존성 주입(Depends) 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.