FastAPI: 의존성

김지우·2025년 7월 27일

의존성

의존성: 어떤 시점에 필요한 특정 정보. 대개는 정보가 필요한 시점에 바로 가져오는 코드를 작성

예를 들어 단순히 HTTP 요청을 통해 원하는 것을 필요할 때 얻고, 어떻게 정보를 얻었는지 알 필요 없는 구조는 꽤 합리적인 것으로 보인다. 하지만 이와 같은 구조는 아래와 같은 문제가 있다.

  • 테스트 => 테스트를 위해 함수를 변경할 수 없음
  • 숨겨진 의존성 => 세부 사항을 숨기면 우리가 작성한 코드가 망가질 수 있음
  • 중복 호출 => 의존성이 공통으로 사용되면 여러 함수가 중복 사용될 수 있음
  • OpenAPI 가시성

의존성 주입

그래서 이건 어떤 거냐면, 필요한 특정 정보를 함수에 전달하는 것으로 수행되는 방법은 다음과 같다.
(전통적으로는)
1. 헬퍼 함수를 전달.
2. 이를 호출해 특정 데이터를 가져오는 것

FastAPI의 의존성

의존성을 함수의 인자로 정의할 수 있다. 정의된 의존성은 FastAPI에 의해 자동으로 호출되고, 호출 결과는 반환되는 값을 인자로 전달한다.

의존성 작성

from fastapi import FastAPI, Depends, Query

app = FastAPI()

#의존성 함수 
def user_dep(name: str = Quert(...), gender: str = Query(...)):
	# True일지 아닐지는 여기 부분에서 수정할 수 있고, 일단 여기서는 무조건 Tryu
	return {"name": name, "valid": True}
    
# 경로 함수
@app.get("/user")
def get_user(user: dict = Depends(user_dep)) -> dict:
	return user

여기서 user_dep이 의존성 함수다 . 이거는 웹 엔드포인트로 작용하는 것이 아니라 그냥 헬퍼 함수다.

get_user는 user라는 인자가 필요하고, 이 변수는 의존성 함수에서 값을 가져온다고 명시하고 있다.

의존성 스코프

의존성은 하나의 경로 함수, 또는 경로 함수 그룹, 또는 전체 웹 애플리케이션에 정의할 수 있다.

경로 스코프

#1안
def pathfunc(name: depfunc = Depends(depfunc)):

#2안
def pathfunc(name: depfunc = Depends()):

다중 경로 스코프

from fastAPI import FastAPI, Depends, APIRouter

router = APIRouter(..., dependencies=[Depends(depfunc)])

최상위 애플리케이션 하위에 둘이상의 라우터 객체를 정의해 더 큰 규모의 FastAPI 애플리케이션을 구성하는 방법

전역 스코프

from fastapi import FastAPI, Depends

def depfunc1():
	pass
    
def depfunc2():
	pass

app = FastAPI(dependencies=[Depends(depfunc1), Depends(depfunc2)])

@app.get("/main")
def get_main():
	pass

이건 아예 최상위

profile
프로그래밍 기록 + 공부 기록

0개의 댓글