<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 μ˜μ‘΄μ„± ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν‘œμ€€μ μΈ νŒ¨ν„΄μ„ λ°°μ›λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

이 κ°•μ˜λ₯Ό 마치면 μ—¬λŸ¬λΆ„μ€ λ‹€μŒμ„ ν•  수 있게 λ©λ‹ˆλ‹€:

  1. SQLAlchemy Engine의 μ—­ν• (DB μ—°κ²° 관리)κ³Ό Session의 μ—­ν• (ORM μž‘μ—… λ‹¨μœ„ 관리)을 μ΄ν•΄ν•©λ‹ˆλ‹€.
  2. λ°μ΄ν„°λ² μ΄μŠ€ URL(μ—°κ²° λ¬Έμžμ—΄)을 μ‚¬μš©ν•˜μ—¬ 비동기 SQLAlchemy Engine(create_async_engine)을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. sessionmaker와 AsyncSession을 μ‚¬μš©ν•˜μ—¬ 비동기 μ„Έμ…˜ νŒ©ν† λ¦¬(AsyncSessionLocal)λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. FastAPI의 μ˜μ‘΄μ„± μ£Όμž…κ³Ό yieldλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ²­λ³„ λ°μ΄ν„°λ² μ΄μŠ€ μ„Έμ…˜μ„ μ œκ³΅ν•˜κ³  μžλ™μœΌλ‘œ λ‹«μ•„μ£ΌλŠ” get_db ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. μ›Ή μš”μ²­ 처리 쀑 일반적인 λ°μ΄ν„°λ² μ΄μŠ€ μ„Έμ…˜μ˜ 라이프사이클을 μ΄ν•΄ν•©λ‹ˆλ‹€.

πŸ—οΈ 이번 κ°•μ˜μ—μ„œ κ΅¬ν˜„ν•  ν”„λ‘œμ νŠΈ ꡬ쑰 및 전체 μ½”λ“œ