<aside>

</aside>

μ•ˆλ…•ν•˜μ„Έμš”! FastAPI 8κ°• μ‹œκ°„μž…λ‹ˆλ‹€! β˜€οΈ

7κ°•μ—μ„œλŠ” μ˜μ‘΄μ„± μ£Όμž…(Depends)을 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 ꡬ쑰λ₯Ό κ°œμ„ ν•˜λŠ” 방법을 λ°°μ› μŠ΅λ‹ˆλ‹€. νŠΉμ • μ—”λ“œν¬μΈνŠΈκ°€ ν•„μš”λ‘œ ν•˜λŠ” κΈ°λŠ₯을 κΉ”λ”ν•˜κ²Œ μ£Όμž…λ°›μ„ 수 μžˆμ—ˆμ£ !

이번 μ‹œκ°„μ—λŠ” λͺ¨λ“  μš”μ²­ λ˜λŠ” λŒ€λΆ€λΆ„μ˜ μš”μ²­μ— λŒ€ν•΄ κ³΅ν†΅μ μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” λ‘œμ§μ„ μ μš©ν•˜λŠ” 또 λ‹€λ₯Έ 방법인 **미듀웨어(Middleware)**에 λŒ€ν•΄ μ•Œμ•„λ΄…λ‹ˆλ‹€. 마치 API μ„œλ²„μ˜ λ¬Έμ§€κΈ°μ²˜λŸΌ, μš”μ²­μ΄ λ“€μ–΄μ˜€κ±°λ‚˜ 응닡이 λ‚˜κ°€κΈ° 전후에 νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ²Œ ν•  수 μžˆμ–΄μš”. πŸ’‚β€β™€οΈ

λ”λΆˆμ–΄, μ›Ή 개발 μ‹œ (특히 ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œλ₯Ό 뢄리할 λ•Œ) λ°˜λ“œμ‹œ 마주치게 λ˜λŠ” CORS(Cross-Origin Resource Sharing) μ΄μŠˆμ™€ 이λ₯Ό FastAPIμ—μ„œ μš°μ•„ν•˜κ²Œ ν•΄κ²°ν•˜λŠ” λ°©λ²•κΉŒμ§€ ν•¨κ»˜ λ‹€λ£° μ˜ˆμ •μž…λ‹ˆλ‹€. ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžμ™€ μ›ν™œν•˜κ²Œ ν˜‘μ—…ν•˜κΈ° μœ„ν•œ ν•„μˆ˜ 관문이죠! 🀝

자, 그럼 API μ„œλ²„μ˜ λ¬Έμ§€κΈ°, 미듀웨어와 μ›Ή λΈŒλΌμš°μ €μ˜ λ³΄μ•ˆ μž₯λ²½ CORS에 λŒ€ν•΄ μ•Œμ•„λ³ΌκΉŒμš”?


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

이번 8κ°•μ—μ„œλŠ” FastAPI μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μš”μ²­κ³Ό 응닡 처리 과정에 **쀑간 단계(Middleware)**λ₯Ό μΆ”κ°€ν•˜μ—¬ 곡톡 λ‘œμ§μ„ μ μš©ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. λ―Έλ“€μ›¨μ–΄λŠ” λͺ¨λ“  μš”μ²­μ΄ 경둜 μž‘λ™ ν•¨μˆ˜μ— λ„λ‹¬ν•˜κΈ° μ „, 그리고 λͺ¨λ“  응닡이 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘λ˜κΈ° 전에 싀행될 수 μžˆλŠ” μ½”λ“œ μ‘°κ°μž…λ‹ˆλ‹€. 이λ₯Ό ν™œμš©ν•˜μ—¬ μš”μ²­ λ‘œκΉ…, μ»€μŠ€ν…€ 헀더 μΆ”κ°€, 기본적인 인증 확인 λ“± λ‹€μ–‘ν•œ **νš‘λ‹¨ 관심사(Cross-cutting Concerns)**λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

FastAPIλŠ” Starlette의 미듀웨어 μ‹œμŠ€ν…œμ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λ©°, @app.middleware("http") λ°μ½”λ ˆμ΄ν„°λ‚˜ ASGI 미듀웨어 클래슀λ₯Ό 톡해 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, μ›Ή λΈŒλΌμš°μ €μ˜ **동일 좜처 μ •μ±…(Same-Origin Policy, SOP)**으둜 인해 λ°œμƒν•˜λŠ” CORS(Cross-Origin Resource Sharing) 문제λ₯Ό μ΄ν•΄ν•˜κ³ , FastAPI의 CORSMiddlewareλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법을 μ‹€μŠ΅ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€λ₯Έ 도메인(좜처)μ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(예: React, Vue μ•±)이 FastAPI λ°±μ—”λ“œ API와 μ•ˆμ „ν•˜κ²Œ 톡신할 수 μžˆλ„λ‘ μ„€μ •ν•˜λŠ” 방법을 배우게 λ©λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

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

  1. **미듀웨어(Middleware)**의 κ°œλ…κ³Ό μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μš”μ²­/응닡 μ‚¬μ΄ν΄μ—μ„œ λ―Έλ“€μ›¨μ–΄μ˜ 역할을 μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. FastAPIμ—μ„œ @app.middleware("http") λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ μ»€μŠ€ν…€ 미듀웨어λ₯Ό κ΅¬ν˜„ν•˜κ³ , μš”μ²­ 전후에 λ‘œμ§μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μ›Ή λΈŒλΌμš°μ €μ˜ **동일 좜처 μ •μ±…(Same-Origin Policy)**κ³Ό **CORS(Cross-Origin Resource Sharing)**의 ν•„μš”μ„±μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.
  4. FastAPI의 CORSMiddlewareλ₯Ό μ‚¬μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— CORS 지원을 μ„€μ •ν•˜κ³ , μ£Όμš” μ˜΅μ…˜(allow_origins, allow_methods λ“±)을 ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.
  5. 미듀웨어와 CORS 섀정을 톡해 API의 곡톡 κΈ°λŠ₯을 κ΄€λ¦¬ν•˜κ³  ν”„λ‘ νŠΈμ—”λ“œμ™€μ˜ 연동 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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