<aside>

</aside>

μ•ˆλ…•ν•˜μ„Έμš”! λ“œλ””μ–΄ FastAPI κ°•μ˜ 3λΆ€: 파일 μ—…λ‘œλ“œ 및 λ‹€μš΄λ‘œλ“œμ˜ μ‹œμž‘, 14κ°•μž…λ‹ˆλ‹€! πŸ₯³

1뢀와 2λΆ€μ—μ„œλŠ” API의 기본적인 ꡬ쑰, μš”μ²­ 처리, 응닡 생성, 데이터 검증, μ˜μ‘΄μ„± μ£Όμž…, 미듀웨어, CORS, μ˜ˆμ™Έ 처리, μƒνƒœ μ½”λ“œ μ œμ–΄ λ“± μ›Ή API의 핡심적인 κΈ°λŠ₯듀을 νƒ„νƒ„ν•˜κ²Œ λ‹€μ‘ŒμŠ΅λ‹ˆλ‹€. 정말 λ§Žμ€ 것을 λ°°μš°μ…¨μ–΄μš”! πŸ‘

이제 3λΆ€μ—μ„œλŠ” μ›Ή μ„œλΉ„μŠ€μ—μ„œ 빼놓을 수 μ—†λŠ” 파일 μ²˜λ¦¬μ— λŒ€ν•΄ μ§‘μ€‘μ μœΌλ‘œ μ•Œμ•„λ΄…λ‹ˆλ‹€. μ‚¬μš©μžκ°€ ν”„λ‘œν•„ 사진을 μ˜¬λ¦¬κ±°λ‚˜, λ¬Έμ„œ νŒŒμΌμ„ μ²¨λΆ€ν•˜κ±°λ‚˜, μ„œλ²„μ—μ„œ μƒμ„±λœ λ³΄κ³ μ„œ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λŠ” λ“±μ˜ κΈ°λŠ₯을 μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  수 μžˆμ„κΉŒμš”?

이번 14κ°•μ—μ„œλŠ” κ·Έ 첫걸음으둜, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λŠ” 것을 FastAPIμ—μ„œ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠ”μ§€ λ°°μ›λ‹ˆλ‹€. 이미지, λ¬Έμ„œ, λ™μ˜μƒ λ“± λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ νŒŒμΌμ„ μ•ˆμ „ν•˜κ³  효율적으둜 λ°›λŠ” 방법을 μ•Œμ•„λ³Ό κ±°μ˜ˆμš”! πŸ–ΌοΈπŸ“„β¬†οΈ

파일과 ν•¨κ»˜ν•˜λŠ” API의 μ„Έκ³„λ‘œ λ– λ‚˜λ³Ό μ€€λΉ„, λ˜μ…¨λ‚˜μš”?


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

이번 14κ°•μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈ(주둜 μ›Ή λΈŒλΌμš°μ €μ˜ <form> νƒœκ·Έλ‚˜ JavaScript Workspace API)λ‘œλΆ€ν„° μ„œλ²„λ‘œ νŒŒμΌμ„ μ „μ†‘λ°›λŠ” 파일 μ—…λ‘œλ“œ κΈ°λŠ₯을 FastAPIμ—μ„œ κ΅¬ν˜„ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€.

HTTPλ₯Ό 톡해 νŒŒμΌμ„ μ—…λ‘œλ“œν•  λ•ŒλŠ” 주둜 multipart/form-data 인코딩 νƒ€μž…μ΄ μ‚¬μš©λ˜λŠ”λ°, FastAPIλŠ” 이 ν˜•μ‹μ„ μ‰½κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€. λ‹€λ§Œ, 이λ₯Ό μœ„ν•΄μ„œλŠ” python-multipart 라이브러리λ₯Ό λ¨Όμ € μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

FastAPIμ—μ„œλŠ” 경둜 μž‘λ™ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„° νƒ€μž… 힌트둜 bytes λ˜λŠ” UploadFile을 μ‚¬μš©ν•˜μ—¬ μ—…λ‘œλ“œλœ νŒŒμΌμ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€. bytesλŠ” 파일 전체 λ‚΄μš©μ„ λ©”λͺ¨λ¦¬μ— λ‘œλ“œν•˜λ―€λ‘œ μž‘μ€ νŒŒμΌμ—λ§Œ μ ν•©ν•˜λ©°, λŒ€λΆ€λΆ„μ˜ κ²½μš°μ—λŠ” UploadFile νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€. UploadFile은 λ©”λͺ¨λ¦¬μ™€ λ””μŠ€ν¬λ₯Ό 효율적으둜 μ‚¬μš©ν•˜λŠ” μŠ€ν’€λ§(spooling) 방식을 μ‚¬μš©ν•˜κ³  비동기(async) μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ—¬ λŒ€μš©λŸ‰ νŒŒμΌλ„ 효과적으둜 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 κ°•μ˜μ—μ„œλŠ” File 및 UploadFile을 μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ λ°›κ³ , 파일 이름(filename)μ΄λ‚˜ μ½˜ν…μΈ  νƒ€μž…(content_type) 같은 메타데이터에 μ ‘κ·Όν•˜λ©°, 파일 λ‚΄μš©μ„ μ½κ±°λ‚˜ μ„œλ²„μ— μ €μž₯ν•˜λŠ” 방법(특히 비동기 방식)을 μ‹€μŠ΅ν•©λ‹ˆλ‹€. λ˜ν•œ 파일 μ—…λ‘œλ“œ μ‹œ κ³ λ €ν•΄μ•Ό ν•  기본적인 λ³΄μ•ˆ 사항에 λŒ€ν•΄μ„œλ„ κ°„λž΅νžˆ μ–ΈκΈ‰ν•©λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

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

  1. HTTP 파일 μ—…λ‘œλ“œ μ‹œ multipart/form-data 인코딩 방식이 μ‚¬μš©λ¨μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.
  2. FastAPI 파일 μ—…λ‘œλ“œ 처리λ₯Ό μœ„ν•΄ python-multipart 라이브러리λ₯Ό μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. bytes νƒ€μž… 힌트λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ€ νŒŒμΌμ„ λ©”λͺ¨λ¦¬λ‘œ 직접 받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  4. UploadFile νƒ€μž… 힌트λ₯Ό μ‚¬μš©ν•˜μ—¬ 크기에 상관없이 효율적으둜 νŒŒμΌμ„ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  5. UploadFile 객체의 μ£Όμš” 속성(filename, content_type)κ³Ό 비동기 λ©”μ„œλ“œ(read, close)λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.