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

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}

 

 

반응형