- 1. FastAPI 입문: 설치부터 Hello World 까지
- 2. Path 와 Query 매개변수 (URL 로 데이터 받기)
- 3. Pydantic 으로 Request Body 다루기
- 4. Response Model 과 HTTP 상태 코드
- 5. 예외 처리 (HTTPException 완벽 가이드)
- 6. 의존성 주입 (Dependency Injection) 정복
- 7. SQLAlchemy 비동기 데이터베이스
- 8. JWT 인증과 보안 (로그인부터 토큰 갱신까지)
- 9. 실시간 통신 (WebSockets & SSE)
- 10. 테스트 작성법 (Pytest 완전 가이드)
6. 의존성 주입 (Dependency Injection) 정복
# 6 강. 의존성 주입 (Dependency Injection)
## 🎯 학습 목표
- 의존성 주입 (DI) 개념 이해
- Depends() 활용법
- 의존성 체인과 캐싱
---
## 1. 의존성 주입이란?
```python
# ❌ 반복되는 인증 로직
@app.get("/users/me")
def read_user():
token = get_token()
user = verify_token(token)
return user
# ✅ 의존성 주입
def get_current_user(token: str = Header(...)) -> User:
return verify_token(token)
@app.get("/users/me")
def read_user(user: User = Depends(get_current_user)):
return user
```
---
## 2. 의존성 체인
```python
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
def get_user_by_id(user_id: int, db = Depends(get_db)):
return db.query(User).filter(User.id == user_id).first()
def require_admin(user = Depends(get_user_by_id)):
if user.role != "admin":
raise HTTPException(403, "Not enough permissions")
return user
```