<aside>
</aside>
μλ νμΈμ! λ°μ΄ν°λ² μ΄μ€ μ°λ 5λΆμ μΈ λ²μ§Έ μκ°, 22κ°μ λλ€! βοΈ
μ§λ 21κ°μμλ SQLAlchemy ORM λͺ¨λΈ(Task
ν΄λμ€)μ μ μνμ¬ λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈμ ꡬ쑰λ₯Ό νμ΄μ¬ μ½λλ‘ μ€κ³νμ΅λλ€. μ΄μ μ€κ³λλ μ€λΉλμμΌλ, μ€μ λ‘ μ°λ¦¬ FastAPI μ ν리μΌμ΄μ
κ³Ό λ°μ΄ν°λ² μ΄μ€κ° μλ‘ μ°κ²°λκ³ λνν μ μλ ν΅λ‘λ₯Ό λ§λ€μ΄μΌκ² μ£ ?
μ΄λ² μκ°μλ λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ€μ νκ³ , μ€μ DB μμ
μ μννλ λ° μ¬μ©λ **μΈμ
(Session)**μ κ΄λ¦¬νλ λ°©λ²μ λ°°μλλ€. SQLAlchemyμ Engineκ³Ό Session κ°λ
μ μ΄ν΄νκ³ , FastAPIμ λΉλκΈ° νκ²½μ λ§μΆ° create_async_engine
κ³Ό sessionmaker
, AsyncSession
μ μ¬μ©νμ¬ μ€μ νλ λ°©λ²μ μμλ΄
λλ€.
νΉν, κ° μΉ μμ²λ§λ€ λ
립μ μΈ λ°μ΄ν°λ² μ΄μ€ μΈμ
μ μμ νκ³ ν¨μ¨μ μΌλ‘ μμ±νκ³ μ¬μ©ν λ€ λ«μμ£Όλ λ§€μ° μ€μν ν¨ν΄μ FastAPIμ μμ‘΄μ± μ£Όμ
(Dependency Injection) μμ€ν
κ³Ό yield
ν€μλλ₯Ό νμ©νμ¬ κ΅¬ννλ λ°©λ²μ μ€μ μ μΌλ‘ λ€λ£° κ²μ
λλ€! μ΄μ μ ν리μΌμ΄μ
κ³Ό λ°μ΄ν°λ² μ΄μ€κ° μ§μ§λ‘ λ§λ μκ°μ
λλ€! ππ¬
μ΄λ² 22κ°μμλ 21κ°μμ μ μν SQLAlchemy ORM λͺ¨λΈμ μ€μ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°νκ³ μνΈμμ©νκΈ° μν ν΅μ¬ μ€μ μ μνν©λλ€. λ¨Όμ , λ°μ΄ν°λ² μ΄μ€ μ°κ²° μ 보λ₯Ό λ΄μ **λ°μ΄ν°λ² μ΄μ€ URL(μ°κ²° λ¬Έμμ΄)**μ μ μνκ³ , μ΄λ₯Ό μ¬μ©νμ¬ SQLAlchemyμ **μμ§(Engine)**μ μμ±ν©λλ€. μμ§μ λ°μ΄ν°λ² μ΄μ€μμ μ μμ€ μ°κ²° λ° ν΅μ μ κ΄λ¦¬νλ μν μ ν©λλ€. FastAPIμ λΉλκΈ° νΉμ±μ νμ©νκΈ° μν΄ create_async_engine
μ μ¬μ©νμ¬ λΉλκΈ° μμ§μ μ€μ ν©λλ€.
λ€μμΌλ‘, ORM μμ
μ μννκΈ° μν **μΈμ
(Session)**μ μμ±νλ ν©ν 리 μν μ νλ **sessionmaker
**λ₯Ό μ€μ ν©λλ€. μ΄λ λΉλκΈ° μμ
μ μν AsyncSession
μ μ¬μ©νλλ‘ κ΅¬μ±ν©λλ€. μΈμ
μ λ°μ΄ν°λ² μ΄μ€μμ κ°λ³μ μΈ λν λλ μμ
λ¨μ(Unit of Work)λ₯Ό κ΄λ¦¬ν©λλ€.
λ§μ§λ§μΌλ‘, μΉ μ ν리μΌμ΄μ
νκ²½μμ κ° HTTP μμ²λ§λ€ λ
립μ μΈ λ°μ΄ν°λ² μ΄μ€ μΈμ
μ μ¬μ©νκ³ μμ² μ²λ¦¬κ° λλλ©΄ μμ νκ² λ«μμ£Όλ κ²μ΄ λ§€μ° μ€μν©λλ€. μ΄λ₯Ό μν΄ FastAPIμ μμ‘΄μ± μ£Όμ
(Dependency Injection) μμ€ν
κ³Ό Pythonμ yield
λ₯Ό νμ©νμ¬, κ° μμ²μ μΈμ
μ μ 곡νκ³ μλμΌλ‘ μ 리(λ«κΈ°)ν΄μ£Όλ get_db
μμ‘΄μ± ν¨μλ₯Ό ꡬννλ νμ€μ μΈ ν¨ν΄μ λ°°μλλ€.
μ΄ κ°μλ₯Ό λ§μΉλ©΄ μ¬λ¬λΆμ λ€μμ ν μ μκ² λ©λλ€:
create_async_engine
)μ μ€μ ν μ μμ΅λλ€.sessionmaker
μ AsyncSession
μ μ¬μ©νμ¬ λΉλκΈ° μΈμ
ν©ν 리(AsyncSessionLocal
)λ₯Ό μ€μ ν μ μμ΅λλ€.yield
λ₯Ό μ¬μ©νμ¬ μμ²λ³ λ°μ΄ν°λ² μ΄μ€ μΈμ
μ μ 곡νκ³ μλμΌλ‘ λ«μμ£Όλ get_db
ν¨μλ₯Ό ꡬνν μ μμ΅λλ€.