<aside>

</aside>

와! 14κ°• 파일 μ—…λ‘œλ“œμ— 이어, λ“œλ””μ–΄ 15κ°•: 파일 λ‹€μš΄λ‘œλ“œ μ‘λ‹΅μž…λ‹ˆλ‹€! πŸ₯³

μ§€λ‚œ μ‹œκ°„μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ νŒŒμΌμ„ λ³΄λ‚΄λŠ” 'μ—…λ‘œλ“œ' 방법을 λ°°μ› μ£ ? μ‚¬μš©μžκ°€ 이미지λ₯Ό μ˜¬λ¦¬κ±°λ‚˜ λ¬Έμ„œλ₯Ό μ²¨λΆ€ν•˜λŠ” λ“±μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 방법을 μ΅ν˜”μŠ΅λ‹ˆλ‹€. ⬆️

이번 μ‹œκ°„μ—λŠ” κ·Έ λ°˜λŒ€ λ°©ν–₯, 즉 μ„œλ²„μ— μ €μž₯된 νŒŒμΌμ„ ν΄λΌμ΄μ–ΈνŠΈκ°€ κ°€μ Έκ°ˆ 수 μžˆλ„λ‘ 'λ‹€μš΄λ‘œλ“œ' 응닡을 λ³΄λ‚΄λŠ” 방법을 배울 μ°¨λ‘€μž…λ‹ˆλ‹€! πŸ’Ύβ¬‡οΈ μ„œλ²„μ—μ„œ μƒμ„±λœ λ³΄κ³ μ„œ 파일(예: PDF)μ΄λ‚˜ μ‚¬μš©μžκ°€ 이전에 μ—…λ‘œλ“œν–ˆλ˜ νŒŒμΌμ„ λ‹€μ‹œ μ œκ³΅ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ 많겠죠?

FastAPIμ—μ„œλŠ” 이 과정을 μ•„μ£Ό μ„Έλ ¨λ˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. λ°”λ‘œ FileResponse μΈλ°μš”, 이 친ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ μ„œλ²„μ˜ νŒŒμΌμ„ 효율적으둜 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 슀트리밍 λ°©μ‹μœΌλ‘œ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

이번 κ°•μ˜λ₯Ό 톡해 파일 λ‹€μš΄λ‘œλ“œ κΈ°λŠ₯을 μ—¬λŸ¬λΆ„μ˜ API에 μΆ”κ°€ν•˜λŠ” 방법을 ν™•μ‹€νžˆ μ•Œμ•„λ΄…μ‹œλ‹€! μ€€λΉ„λ˜μ…¨λ‚˜μš”? πŸ˜‰


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

이번 15κ°•μ—μ„œλŠ” FastAPIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ— μžˆλŠ” 둜컬 νŒŒμΌμ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅μœΌλ‘œ λ³΄λ‚΄λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. 이 κΈ°λŠ₯을 톡해 μ‚¬μš©μžλŠ” μ›Ή λΈŒλΌμš°μ € λ“±μ—μ„œ νŒŒμΌμ„ 직접 λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

핡심은 FastAPI의 FileResponse 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. FileResponseλŠ” μ§€μ •λœ 경둜의 νŒŒμΌμ„ λΉ„λ™κΈ°μ μœΌλ‘œ 읽어 슀트리밍 λ°©μ‹μœΌλ‘œ μ‘λ‹΅ν•˜λ―€λ‘œ, 파일 전체λ₯Ό λ©”λͺ¨λ¦¬μ— λ‘œλ“œν•˜μ§€ μ•Šμ•„ 맀우 νš¨μœ¨μ μž…λ‹ˆλ‹€. 특히 λŒ€μš©λŸ‰ νŒŒμΌμ„ μ²˜λ¦¬ν•  λ•Œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 크게 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

이 κ°•μ˜μ—μ„œλŠ” FileResponseλ₯Ό μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ μ‘λ‹΅ν•˜λŠ” 기본적인 방법과 ν•¨κ»˜, 응닡 헀더λ₯Ό μ„€μ •ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ νŒŒμΌμ„ μ–΄λ–»κ²Œ μ²˜λ¦¬ν• μ§€ μ œμ–΄ν•˜λŠ” 방법(media_type, filename)을 μ‹€μŠ΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Content-Disposition 헀더λ₯Ό μ„€μ •ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ νŒŒμΌμ„ 화면에 ν‘œμ‹œν•˜λŠ” λŒ€μ‹  'λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ μ €μž₯' λŒ€ν™”μƒμžλ₯Ό λ„μš°λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

더 λ‚˜μ•„κ°€, λŒ€μš©λŸ‰ νŒŒμΌμ„ λ‹€λ£¨κ±°λ‚˜ 파일 λ‚΄μš©μ„ λ™μ μœΌλ‘œ μƒμ„±ν•˜μ—¬ μŠ€νŠΈλ¦¬λ°ν•΄μ•Ό ν•  λ•Œ μœ μš©ν•œ StreamingResponse에 λŒ€ν•΄μ„œλ„ κ°„λž΅νžˆ μ†Œκ°œν•˜κ³ , 파일 경둜 처리 μ‹œ λ°œμƒν•  수 μžˆλŠ” **λ³΄μ•ˆ 문제(경둜 μ‘°μž‘)**λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ 싀무 νŒλ„ ν•¨κ»˜ μ•Œμ•„λ΄…λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

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

  1. μ„œλ²„μ˜ 둜컬 νŒŒμΌμ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅μœΌλ‘œ λ³΄λ‚΄λŠ” 파일 λ‹€μš΄λ‘œλ“œμ˜ κ°œλ…μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.
  2. FastAPI의 FileResponseλ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • 경둜의 νŒŒμΌμ„ 효율적으둜 응닡할 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. FileResponse μ‚¬μš© μ‹œ media_type νŒŒλΌλ―Έν„°λ₯Ό μ„€μ •ν•˜μ—¬ μ‘λ‹΅μ˜ MIME νƒ€μž…μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. FileResponse μ‚¬μš© μ‹œ filename νŒŒλΌλ―Έν„°λ₯Ό μ„€μ •ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ œμ•ˆν•  λ‹€μš΄λ‘œλ“œ 파일 이름(Content-Disposition 헀더)을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. FileResponseκ°€ 비동기 슀트리밍 λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜μ—¬ λ©”λͺ¨λ¦¬ νš¨μœ¨μ μž„μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.