Develop

[python] FastAPI framework ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋น„๊ต ์ค‘์‹ฌ

proggg 2024. 11. 22. 22:45
728x90
๋”๋ณด๊ธฐ

[ FastAPI ๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ ๋œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. ] 

 

FastAPI

FastAPI framework, high performance, easy to learn, fast to code, ready for production

fastapi.tiangolo.com


 

FastAPI ์— ๋Œ€ํ•ด ๋งŽ์€ ๊ธ€๋“ค์ด ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๊ณผ ๋น„๊ต๋ฅผ ์ œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ณณ์ด ๋ณ„๋กœ ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. 

 

1. FastAPI ๋ž€ ?

๋”๋ณด๊ธฐ

FastAPI ๋Š” ํ˜„๋Œ€์ ์ด๊ณ  ๋น ๋ฅธ, Python ์˜ API ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ์ž…๋‹ˆ๋‹ค. - ๊ณต์‹๋ฌธ์„œ - 

1.1 Python ์˜ API ๋ฅผ ๋นŒ๋“œํ•œ๋‹ค๋Š” ์˜๋ฏธ 

๋‘๋ฃจ๋ญ‰์‹คํ•˜๊ฒŒ ๋„˜์–ด๊ฐ€์ง€ ์•Š๊ณ , ์ž์„ธํ•˜๊ฒŒ ์ง‘์–ด๋ณธ๋‹ค๋ฉด python ์˜ API ๋ฅผ ๋นŒ๋“œํ•œ๋‹ค๋Š” ๋ง์ด ๋ฌด์Šจ๋ง์ผ๊นŒ. ์‹ถ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚ด๊ฐ€ ๊ทธ๋žฌ์œผ๋‹ˆ๊นŒ. ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ธ๋ฐ ๊ทธ๊ฒŒ ์™œ python api ๋ฅผ '๋นŒ๋“œ'ํ•œ๋‹ค๋Š” ๊ฒƒ ์ผ๊นŒ? ์ฐจ๋ผ๋ฆฌ ์„œ๋น™ํ•œ๋‹ค๋Š” ํ‘œํ˜„์ด ๋งž์ง€ ์•Š์„๊นŒ. 

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

 

๋’ค์—์„œ ๋” ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃฐ FastAPI ์˜ ๊ธฐ๋ณธ ์˜ˆ์ œ์ธ๋ฐ, return { } ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋กœ์ปฌํ˜ธ์ŠคํŠธ์˜ ์›นํŽ˜์ด์ง€์— hello, world ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ

python api ๋ฅผ ๋นŒ๋“œํ•œ๋‹ค๋Š” ๋ง์€ ํŒŒ์ด์ฌ์˜ function ์„  ์›น์—์„œ ๊ตฌํ˜„๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธด๋‹ค๋˜์ง€, ํŒŒ์ผ์„ ํ˜ธ์ถœํ•œ๋‹ค๋˜์ง€ ๋“ฑ์˜ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๋ง์ด๋‹ค. 

 

2. FastAPI ์˜ ํŠน์ง• 

๊ณต์‹๋ฌธ์„œ์—์„œ ์–ธ๊ธ‰ํ•œ ์ฃผ์š”ํŠน์ง•์€ 8๊ฐ€์ง€ ์ด๋‹ค.

 

1. ๋น ๋ฆ„

2. ๋น ๋ฅธ ์ฝ”๋“œ ์ž‘์„ฑ

3. ์ ์€ ๋ฒ„๊ทธ

4. ์ง๊ด€์ 

5. ์‰ฌ์›€

6. ์งง์Œ

7. ๊ฒฌ๊ณ ํ•จ 

8. ํ‘œ์ค€ ๊ธฐ๋ฐ˜ 

 

์ธ๋ฐ ์‚ฌ์‹ค ์ฝ๋‹ค๋ณด๋ฉด ๊ทธ ์˜๋ฏธ๊ฐ€ ๊ฒน์น˜๋Š” ๊ฒƒ๋“ค์ด ์กฐ๊ธˆ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด ๋‚˜๋ฆ„๋Œ€๋กœ ์ค‘๋ณต๋˜๋Š” ์˜๋ฏธ๋ฅผ ์ค„์—ฌ๋ณด์ž๋ฉด 

 

1. ๋น ๋ฆ„  : Starlette ์™€ Pydantic ๋•๋ถ„์— NodeJS ๋ฐ Go ์™€ ๋Œ€๋“ฑํ•  ์ •๋„๋กœ ๋งค์šฐ ๋†’์€ ์„ฑ๋Šฅ [ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋น ๋ฅธ ํŒŒ์ด์ฌ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜ ]

 

- ์„ฑ๋Šฅ์€ ์•„๋ž˜์—์„œ ์ž์„ธํ•˜๊ฒŒ ๋น„๊ตํ•ด๋ณด๋กœ๋… ํ•˜๊ณ  Starlette ์™€ Pydantic ์ด ๋ญ˜๊นŒ?

๋”๋ณด๊ธฐ

Pydantic๊ณผ Starlette๋Š” FastAPI์˜ ์„ฑ๋Šฅ๊ณผ ๊ธฐ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ํ•ต์‹ฌ ์š”์†Œ๋‹ค. ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” FastAPI๊ฐ€ ๊ณ ์„ฑ๋Šฅ์˜ ๋น„๋™๊ธฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค. ์•„๋ž˜์—์„œ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ• ๊ฒŒ.


1. Pydantic

Pydantic์€ Python ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ์„ค์ • ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. FastAPI์—์„œ Pydantic์€ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ๋ฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์ •์˜์— ์‚ฌ์šฉ๋œ๋‹ค.

์ฃผ์š” ํŠน์ง•:

  • ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ: Pydantic์€ Python์˜ ํƒ€์ž… ํžŒํŠธ๋ฅผ ํ™œ์šฉํ•ด, ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •ํ™•ํ•œ ํƒ€์ž…์ธ์ง€ ์ž๋™์œผ๋กœ ํ™•์ธํ•œ๋‹ค. ์ž˜๋ชป๋œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ฉด ์ฆ‰์‹œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํƒ€์ž… ํžŒํŠธ ์ง€์›: Pydantic์€ Python์˜ ๊ธฐ๋ณธ ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ•„๋“œ ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ  ๊ฒ€์ฆํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, int, str, datetime ๋“ฑ์„ ํƒ€์ž… ํžŒํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋™ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”: Pydantic์€ Python ๊ฐ์ฒด์™€ JSON ๊ฐ„์˜ ๋ณ€ํ™˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด FastAPI๋Š” ์š”์ฒญ ๋ฐ ์‘๋‹ต์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ฑ๋Šฅ: Pydantic์€ ๋‚ด๋ถ€์ ์œผ๋กœ Cython์„ ํ™œ์šฉํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ์„ ์ž๋ž‘ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™” ๋“ฑ์˜ ์ž‘์—…์„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ:

from pydantic import BaseModel

class User(BaseModel):
    username: str
    email: str
    full_name: str | None = None

# ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
user = User(username="john_doe", email="john@example.com")
print(user.dict())

์œ„ ์ฝ”๋“œ์—์„œ User ํด๋ž˜์Šค๋Š” BaseModel์„ ์ƒ์†๋ฐ›์•„ Pydantic ๋ชจ๋ธ๋กœ ์ •์˜๋œ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ํƒ€์ž… ํžŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

FastAPI์™€์˜ ๊ด€๊ณ„

FastAPI๋Š” Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์ง๋ ฌํ™”ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, API ์š”์ฒญ์—์„œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ด๋ฅผ Pydantic ๋ชจ๋ธ์„ ํ†ตํ•ด ๊ฒ€์ฆํ•œ ํ›„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ž˜๋ชป๋œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


2. Starlette

Starlette๋Š” FastAPI์˜ ์›น ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋น„๋™๊ธฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ•ต์‹ฌ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. FastAPI๋Š” Starlette๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, Starlette๋Š” HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ฃผ์š” ํŠน์ง•:

  • ๋น„๋™๊ธฐ ์ง€์›: Starlette๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ์„ ์ž๋ž‘ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด I/O๊ฐ€ ๋งŽ์€ ์ž‘์—…(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ, ์™ธ๋ถ€ API ํ˜ธ์ถœ ๋“ฑ)์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ผ์šฐํŒ…: Starlette๋Š” API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. FastAPI์—์„œ ๋ผ์šฐํ„ฐ๋ฅผ ์ •์˜ํ•  ๋•Œ Starlette์˜ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฏธ๋“ค์›จ์–ด ์ง€์›: Starlette๋Š” ๋‹ค์–‘ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘๊ฐ„ ๊ณผ์ •์—์„œ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ์ฆ, ๋กœ๊น…, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋“ฑ์„ ๋ฏธ๋“ค์›จ์–ด๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์›น์†Œ์ผ“ ์ง€์›: Starlette๋Š” ์›น์†Œ์ผ“์„ ์ง€์›ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: ์ฑ„ํŒ…, ์•Œ๋ฆผ ๋“ฑ)์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„ ๊ธฐ๋Šฅ: Starlette๋Š” ์ž์ฒด ์›น ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, FastAPI๋Š” ๋ณดํ†ต Uvicorn๊ณผ ๊ฐ™์€ ASGI ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค. Starlette๋Š” ASGI(Asynchronous Server Gateway Interface)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค.

์˜ˆ์‹œ:

from starlette.responses import JSONResponse
from starlette.routing import Route
from starlette.applications import Starlette

async def homepage(request):
    return JSONResponse({'message': 'Hello, World!'})

app = Starlette(debug=True, routes=[Route('/', homepage)])

์œ„ ์ฝ”๋“œ์—์„œ Starlette์€ ๋น„๋™๊ธฐ ์›น ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ , homepage๋ผ๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

FastAPI์™€์˜ ๊ด€๊ณ„:

FastAPI๋Š” Starlette์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ HTTP ์š”์ฒญ/์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋น„๋™๊ธฐ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. FastAPI์˜ ๋ผ์šฐํŒ…, ๋ฏธ๋“ค์›จ์–ด ์ฒ˜๋ฆฌ, ์„œ๋ฒ„ ์„ค์ • ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ์›น ๊ด€๋ จ ๊ธฐ๋Šฅ์€ Starlette์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. FastAPI๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋Š” ๋ฐ”๋กœ Starlette ๋•๋ถ„์ด๋‹ค.


FastAPI์—์„œ Pydantic๊ณผ Starlette์˜ ์—ญํ•  ์š”์•ฝ

  • Pydantic:
    • ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • Python ํƒ€์ž… ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ฒ€์ฆํ•˜๊ณ  ๋ณ€ํ™˜ํ•œ๋‹ค.
  • Starlette:
    • ๋น„๋™๊ธฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ผ์šฐํŒ…, ๋ฏธ๋“ค์›จ์–ด, ์„œ๋ฒ„ ๊ธฐ๋Šฅ ๋“ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
    • ๋น„๋™๊ธฐ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.

์ด ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” FastAPI๊ฐ€ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. Pydantic์€ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ, Starlette์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ์„œ๋ฒ„ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜์—ฌ FastAPI์˜ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

 

2. ๋น ๋ฅธ ์ฝ”๋“œ ์ž‘์„ฑ : ์•ฝ 200% ์—์„œ 300% ๊นŒ์ง€ ๊ธฐ๋Šฅ๊ฐœ๋ฐœ ์†๋„ ์ฆ๊ฐ€.

 

3. ์‰ฌ์›€ : ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฐ์šฐ๋„๋ก ์„ค๊ณ„. ์ ์€ ๋ฌธ์„œ ์ฝ๊ธฐ ์‹œ๊ฐ„ 

 

4. ์ ์€๋ฒ„๊ทธ : ์‚ฌ๋žŒ(๊ฐœ๋ฐœ์ž) ์— ์˜ํ•œ ์—๋Ÿฌ ์•ฝ 40% ๊ฐ์†Œ 

5. ํ‘œ์ค€๊ธฐ๋ฐ˜ : OpenAPI / Json ์Šคํ‚ค๋งˆ 

   - ์ด๊ฒƒ์€ OpenAPI ๊ธฐ๋ฐ˜์˜ ์ž๋™ ๋ฌธ์„œํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , Json ์Šคํ‚ค๋งˆ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด ๋ฒ”์šฉ์„ฑ์ด ๋„“๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

*์ˆ˜์น˜๋Š” ๋‚ด๋ถ€ ๊ฐœ๋ฐœํŒ€์˜ ํ”„๋กœ๋•์…˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•œ ํ…Œ์ŠคํŠธ์— ๊ทผ๊ฑฐํ•œ ์ธก์ •* ์ด๋ผ๊ณ  ํ•œ๋‹ค.

3. ์‚ฌ๋ก€

๊ณต์‹๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ๋Š” ์Šคํฐ์„œ๋“ค์˜ ์˜๊ฒฌ์„ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

Netflix FastAPI์˜ ๋น ๋ฅธ ์„ฑ๋Šฅ ๋•๋ถ„์— ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํ™œ์šฉ.
Uber ๊ณ ์†์˜ API ์ฒ˜๋ฆฌ์™€ ํšจ์œจ์ ์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•์„ ์œ„ํ•œ FastAPI ์ฑ„ํƒ.
Microsoft ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์˜ API ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด FastAPI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ์†๋„์™€ ๋‚ฎ์€ ๋Œ€๊ธฐ์‹œ๊ฐ„ ๊ตฌํ˜„.
Platform.sh FastAPI๋Š” ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ์™€ DevOps ํ†ตํ•ฉ์„ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณต. 
Porter Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ†ตํ•ฉ๋˜์–ด ๋น ๋ฅธ ์•ฑ ๋ฐฐํฌ์™€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒ

 

์ด์ฒ˜๋Ÿผ FastAPI๋Š” ๋†’์€ ์„ฑ๋Šฅ, ํšจ์œจ์ ์ธ API ์ฒ˜๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์‚ฐ์—…์˜ ๊ธฐ์—…๋“ค์—๊ฒŒ ์ ํ•ฉํ•œ ์„ ํƒ์ด ๋˜๊ณ  ์žˆ๋‹ค.

 

4. ์‹ค์Šต

4.1 ์„ค์น˜

4.2 ์˜ˆ์ œ ๋งŒ๋“ค๊ณ , ์„œ๋ฒ„์‹คํ–‰

 

4.3. API Return ๊ฐ’ ํ™•์ธ

4.4. API ๋ฌธ์„œ ์ž๋™์ƒ์„ฑ

 

FastAPI ๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ Python [Function ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์›น์—์„œ ๋ณด์—ฌ์ค„]-build ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ํŠน์ง• ์ฒ˜๋Ÿผ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ์™€ ๋น ๋ฅธ ์„ค์น˜๋กœ ์—๋Ÿฌ๊ฐ€ ์—†๋‹ค. ์ด ํฌ์ŠคํŒ…์—์„œ ๋” ์ž์„ธํ•˜๊ฒŒ ์ ์ง€๋Š” ์•Š๊ฒ ๋‹ค. ์˜ˆ์ œ๋Š” ๊ณต์‹๋ฌธ์„œ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€์„œ ํ•œ๋ฒˆ์”ฉ ํ•ด๋ณด๊ธฐ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

 

5. FastAPI ์„ฑ๋Šฅ ๋น„๊ต 

 

๊ทธ๋ž˜์„œ FastAPI ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ณด๋‹ค ์–ผ๋งˆ๋‚˜ ์ข‹๋ƒ. ๋ผ๋Š” ๊ฒƒ์„ ๋”ฐ์ง€๋ฉด ํ™•์‹คํžˆ ๋น ๋ฅด๋‹ค. Flask ์™€ ์‚ฌ์šฉ๋ฒ•์ด ์˜ˆ์ œ์—์„œ๋Š” ๊ฑฐ์˜ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์ด๋ ‡๊ฒŒ ์ฐจ์ด๊ฐ€ ๋‚˜๋‹ˆ FastAPI ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ด์œ ๋Š” ์—†์„ ๊ฒƒ ๊ฐ™๊ธฐ๋Š”ํ•˜๋‹ค. 

 

FastAPI 1,000,000+ ์š”์ฒญ/์ดˆ
Node.js 1,000,000+ ์š”์ฒญ/์ดˆ
Go 1,000,000+ ์š”์ฒญ/์ดˆ
Flask 100,000 ์š”์ฒญ/์ดˆ
Django 50,000-100,000 ์š”์ฒญ/์ดˆ

 

๊ทธ๋Ÿผ์—๋„ Flask ์™€ Django ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ด์œ ๋ฅผ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”.... 

728x90