<aside>
</aside>
μλ νμΈμ! λ²μ¨ FastAPI κ°μ 9λ²μ§Έ μκ°μ΄λ€μ. π μκ° μ°Έ λΉ λ₯΄μ£ ?
μ§λ 8κ°μμλ λ―Έλ€μ¨μ΄μ CORS μ€μ μ ν΅ν΄ μ ν리μΌμ΄μ μ κ³΅ν΅ κΈ°λ₯μ μ²λ¦¬νκ³ μΈλΆ(νλ‘ νΈμλ)μμ μ°κ²°μ μννκ² λ§λλ λ°©λ²μ λ°°μ μ΅λλ€.
νμ§λ§ μ무리 μ½λλ₯Ό μ μ§λ μμμΉ λͺ»ν μν©μ λ°μνκΈ° λ§λ ¨μ λλ€. μ¬μ©μκ° μλͺ»λ κ°μ μ λ ₯νκ±°λ, μ°ΎμΌλ €λ λ°μ΄ν°κ° μκ±°λ, νΉμ μλ² λ΄λΆμ λ¬Έμ κ° μκΈ°λ λ± λ€μν **μ€λ₯(Exception)**κ° λ°μν μ μμ£ . π μ΄λ° μ€λ₯λ€μ μ λλ‘ μ²λ¦¬νμ§ μμΌλ©΄ μ ν리μΌμ΄μ μ΄ λΉμ μμ μΌλ‘ μ’ λ£λκ±°λ, μ¬μ©μμκ² λΆμΉμ νκ³ μ΄ν΄νκΈ° μ΄λ €μ΄ λ©μμ§λ§ μ λ¬λ μ μμ΅λλ€.
μ΄λ² μκ°μλ μ΄λ κ² νΌν μ μλ μμΈ(Exception) μν©μ μ΄λ»κ² μ°μνκ² μ²λ¦¬νκ³ , ν΄λΌμ΄μΈνΈ(API μ¬μ©μ)μκ² μλ―Έ μλ μ€λ₯ μλ΅μ μ λ¬νλμ§μ λν΄ μ§μ€μ μΌλ‘ λ°°μλλ€. μμ μ μ΄κ³ μ¬μ©μ μΉνμ μΈ APIλ₯Ό λ§λ€κΈ° μν νμ κ³Όμ μ΄λ, μ λ°λΌμ μ£ΌμΈμ! πͺ
μ΄λ² 9κ°μμλ FastAPI μ ν리μΌμ΄μ μμ λ°μνλ λ€μν μμΈ(Exception) μν©μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νκ³ , ν΄λΌμ΄μΈνΈμκ² μ μ ν HTTP μ€λ₯ μλ΅μ λ°ννλ λ°©λ²μ λ°°μλλ€. μ ν리μΌμ΄μ μ΄ μκΈ°μΉ μμ μν©μμλ μμ μ μΌλ‘ λμνκ³ , λ¬Έμ κ° λ°μνμ λ μ¬μ©μ(λλ κ°λ°μ)κ° μμΈμ νμ νκ³ λμ²ν μ μλλ‘ λͺ νν νΌλλ°±μ μ 곡νλ κ²μ λ§€μ° μ€μν©λλ€.
FastAPIλ HTTPException
μ΄λΌλ νΈλ¦¬ν μμΈ ν΄λμ€λ₯Ό μ 곡νμ¬, μ½λ λ΄μμ νΉμ HTTP μν μ½λμ μ€λ₯ λ©μμ§λ₯Ό μ¦μ λ°ννλλ‘ ν μ μμ΅λλ€. λν, @app.exception_handler()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ νΉμ μ’
λ₯μ μμΈ(λ΄μ₯ μμΈ, 컀μ€ν
μμΈ)κ° λ°μνμ λ μ€νλ μ μ μμΈ νΈλ€λ¬λ₯Ό λ±λ‘νμ¬, μ€λ₯ μλ΅μ νμμ΄λ λ΄μ©μ μνλ λλ‘ μ»€μ€ν°λ§μ΄μ§ν μλ μμ΅λλ€.
μ΄ κ°μλ₯Ό ν΅ν΄ FastAPIμ μμΈ μ²λ¦¬ λ©μ»€λμ¦μ μ΄ν΄νκ³ , λ€μν μλ리μ€μ λ§μΆ° μ€λ₯λ₯Ό ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ λ°©λ²μ μ€μ΅ν©λλ€. νΉν, FastAPIκ° μλμΌλ‘ μ²λ¦¬νλ μμ² μ ν¨μ± κ²μ¬ μ€λ₯(RequestValidationError) νΈλ€λ¬λ₯Ό μ¬μ μνμ¬ μ»€μ€ν μ€λ₯ μλ΅ νμμ λ§λλ λ°©λ²λ μ΄ν΄λ΄ λλ€.
μ΄ κ°μλ₯Ό λ§μΉλ©΄ μ¬λ¬λΆμ λ€μμ ν μ μκ² λ©λλ€:
HTTPException
μ μ¬μ©νμ¬ νΉμ HTTP μν μ½λμ μ€λ₯ λ©μμ§λ₯Ό κ°λ μλ΅μ μ¦μ λ°νν μ μμ΅λλ€.@app.exception_handler()
λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ νΉμ μμΈ νμ
μ λν 컀μ€ν
μμΈ νΈλ€λ¬λ₯Ό λ±λ‘νκ³ κ΅¬νν μ μμ΅λλ€.RequestValidationError
νΈλ€λ¬)λ₯Ό **μ¬μ μ(Override)**νμ¬ μ€λ₯ μλ΅ νμμ λ³κ²½ν μ μμ΅λλ€.