<aside>

</aside>

μ•ˆλ…•ν•˜μ„Έμš”! 벌써 FastAPI κ°•μ˜ 9번째 μ‹œκ°„μ΄λ„€μš”. 😊 μ‹œκ°„ μ°Έ λΉ λ₯΄μ£ ?

μ§€λ‚œ 8κ°•μ—μ„œλŠ” 미듀웨어와 CORS 섀정을 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 곡톡 κΈ°λŠ₯을 μ²˜λ¦¬ν•˜κ³  μ™ΈλΆ€(ν”„λ‘ νŠΈμ—”λ“œ)μ™€μ˜ 연결을 μ›ν™œν•˜κ²Œ λ§Œλ“œλŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 아무리 μ½”λ“œλ₯Ό 잘 μ§œλ„ μ˜ˆμƒμΉ˜ λͺ»ν•œ 상황은 λ°œμƒν•˜κΈ° λ§ˆλ ¨μž…λ‹ˆλ‹€. μ‚¬μš©μžκ°€ 잘λͺ»λœ 값을 μž…λ ₯ν•˜κ±°λ‚˜, μ°ΎμœΌλ €λŠ” 데이터가 μ—†κ±°λ‚˜, ν˜Ήμ€ μ„œλ²„ 내뢀에 λ¬Έμ œκ°€ μƒκΈ°λŠ” λ“± λ‹€μ–‘ν•œ **였λ₯˜(Exception)**κ°€ λ°œμƒν•  수 있죠. πŸ› 이런 였λ₯˜λ“€μ„ μ œλŒ€λ‘œ μ²˜λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜κ±°λ‚˜, μ‚¬μš©μžμ—κ²Œ λΆˆμΉœμ ˆν•˜κ³  μ΄ν•΄ν•˜κΈ° μ–΄λ €μš΄ λ©”μ‹œμ§€λ§Œ 전달될 수 μžˆμŠ΅λ‹ˆλ‹€.

이번 μ‹œκ°„μ—λŠ” μ΄λ ‡κ²Œ ν”Όν•  수 μ—†λŠ” μ˜ˆμ™Έ(Exception) 상황을 μ–΄λ–»κ²Œ μš°μ•„ν•˜κ²Œ μ²˜λ¦¬ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈ(API μ‚¬μš©μž)μ—κ²Œ 의미 μžˆλŠ” 였λ₯˜ 응닡을 μ „λ‹¬ν•˜λŠ”μ§€μ— λŒ€ν•΄ μ§‘μ€‘μ μœΌλ‘œ λ°°μ›λ‹ˆλ‹€. μ•ˆμ •μ μ΄κ³  μ‚¬μš©μž μΉœν™”μ μΈ APIλ₯Ό λ§Œλ“€κΈ° μœ„ν•œ ν•„μˆ˜ κ³Όμ •μ΄λ‹ˆ, 잘 따라와 μ£Όμ„Έμš”! πŸ’ͺ


πŸ“š 챕터 μ†Œκ°œ

이번 9κ°•μ—μ„œλŠ” FastAPI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•˜λŠ” λ‹€μ–‘ν•œ μ˜ˆμ™Έ(Exception) 상황을 효과적으둜 κ΄€λ¦¬ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ μ ˆν•œ HTTP 였λ₯˜ 응닡을 λ°˜ν™˜ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 예기치 μ•Šμ€ μƒν™©μ—μ„œλ„ μ•ˆμ •μ μœΌλ‘œ λ™μž‘ν•˜κ³ , λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ μ‚¬μš©μž(λ˜λŠ” 개발자)κ°€ 원인을 νŒŒμ•…ν•˜κ³  λŒ€μ²˜ν•  수 μžˆλ„λ‘ λͺ…ν™•ν•œ ν”Όλ“œλ°±μ„ μ œκ³΅ν•˜λŠ” 것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.

FastAPIλŠ” HTTPExceptionμ΄λΌλŠ” νŽΈλ¦¬ν•œ μ˜ˆμ™Έ 클래슀λ₯Ό μ œκ³΅ν•˜μ—¬, μ½”λ“œ λ‚΄μ—μ„œ νŠΉμ • HTTP μƒνƒœ μ½”λ“œμ™€ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό μ¦‰μ‹œ λ°˜ν™˜ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, @app.exception_handler() λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ’…λ₯˜μ˜ μ˜ˆμ™Έ(λ‚΄μž₯ μ˜ˆμ™Έ, μ»€μŠ€ν…€ μ˜ˆμ™Έ)κ°€ λ°œμƒν–ˆμ„ λ•Œ 싀행될 μ „μ—­ μ˜ˆμ™Έ ν•Έλ“€λŸ¬λ₯Ό λ“±λ‘ν•˜μ—¬, 였λ₯˜ μ‘λ‹΅μ˜ ν˜•μ‹μ΄λ‚˜ λ‚΄μš©μ„ μ›ν•˜λŠ” λŒ€λ‘œ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이 κ°•μ˜λ₯Ό 톡해 FastAPI의 μ˜ˆμ™Έ 처리 λ©”μ»€λ‹ˆμ¦˜μ„ μ΄ν•΄ν•˜κ³ , λ‹€μ–‘ν•œ μ‹œλ‚˜λ¦¬μ˜€μ— 맞좰 였λ₯˜λ₯Ό 효과적으둜 κ΄€λ¦¬ν•˜λŠ” 방법을 μ‹€μŠ΅ν•©λ‹ˆλ‹€. 특히, FastAPIκ°€ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” μš”μ²­ μœ νš¨μ„± 검사 였λ₯˜(RequestValidationError) ν•Έλ“€λŸ¬λ₯Ό μž¬μ •μ˜ν•˜μ—¬ μ»€μŠ€ν…€ 였λ₯˜ 응닡 ν˜•μ‹μ„ λ§Œλ“œλŠ” 방법도 μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

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

  1. API κ°œλ°œμ—μ„œ μ˜ˆμ™Έ 처리의 μ€‘μš”μ„±μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.
  2. FastAPI의 HTTPException을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • HTTP μƒνƒœ μ½”λ“œμ™€ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό κ°–λŠ” 응닡을 μ¦‰μ‹œ λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. @app.exception_handler() λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ˜ˆμ™Έ νƒ€μž…μ— λŒ€ν•œ μ»€μŠ€ν…€ μ˜ˆμ™Έ ν•Έλ“€λŸ¬λ₯Ό λ“±λ‘ν•˜κ³  κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. 직접 μ •μ˜ν•œ μ»€μŠ€ν…€ μ˜ˆμ™Έ 클래슀λ₯Ό λ§Œλ“€κ³  이에 λŒ€ν•œ ν•Έλ“€λŸ¬λ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  5. FastAPI의 κΈ°λ³Έ μ˜ˆμ™Έ ν•Έλ“€λŸ¬(예: RequestValidationError ν•Έλ“€λŸ¬)λ₯Ό **μž¬μ •μ˜(Override)**ν•˜μ—¬ 였λ₯˜ 응닡 ν˜•μ‹μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.