์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

FastAPI ์—์„œ ์˜์กด์„ฑ ์ฃผ์ž… ์ด๋ž€? (Dependency Injection)

์ฃผ์˜ ๐Ÿฑ 2024. 4. 19. 14:17
728x90
๋ฐ˜์‘ํ˜•

FastAPI์˜ "Dependency Injection"์€ FastAPI ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Dependency Injection์€ ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. FastAPI์—์„œ๋Š” ์ด๋ฅผ ํ†ตํ•ด ๋”์šฑ ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ API๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(์žฌ์‚ฌ์šฉ์„ฑ, ํšจ์œจ์„ฑ ์ฆ๊ฐ€์˜ ํšจ๊ณผ)

Dependency Injection์˜ ๊ธฐ๋ณธ ์›๋ฆฌ

FastAPI์—์„œ Dependency Injection์„ ์‚ฌ์šฉํ•˜๋ฉด, ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , FastAPI๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„(runtime)์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋กœ์จ, ํ•„์š”ํ•œ ๊ฐ์ฒด๋‚˜ ์„ค์ •, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ์…˜์˜ ์ƒ์„ฑ๊ณผ ๋ฐ˜ํ™˜(close)์„ ์ž๋™ํ™”

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. ์˜์กด์„ฑ ์ƒ์„ฑ: ์˜์กด์„ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ํ•„์š”ํ•œ ๊ฐ์ฒด๋‚˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    1. contextlib๋ณด๋‹ค๋Š” Depends๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ„๊ฒฐํ•˜๋‹ค. 

from fastapi import Depends, FastAPI

def get_db():
    db = "DB Connection"
    try:
        yield db
    finally:
        db.close()

 

  1. ๊ฒฝ๋กœ ์ž‘์—…์— ์˜์กด์„ฑ ์ฃผ์ž…: Depends๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ ์ž‘์—… ํ•จ์ˆ˜์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. FastAPI๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ด ์˜์กด์„ฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ ๊ฒฝ๋กœ ์ž‘์—… ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

@app.get("/items/")
async def read_items(db = Depends(get_db)):
    return {"db": db}

  • ํ•˜์œ„ ์˜์กด์„ฑ: ์˜์กด์„ฑ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋‹ค๋ฅธ ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ณ„์ธต์˜ ์˜์กด์„ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ์˜ ์žฌ์‚ฌ์šฉ๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ: FastAPI๋Š” ์˜์กด์„ฑ์ด ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ์—์„œ ์žฌ์‚ฌ์šฉ๋  ๋•Œ ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด, ํŠน์ • ๊ฒฝ๋กœ์—์„œ๋งŒ ์˜์กด์„ฑ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™์œผ๋กœ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์˜์กด์„ฑ: ์˜์กด์„ฑ ํ•จ์ˆ˜์—์„œ ์ง์ ‘ ์š”์ฒญ ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ฑฐ๋‚˜, Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ฆํ•˜๊ณ  ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋ฅธ ํ™œ์šฉ ๋ฐฉ๋ฒ•

https://fastapi.tiangolo.com/tutorial/dependencies/

 

๋ฐ˜์‘ํ˜•