인프런 커뮤니티 질문&답변

SJ님의 프로필 이미지
SJ

작성한 질문수

실전! FastAPI 입문

(실습) Repository Pattern - 레포지토리 패턴

DI 주입

해결된 질문

작성

·

255

0

현재구조는

todo.py ( controller 역할 )

@router.get("/", status_code=200)
def get_todos_handler(
    order: str | None = None,
    todo_repo: ToDoRepository = Depends(ToDoRepository),
) -> TodoListSchema:
    todos: List[ToDo] = todo_repo.get_todos()
    if order and order == "DESC":
        return TodoListSchema(
            todos=[ToDoSchema.from_orm(todo) for todo in todos[::-1]]
        )
    return TodoListSchema(
        todos=[ToDoSchema.from_orm(todo) for todo in todos]
    )

repository.py ( service 와 repository 역할 )
로 되어있다면

 


class ToDoRepository:
    def __int__(self, session: Session):
        self.session = session

    def get_todos(self) -> List[ToDo]:
        return list(self.session.scalars(select(ToDo)))

만약

controller, service , repository 로 구조를 변경한다고 했을때도

controller 에서 부터

todo_repo: ToDoRepository = Depends(ToDoRepository)

를 작성해서 service -> repository 까지 끌고와야 할까요 ??

 

 

답변 1

0

신동현님의 프로필 이미지
신동현
지식공유자

네, FastAPI를 사용하신다면 그렇습니다. FastAPI의 Depends는 재귀적으로 호출되기 때문에 연관된 컴포넌트를 DI로 주입해주셔야 합니다.

다만 컴포넌트를 어디에 어떻게 주입할 지는 어떤 소프트웨어 아키텍쳐를 적용할 지에 따라 다를 수 있습니다.

SJ님의 프로필 이미지
SJ
질문자

감사합니다 !

SJ님의 프로필 이미지
SJ

작성한 질문수

질문하기