๐Ÿš€ FastAPI ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๐Ÿ•’ ์•ฝ 1๋ถ„ ์ฝ๋Š” ๋ฐ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค

โ€“ ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ดˆ๊ณ ์† Python ํ”„๋ ˆ์ž„์›Œํฌ ์†Œ๊ฐœ

“๋น ๋ฅด๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ๊ฐ•๋ ฅํ•˜๋‹ค!” FastAPI๋Š” ํŒŒ์ด์ฌ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ, ๊ฐ€์žฅ ๊ฐ๊ด‘๋ฐ›๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” FastAPI์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๊ณผ์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๋ฉฐ ์™œ ์ง€๊ธˆ FastAPI๋ฅผ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŒŸ FastAPI ๋ž€?

FastAPI๋Š” Python 3.6 ์ด์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋น„๋™๊ธฐ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. RESTful API ์„œ๋ฒ„๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

FastAPI์˜ ํ•ต์‹ฌ ์ฒ ํ•™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„ (Fast to code)
  • ๋†’์€ ์„ฑ๋Šฅ (High performance)
  • ์ž๋™ ๋ฌธ์„œํ™” (Automatic Docs)
  • ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ํžŒํŠธ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ (Type hints + Pydantic)

์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์‹ค์ œ๋กœ “๋น ๋ฅธ ๊ฐœ๋ฐœ, ์ ์€ ๋ฒ„๊ทธ”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ํŠนํžˆ API ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๊ทธ ์ง„๊ฐ€๋ฅผ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.


โšก๏ธ FastAPI ์˜ ์ฃผ์š” ํŠน์ง•

1. ๋น„๋™๊ธฐ ์ง€์› (Asynchronous Support)

FastAPI๋Š” Python์˜ async/await ๋ฌธ๋ฒ•์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด, ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์—์„œ๋„ ๋†’์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, I/O ์ž‘์—…(์˜ˆ: DB ์กฐํšŒ, ์™ธ๋ถ€ API ํ˜ธ์ถœ ๋“ฑ)์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

2. ์ž๋™ ๋ฌธ์„œํ™”

FastAPI๋Š” ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์„ค์ • ์—†์ด๋„ OpenAPI ๊ธฐ๋ฐ˜์˜ API ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜์ฃ :

  • Swagger UI (/docs)
  • ReDoc (/redoc)

๐Ÿ“Œ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ํ…Œ์ŠคํŠธ์™€ ํ˜‘์—…์ด ๋†€๋ž๋„๋ก ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค!

3. Pydantic ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ

FastAPI๋Š” Pydantic์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํƒ€์ž… ํžŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ๊ฒ€์ฆ ๋ฐ ํŒŒ์‹ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

Pydantic์€ JSON ๋ฐ์ดํ„ฐ๋ฅผ Python ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด์„œ ๋™์‹œ์— ํƒ€์ž…์„ ์ฒดํฌํ•ด์ค๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ๋งค์šฐ ๊ฐ•๋ ฅํ•˜์ฃ .

4. IDE ์นœํ™”์ ์ธ ๊ฐœ๋ฐœ ๊ฒฝํ—˜

FastAPI๋Š” ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, VSCode๋‚˜ PyCharm ๊ฐ™์€ IDE์—์„œ ์ž๋™์™„์„ฑ๊ณผ ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ ํƒ์›”ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ์ฝ”๋“œ ์•ˆ์ •์„ฑ์ด ๋™์‹œ์— ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.


๐ŸฅŠ FastAPI vs ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ

ํ•ญ๋ชฉFlaskDjangoFastAPI
๋น„๋™๊ธฐ ์ง€์›โŒ ์ œํ•œ์ โŒ ๋งค์šฐ ์ œํ•œ์ โœ… ์™„์ „ ์ง€์›
์ž๋™ ๋ฌธ์„œํ™”โŒ ์—†์ŒโŒ ๋ณ„๋„ ํŒจํ‚ค์ง€ ํ•„์š”โœ… ๊ธฐ๋ณธ ์ œ๊ณต
๋ฐ์ดํ„ฐ ๊ฒ€์ฆโŒ ์ˆ˜๋™ ์ฒ˜๋ฆฌโœ… Form ๊ธฐ๋ฐ˜โœ… Pydantic ๊ธฐ๋ฐ˜ ์ž๋™ ๊ฒ€์ฆ
ํƒ€์ž… ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœโŒ ๋ถˆ๊ฐ€๋ŠฅโŒ ์ œํ•œ์ โœ… ์™„์ „ ์ง€์›
์„ฑ๋Šฅ (Starlette ๊ธฐ์ค€)์ค‘์ค‘๋†’์Œ

FastAPI๋Š” ์„ฑ๋Šฅ ๋ฉด์—์„œ๋Š” Node.js ์ˆ˜์ค€์ด๋ฉฐ, ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ ๋ฉด์—์„œ๋Š” Django, Flask๋ฅผ ๋ชจ๋‘ ๋›ฐ์–ด๋„˜๋Š” ํ˜„๋Œ€์ ์ธ API ์„œ๋ฒ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง‘โ€๐Ÿ’ป FastAPI ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ผ€์ด์Šค

  • REST API ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ตฌ์ถ•
  • ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋งŽ์€ ์„œ๋น„์Šค (์ฑ„ํŒ…, ์‹ค์‹œ๊ฐ„ ํ”ผ๋“œ ๋“ฑ)
  • ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์›น์œผ๋กœ ์„œ๋น™ํ•  ๋•Œ (FastAPI + Uvicorn ์กฐํ•ฉ)
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ API Gateway ์—ญํ• 

๐Ÿงพ ๋งˆ๋ฌด๋ฆฌ: ์™œ FastAPI ์ธ๊ฐ€?

FastAPI๋Š” ๋‹จ์ˆœํžˆ “๋น ๋ฅธ ์›น ํ”„๋ ˆ์ž„์›Œํฌ”๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ƒ์‚ฐ์„ฑ, ์„ฑ๋Šฅ, ์•ˆ์ •์„ฑ, ํ™•์žฅ์„ฑ์„ ๋ชจ๋‘ ๊ฐ–์ถ˜ ์ง„์งœ ์‹ค์šฉ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
์ง€๊ธˆ์ด์•ผ๋ง๋กœ Flask๋‚˜ Django์—์„œ ํƒˆํ”ผํ•ด, FastAPI๋ฅผ ํ•™์Šตํ•˜๊ณ  ํ™œ์šฉํ•ด๋ณผ ์ ˆํ˜ธ์˜ ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค.


๋‹ค์Œ ํŽธ์—์„œ๋Š” FastAPI๋ฅผ ์„ค์น˜ํ•˜๊ณ , “Hello, FastAPI!”๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
๐Ÿ‘‰ ์ด์–ด์„œ [2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •] ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋ด…์‹œ๋‹ค.

FastAPI ๊ณต์‹ ๋ฌธ์„œ : https://fastapi.tiangolo.com/ko/

fastapi-logo