AI/MLOps
[MLOps] FastAPI 의존성 주입 Depends, 엔드포인트
brave_sol
2025. 1. 15. 21:05
- 의존성 주입이란?
- 외부에서 객체를 주입하여 사용하는 방식
- Depends
- 지정된 함수를 호출하고 반환값을 엔드포인트 함수에 전달
- 엔드포인트 함수란?
- 클라이언트(브라우저) 특정 url로 요청을 보낼때 실행되는 함수
- @app.get(”/users/)는 GET요청을 처리하는 엔드포인트를 정의, /users/는 클라이언트가 요청을 보낼 url
- yield
<작동 순서># main.py from fastapi import FastAPI, Depends from sqlalchemy.orm import Session from db import get_db # 의존성 주입 함수 app = FastAPI() @app.get("/users/") def read_users(db: Session = Depends(get_db)): # 엔드포인트 함수 # 데이터베이스에서 모든 사용자 가져오기 users = db.query(User).all() return users
- 클라이언트가 /users/ 경로로 get요청을 보냄
- read_users 함수(엔드포인트 함수) 실행
- Depends를 통해 get_db함수 호출
- get_db 함후 실행, db 객체를 반환하고 대기
- users 생성 후 반환 (return)
- get_db의 finally 부분 실행: db.close()
- Session은 type이고 변수는 db
- # db.py def get_db(): db = SessionLocal() # 데이터베이스 세션 생성 try: yield db # 세션 객체를 반환하고 대기 finally: db.close() # 작업이 끝난 후 세션을 닫음
- SessionLocal(세션 팩토리)
- DB와 상호작용하는데 필요한 세션 객체를 생성
- SQLAlchemy를 사용해 세션관리할 경우 생성
- sessionmaker로 생성
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker DATABASE_URL = "mysql+pymysql://username:password@localhost/db_name" # 데이터베이스 엔진 생성 engine = create_engine(DATABASE_URL) # 세션 팩토리 생성 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
- autocommit=False : 커밋을 명시적으로 수행해 일관성 보장
- 세션 객체
- DB와의 상태를 유지하고 관리하는 도구
- DB 연결 관리
- DB와 python 객체간의 상태 변화 추적
- 새로 추가된 객체, 수정된 객체, 삭제된 객체
- 트랜잭션 관리
- 트랜잭션의 시작과 종료를 관리
- 커밋이나 롤백을 통해 명시적으로 종료
- 객체 캐싱
- 한 번 조회한 데이터를 캐싱하여 동일한 데이터에 대한 추가쿼리 방지
- 데이터가 세션에 있을 경우 DB를 다시 조회하지 않음
- 세션팩토리를 통해 생성됨
- 세션 객체의 주요 메서드
- add 새 객체를 세션에 추가
- add_all 여러 객체를 세션에 추가
- query DB에서 데이터 조회
- commit 현재 트랜잭션을 커밋(저장)
- rollback 트랜잭션을 롤백(취소)
- flush 세션의 변경사항을 db에 반영하지만 커밋X
- close 세션 닫기
- delete 특정 객체 삭제
반응형