- Dependency Injection 개념
- 특정 동작에 필요한 의존성을 함수나 클래스 외부에서 주입하는 패턴
- FastAPI에서는 Depends를 사용하여 필요한 의존성을 정의하고 관리할 수 있음
- 주로 데이터베이스 세션, 인증, 설정 등의 관리에서 사용됨
- 특정 함수를 엔드포인트에 자동으로 주입
연결 가능 목록
@app.get("/items/")
async def read_items(db: AsyncSession = Depends(get_db)): # ✅ DB 세션 자동 주입
result = await db.execute("SELECT * FROM items")
items = result.fetchall()
return items
SECRET_KEY = "secret-key"
ALGORITHM = "HS256"
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="login")
async def get_current_user(token: str = Depends(oauth2_scheme)): # ✅ 토큰 자동 주입
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
username = payload.get("sub")
if not username:
raise HTTPException(status_code=401, detail="Invalid token")
except Exception:
raise HTTPException(status_code=401, detail="Invalid token")
return {"username": username}
@app.get("/profile/")
async def read_profile(current_user: dict = Depends(get_current_user)): # ✅ 현재 사용자 정보 자동 주입
return {"message": f"Hello, {current_user['username']}!"}
class AppSettings:
def __init__(self):
self.debug = True
self.api_key = "my-secret-api-key"
async def get_settings():
return AppSettings()
@app.get("/settings/")
async def read_settings(settings: AppSettings = Depends(get_settings)): # ✅ 설정 값 자동 주입
return {"debug": settings.debug, "api_key": settings.api_key}
from fastapi import Request, Depends
async def log_request(request: Request):
print(f"📌 요청 수신: {request.method} {request.url}")
return request
@app.get("/secure-data/")
async def secure_data(request: Request = Depends(log_request)): # ✅ 요청 로깅 자동 적용
return {"message": "This is secure data!"}
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/users/me/")
async def read_users_me(token: str = Depends(oauth2_scheme)): # ✅ 토큰 자동 주입
return {"token": token}