티스토리 뷰

  • 의존성 주입이란?
    • 외부에서 객체를 주입하여 사용하는 방식
  • 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
    
    <작동 순서>
    1. 클라이언트가 /users/ 경로로 get요청을 보냄
    2. read_users 함수(엔드포인트 함수) 실행
    3. Depends를 통해 get_db함수 호출
    4. get_db 함후 실행, db 객체를 반환하고 대기
    5. users 생성 후 반환 (return)
    6. 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 특정 객체 삭제
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함