카테고리 없음

FastAPI - 라우터 내에서 앱 인스턴스를 가져오는 방법?

스택큐힙리스트 2024. 1. 26. 15:44
반응형

루터 파일에서 app 인스턴스를 가져오고 싶습니다. 어떻게 해야 하나요?


main.py 파일은 다음과 같습니다:


# ...
app = FastAPI()
app.machine_learning_model = joblib.load(some_path)
app.include_router(some_router)
# ...

이제 'some_router' 파일에서 app.machine_learning_model을 사용하려고 합니다. 어떻게 해야 하나요?

답변 1

FastAPI는 사실상 Starlette 아래에 있으므로, 제네릭 app.state 속성을 사용하여 모델을 앱 인스턴스에 저장할 수 있습니다. 이는 Starlette의 문서에서 설명되어 있습니다. (또한 State 클래스 구현도 참조하세요). 예시:


app.state.ml_model = joblib.load(some_path)

main 파일 외부에서 app 인스턴스 (그리고 이에 따라 모델)에 접근하기 위해서는 Request 객체를 사용할 수 있습니다. Starlette의 문서에 따르면, request.app에서 app을 사용할 수 있는 곳에서 (즉, 엔드포인트와 미들웨어), request를 사용할 수 있습니다. 예시:


from fastapi import Request
@router.get('/')
def some_router_function(request: Request):
model = request.app.state.ml_model

답변 2

FastAPI - 라우터 내에서 앱 인스턴스를 어떻게 얻을 수 있을까요?
FastAPI는 Python에서 빠르고 현대적인 웹 애플리케이션 개발을 위한 높은 수준의 프레임워크입니다. FastAPI를 사용할 때, 때로는 라우터에서 앱(app) 인스턴스에 액세스해야 할 때가 있습니다. 이 기사에서는 FastAPI 애플리케이션 인스턴스를 라우터 내에서 어떻게 얻을 수 있는지 이야기하겠습니다.
FastAPI에서 앱 인스턴스를 얻기 위해서는 FastAPI 애플리케이션 객체를 생성해야 합니다. 이 객체는 FastAPI로 구축한 앱의 주요 구성 요소이며, 애플리케이션의 라우터와 핸들러와 같은 다양한 기능을 관리합니다.
라우터 내에서 앱 인스턴스에 액세스하기 위해서는 `Depends()` 함수를 사용할 수 있습니다. `Depends()` 함수는 FastAPI에 내장된 의존성 주입(Dependency Injection) 시스템 중 하나입니다. 의존성 주입은 객체 간에 종속성을 자동으로 관리하고 주입하는 방식을 말합니다.
라우터 함수에 `Depends()` 함수를 인자로 추가하여 의존성 주입을 선언하면, 앱 인스턴스를 받아와서 해당 함수 내에서 사용할 수 있게 됩니다. 예를 들어, 다음과 같은 코드를 사용하여 앱 인스턴스에 액세스할 수 있습니다.
```python
from fastapi import Depends, FastAPI, APIRouter
app = FastAPI()
router = APIRouter()
@router.get(/items)
async def get_items(app: FastAPI = Depends()):
# 앱 인스턴스 사용
return {message: 앱 인스턴스에 접근했습니다!}
app.include_router(router)
```
위의 예시에서는 `get_items()` 함수가 정의된 라우터 내에서 `app` 매개변수를 활용했습니다. 함수 내에서 `app` 매개변수를 통해 FastAPI 앱 인스턴스에 접근하여 필요한 작업을 수행할 수 있습니다. 이렇게 의존성 주입을 통해 앱 인스턴스에 액세스할 수 있게 됩니다.
이처럼 FastAPI에서 라우터에서 앱 인스턴스를 얻는 방법에 대해 알아보았습니다. FastAPI의 강력한 기능과 의존성 주입을 활용하여 웹 애플리케이션을 개발하면, 효율적이고 확장 가능한 코드를 작성할 수 있습니다. FastAPI를 사용하여 개인 프로젝트나 기업용 애플리케이션을 개발할 때, 라우터에서 앱 인스턴스에 접근할 수 있음에 따라 유연한 개발이 가능해집니다.

반응형