인공지능 개발자 수다(유튜브 바로가기) 자세히보기

Fastapi

[FastAPI] 디자인패턴-의존성 주입(Dependency Injection) (11-1)

Suda_777 2025. 1. 24. 17:11

목차

    반응형

    0. 디자인 패턴(Design Pattern)

    0.1. 설명

    • 소프트웨어 개발 과정에서 반복적으로 나타나는 문제들을 해결하기 위해 제안된 재사용 가능한 솔루션
    • 특정한 상황에서의 최선의 설계 방법을 정의

    0.2. 장점

    • 코드 재사용성 증가
    • 유지보수성 향상
    • 개발 시간 단축
    • 효율적인 협업
    • 유연하고 확장 가능한 코드

    0.3. 단점

    • 초보 개발자에게는 어려움
    • 과도한 설계 / 남용의 위험

    1. 의존성 주입(Dependency Injection) 개념

    1.1. 설명

    • 특정 값을 외부 함수에서 전달받는 방식

    1.2. 장점

    • 코드 재사용성 증가 (데이터베이스 연결, 인증 토근 검증, 사용자 정보 추출 등)
    • 테스트 코드 작성 용이 (개발환경, 테스트 환경에 따라 다른 의존성을 줄 수 있음)
    • 특정 로직을 모듈화 (하나의 로직이 하나의 책임만)
    • 비즈니스 로직과 기숙적 로직분리 (가독성 증가)

     


    2. 사용 방법

    2.1. 기본 사용 방법

    FastAPI에서는 Depends() 를 사용해 의존성 주입을 실행함.

     

    1. 외부 로직을 함수로 정의한다.

    2. <리턴값> = Depends(<함수명>)  과 같은 형식으로 사용한다.

    3. 의존성 함수의 반환값은 엔드포인트 함수의 매개변수로 전달된다.

    from fastapi import Depends
    
    def get_db():
    	db = connect_to_db()
        try:
        	yield db
        finally:
        	db.close()
            
    @app.get('/users/')
    def get_users(db=Depends(get_db)):
    	users = db.execute("select * from users")
        return users

     


    2.2. 의존성 함수에 매개변수가 있는 경우

    만약 외부 로직에서 매개변수를 받는다면, 

    엔드포인트에서 쿼리(Query) 또는 경로(Path), 요청본문(Body)으로 받을 수 있다.

    # 의존성 함수
    def dependency_func(user_name: str = Query(...)):
    	return user_name
        
    @app.get('/user/')
    def get_user(a: str = Depends(dependency_func)):
    	return {'result': a}

     

     

    반응형