[μ± λ¦¬λ·°] FastAPIλ‘ λ°°μ°λ λ°±μλ νλ‘κ·Έλλ° with ν΄λ¦° μν€ν μ²
FastAPIλ‘ λ°°μ°λ λ°±μλ νλ‘κ·Έλλ° with ν΄λ¦° μν€ν μ²λ κ°λ³κ³ λΉ λ₯΄κ² μμν μ μλ Python κΈ°λ° νλ μμν¬μΈ FastAPIλ‘ λ°±μλ κ°λ°μ μ½κ² μμν μ μκ² λλ μ± μ λλ€. Java Spring Bootμ λ°©λν ꡬ쑰μ λΉν΄ FastAPIλ κ°κ²°νκ³ , λΉλκΈ° μ²λ¦¬λ₯Ό κΈ°λ³ΈμΌλ‘ μ 곡νμ¬ κ°λ° μλμ μ μ§λ³΄μ ν¨μ¨μ± λ©΄μμ κ°λ ₯ν μ₯μ μ κ°μ§λλ€. νΉν ν΄λ¦° μν€ν μ²λ₯Ό κΈ°λ°μΌλ‘ κ³μΈ΅λ³λ‘ λ°±μλ ꡬ쑰λ₯Ό μ€κ³νλ κ°λ μ λ€λ£¨μ΄ λ°±μλ κ°λ°μ μ 체μ μΈ νλ¦μ 체κ³μ μΌλ‘ νμ΅ν μ μμ΅λλ€. μ€μ΅ μ€μ¬μ μμ μ μ€λ¬΄μ μ μ©ν μ μλ λ΄μ©μ΄ μ λ¬Έμμκ² ν° λμμ΄ λλ μ± μ λλ€.
λ³Έ μνμ μ μ΄νμμ μ± μ μ 곡λ°μ μμ±λμμ΅λλ€.
π‘κ°μ
Pythonμ μΉ κ°λ°λΏλ§ μλλΌ AI, λ°μ΄ν° λΆμ λ± λ€λ°©λ©΄μμ μ¬μ©λκ³ μμΌλ©°, FastAPIλ μ΅κ·Ό ν«π₯ν νλ μμν¬μ λλ€. μ΄ μ± μ ν΄λ¦° μν€ν μ²μ μμΉμ FastAPIμ μ μ©νμ¬ TIL μλΉμ€ μ€μ΅μ ν΅ν΄ λ°±μλμ μ λ°μ μΈ κ΅¬νμ 체νν μ μλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
μ± μ μ£Όμ λͺ©μ°¨λ λ€μκ³Ό κ°μ΅λλ€.
λͺ©μ°¨
1. FastAPI κ°λ° νκ²½ ꡬμΆ
2. ν΄λ¦° μν€ν μ²
3. νμ κ°μ
4. μμ‘΄μ± μ£Όμ
5. νμ 리μμ€μ CRUD κΈ°λ₯ μμ±
6. λΉλκΈ° νλ‘κ·Έλλ°
7. λ‘κ·ΈμΈ
8. νκ²½λ³μ
9. TIL Note
10. λ°±κ·ΈλΌμ΄λ μμ : νμ μ΄λ©μΌ λ°μ‘
11. λ―Έλ€μ¨μ΄
12. ν μ€ν
μ± μμλ FastAPI μΈμλ Dockerπ, Poetry, ν΄λ¦° μν€ν μ² λ±μ κ°λ μ μ€λͺ νλ©°, μ λ¬Έμλ μ€μ©μ μΈ API ꡬμΆμ κ²½νν μ μλλ‘ λμ΅λλ€.
ποΈλμ 첫 λ°±μλ μ€ν
κ΅λ΄μμ κ°μ₯ λ리 μ¬μ©λλ λ°±μλ μ€νμ Spring Bootλ‘, μ±λ₯κ³Ό νμ₯μ± μΈ‘λ©΄μμ κ°λ ₯ν μ§μμ μ 곡νμ§λ§, Java λ¬Έλ²κ³Ό Spring νλ μμν¬μ λ°©λν κΈ°λ₯μ κΉμ΄ μ΄ν΄ν΄μΌ νλ―λ‘ λ¬λ 컀λΈκ° λ§€μ° κ°νλ¦
λλ€. λ°±μλ κ°λ°μ μ²μ μ
λ¬Ένκ±°λ νλ‘μ νΈλ₯Ό λΉ λ₯΄κ² μμνκΈ°μλ μ ν©νμ§ μμ κ² κ°μ΅λλ€. μ€νλ§ λΆνΈλ λ§μ΄ 무μμμπ
Python κΈ°λ°μ μΈκΈ° μλ νλ μμν¬λ‘λ Djangoμ Flaskκ° μμ΅λλ€. Djangoλ λκ·λͺ¨ νλ‘μ νΈμ μ ν©ν κ°λ ₯ν κΈ°λ₯μ μ 곡νμ§λ§, κ΅¬μ± μμκ° λ³΅μ‘νμ¬ λ§μ νμ΅μ νμλ‘ ν©λλ€. Flaskλ μ΅μνμ κΈ°λ₯μΌλ‘ μμμ΄ κ°λ¨νκ³ μ μ°νμ§λ§, νμ₯ μμλ μΆκ°μ μΈ λ³΅μ‘ν ꡬνμ΄ μꡬλ©λλ€.
μ΄μ λ¬λ¦¬, FastAPIλ κ°κ²°ν λ¬Έλ²κ³Ό μλνλ νμ
ννΈ λλΆμ μ΄μ¬μλ μ κ·ΌνκΈ° μ¬μ΄ νλ μμν¬λ‘ μ£Όλͺ©λ°κ³ μμ΅λλ€. κΈ°λ³Έμ μΈ λΉλκΈ° κΈ°λ₯κ³Ό λ°μ΄ν° κ²μ¦ λ± μ μ©ν κΈ°λ₯μ μ 곡νμ¬ λΉκ΅μ λΉ λ₯΄κ³ μμ μ μΈ API μλ²λ₯Ό ꡬμΆν μ μμ΅λλ€. λ°λΌμ FastAPIλ λ°±μλ μ΄λ³΄μλ λΉ λ₯Έ νλ‘ν νμ΄νμ΄ νμν κ°λ°μμκ² μ ν©ν μ νμ΄λΌκ³ μκ°ν©λλ€.
μ¬μ€ μ λ μ λ²λ¦μ²λΌ λ°±μλκ° μ«λ€κ³ λ§νκ³€ νλλ°μ..λ°±μλλ λ무 μ΄λ ΅κ² λκ»΄μ‘μΌλκΉμ. μ§κ΄μ μΌλ‘ νμΈ κ°λ₯ν νλ‘ νΈμλμ λ¬λ¦¬ μλ²? λ°μ΄ν°λ² μ΄μ€? API? λμ 보μ΄μ§ μλ 무μΈκ°λ€κ³Όμ μΈμμ νλ λ°±μλλ μ μκ²λ μ λ§ μκ³ μΆμ§ μμ μμμ΄μμ΅λλ€.(μ€νλ§λΆνΈ AWS 무μμ) νμ§λ§ νλ‘ νΈμλλ₯Ό 곡λΆνλ©° νλ‘μ νΈλ₯Ό μ§ννλ μ€, λ°±μλμ λν νμμ±μ μ μ€ν λλΌκ² λμμ΅λλ€.
Next.jsμμ μ 곡νλ κΈ°λ₯μ΄λ Firebase, Supabase λ± λ°±μλ API λ체μ λ μΆ©λΆν λ§μ΅λλ€. κ·ΈλΌμλ λ΄ λ¨Έλ¦Ώμμ μμ΄λμ΄λ₯Ό μ¨μ ν μ½λλ‘ νννκΈ° μν΄μλ μ§μ APIλ₯Ό ꡬμΆν μ μλ λ₯λ ₯μ΄ νμνλ€κ³ μκ°νμ΅λλ€. λ°±μλμ κ°λ μ μ΄ν΄νκ³ , νλ‘ νΈμλμμ μ°κ³λ₯Ό ν΅ν΄ λ μμ±λ μλ νλ‘μ νΈλ₯Ό λ§λ€κΈ° μν΄, μνν νμ μ μν΄μλΌλ κΌ νμν κ³Όμ μ΄λΌκ³ λκΌμ΅λλ€. μ΄μ Node.js, Flask λ± μ¬λ¬ κΈ°μ λ€μ μμ보며 λΉκ΅ν κ²°κ³Ό, 첫 μμμΌλ‘λ FastAPIκ° μ μΌ μ½κ² λ€λ μκ°μ΄ λ€μμ΅λλ€.
πλ΄μ©
μ΄ μ± μ ν΄λ¦° μν€ν μ²μ κ°λ κ³Ό λ¨κ³μ μ€μ΅μ ν΅ν΄ FastAPIμ κΈ°λ₯λ€μ μμΈν λ€λ£¨κ³ μμ΅λλ€. μ± λͺ©μ°¨λ§ λ΄λ, μ λ§ λ§μ λ΄μ©λ€μ λ€λ£¬λ€λ κ²μ μ μ μμμ΅λλ€.
μ΄ μ± μ κ°μ₯ ν° μ₯μ μ FastAPIλ‘ κ°λ¨νκ² λ°±μλμ ν΅μ¬ κ°λ κ³Ό ν΄λ¦° μν€ν μ²μ μ₯μ μ μ€μ νλ‘μ νΈμ μ μ©ν μ μκ² νλ€λ μ μ λλ€. TIL μλΉμ€λ₯Ό λ¨κ³μ μΌλ‘ κ°λ°νλ©°, ν΄λ¦° μν€ν μ²μ μμΉμ λ°λΌ λ°±μλ ꡬ쑰λ₯Ό μ΄ν΄νκΈ° μ½κ² μ€λͺ νλ©΄μλ μ€λ¬΄ μ μ©μ΄ κ°λ₯ν μ 보λ₯Ό μ 곡νλ κ²μ΄ μ΄ μ± μ νΉμ§μ λλ€.
μ 체 νμ΄μ§ μκ° 209νμ΄μ§λ‘ λΉκ΅μ μμ νΈμ΄μ§λ§, μμ°¬ ꡬμ±μΌλ‘ λ°±μλ μ λ¬Έμμκ² μ ν©ν λμ΄λμ ꡬμ±μ κ°μΆκ³ μμ΅λλ€.
μ λ λ°±μλμ λν΄μλ μλκ² κ±°μ μμ΄μ, μ΄λ°λΆλ μ‘°κΈ μ΄λ ΅κ² λκ»΄μ‘μ΅λλ€. ν΄λ¦° μν€ν μ²μ λν μ΄ν΄λ νμνκ³ , λ°μ΄ν°λ² μ΄μ€, ν¬μ΄νΈλ¦¬, μ λΉμ½, λ컀 λ± μ€μ΅μ μν΄ μ€μ ν΄μΌ νλκ²λ λ§μμΌλκΉμ. κ·Έλ¬λ μ± μ΄ κ°λ λΆν° μ€μ΅κΉμ§ λ¨κ³μ μΌλ‘ μ μ€λͺ λμ΄ μμ΄ λ°λΌκ°λ€ 보λ μ μ°¨ μ΅μν΄μ‘κ³ , λͺ©μ°¨ ꡬμ±λ ννν΄ νμν λλ§λ€ μ°Έκ³ νκΈ° μ’μ μ± μ΄λΌκ³ μκ°ν©λλ€.
κ°μΈμ μΌλ‘λ μμ‘΄μ± μ£Όμ λΆλΆμ΄ μ μΌ μ¬λ―Έμκ² λκ»΄μ‘μ΅λλ€. μμ‘΄μ± μ£Όμ μ΄ λμ§, μ νμνμ§ νμ€νκ² μ΄ν΄ν μ μμκ³ , FastAPIμμ μ체μ μΌλ‘ μ 곡νλ μμ‘΄μ± μ£Όμ ν¨μμ, μ€μ λ§μ΄ μ°μ΄λ μμ‘΄μ± μ£Όμ νλ μμν¬ λ κ°μ§ λ°©μμ ν΅ν΄ μμ‘΄μ± μ£Όμ μ μ€μ΅ν΄ λ³Ό μ μμμ΅λλ€. μ λ³λμ νλ μμν¬λ₯Ό μ°λμ§ κ°λ¨νμ§λ§ ν΄λ¦° μν€ν μ² κ΄μ μμ μ€λͺ ν΄μ£Όμ μ κΈ°μ μ νμ κ·Όκ±°μ νμμ±μ κΉμ΄ κ³ λ―Όν μ μμμ΅λλ€. μ΄λ λ― μ± μ€κ°μ€κ° λμ€λ μ€λͺ μ ν΅ν΄, λ¨μν κΈ°μ μ¬μ©μ λμ΄ κ°λ° μ² νκ³Ό μ€κ³ μμΉμ κ³ λ €νλ©° λ λμ μν€ν μ²λ₯Ό μ§ν₯νλ λ°©λ²μ λ°°μΈ μ μμμ΅λλ€.
β€οΈμΆμ² λμ
μ΄ μ± μ λ°±μλ κ°λ° νλ‘μΈμ€λ₯Ό μ²μ μ ν΄λ³΄λ €λ κ°λ°μλ, νμ€ν κ°λ°μ λͺ©νλ‘ νλ νλ‘ νΈμλ κ°λ°μμκ² μ μ©ν μ°Έκ³ μκ° λ κ² κ°μ΅λλ€.
FastAPIμ κ°μ₯ ν° λ§€λ ₯ μ€ νλλ "κ°λ¨νλ€" μμ΅λλ€. 볡μ‘ν κ²μ΄ μ«μ μ λ, API ꡬμΆμ΄ κ°λ¨νλ©΄μλ λ¬Έμνλ₯Ό μλμΌλ‘ μμ±ν΄ κ°λ° νΈμμ±μ κ·Ήλννλ€λ μ μ΄ λ무 λ§€λ ₯μ μΌλ‘ λκ»΄μ‘μ΅λλ€. μ΄λ° μ₯μ λλΆμ, λ°±μλ κ²½νμ΄ μλ νλ‘ νΈμλ κ°λ°μλ λΆλ΄ μμ΄ API κ°λ°μ λμ ν μ μκ² λ€κ³ λκΌμ΅λλ€. μ λ μΈκ³΅μ§λ₯ μΉ μλΉμ€μ κ΄μ¬μ΄ μμ΄ AI λͺ¨λΈκ³Όμ ν΅ν©μ΄ μ½κ² μ΄λ£¨μ΄μ§λ μ λν FastAPIμ ν° μ₯μ μΌλ‘ λκ»΄μ‘κ³ μμΌλ‘λ κΎΈμ€ν 곡λΆν΄ λ³Ό μμ μ λλ€!
λΉ λ₯΄κ² λ°±μλ κΈ°μ΄λ₯Ό μ΅νκ³ νμ€ν νλ‘μ νΈμ λμ ν΄λ³΄κ³ μΆμ νλ‘ νΈμλ κ°λ°μλΌλ©΄, μ΄ μ± μ΄ FastAPIμ ν¨κ» νλ₯ν μ λ¬Έμκ° λμ΄ μ€ κ² κ°μ΅λλ€.