Skip to content

ํŠน์ง•

FastAPI ํŠน์ง•

FastAPI๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€(Open standards) ๊ธฐ๋ฐ˜

  • OpenAPI๋Š” path operations, ํŒŒ๋ผ๋ฏธํ„ฐ, body requests, ๋ณด์•ˆ ๋“ฑ์„ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ API ์ƒ์„ฑ์— ๋Œ€ํ•œ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.
  • Automatic data model documentation with JSON Schema (OpenAPI ์ž์ฒด๋„ JSON Schema ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ).
  • ์ด๋Ÿฌํ•œ ํ‘œ์ค€๋“ค์€ ์ฒ ์ €ํ•œ ์—ฐ๊ตฌ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ์–ธ์–ด์—์„œ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

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

ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ OpenAPI์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ์„ ํƒ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Interactive API ๋ฌธ์„œ์™€ ์›น ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ์ •๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

  • ๋Œ€ํ™”ํ˜• API ๋ฌธ์„œ๋กœ๋Š” Swagger UI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Swagger UI interaction

  • ๋‹ค๋ฅธ API ๋ฌธ์„œ๋กœ๋Š” ReDoc์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

ReDoc

Just Modern Python

์ด ๋ชจ๋“  ๊ฒŒ (Pydantic ๋•๋ถ„์—) Python 3.6์˜ ํƒ€์ž… ํ‘œ์ค€ ์ •์˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ๋ฐฐ์šธ ๊ตฌ๋ฌธ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ์ € Modern Python ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.

Python ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด (FastAPI์„ ์•ˆ ์“ฐ๋”๋ผ๋„), ์—ฌ๊ธฐ ์งง์€ ํŠœํ† ๋ฆฌ์–ผ์„ ํ™•์ธํ•ด๋ณด์„ธ์š”: Python Types.

Python ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

from datetime import date

from pydantic import BaseModel

# ๋ณ€์ˆ˜๋ฅผ strํ˜•์œผ๋กœ ๋ฐ›๊ฒ ๋‹ค๊ณ  ์„ ์–ธํ•˜๋ฉด
# ์ด์ œ ์—๋””ํ„ฐ๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋„ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
def main(user_id: str):
    return user_id


# Pydantic ๋ชจ๋ธ
class User(BaseModel):
    id: int
    name: str
    joined: date

์ด์ œ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

my_user: User = User(id=3, name="John Doe", joined="2018-07-19")

second_user_data = {
    "id": 4,
    "name": "Mary",
    "joined": "2018-11-30",
}

my_second_user: User = User(**second_user_data)

์ •๋ณด

**second_user_data ๋Š” ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

second_user_data ๋”•์…”๋„ˆ๋ฆฌ(dict) ๋‚ด์˜ ๋ชจ๋“  ํ‚ค(key)์™€ ๊ฐ’(value)๋“ค์„ key-value ํ˜•ํƒœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋ถ€ ๋„˜๊ธด๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ฆ‰, User(id=4, name="Mary", joined="2018-11-30") ์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์—๋””ํ„ฐ ์ง€์›

๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ์—๋””ํ„ฐ์—์„œ ํ…Œ์ŠคํŠธ๋œ ์ตœ๊ณ ์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๊ฒฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ํŒŒ์ด์ฌ ๊ฐœ๋ฐœ์ž ์„ค๋ฌธ์—์„œ, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์€ "์ž๋™์™„์„ฑ"์ด์—ˆ์Šต๋‹ˆ๋‹ค.

FastAPI ํ”„๋ ˆ์ž„์›Œํฌ ์ „์ฒด์—์„œ ์ด๊ฑธ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ์–ด๋””์„œ๋“  ์ž๋™์™„์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ๋ฅผ ๋ณด๋Ÿฌ ์˜ค๋Š” ์ผ์ด ๊ฑฐ์˜ ์—†์„๊ฒ๋‹ˆ๋‹ค.

์—๋””ํ„ฐ๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•˜๋Š” ์ง€๋Š” ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

editor support

editor support

์ „์—๋Š” ์•ˆ๋ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ์ฝ”๋“œ๋„ ์ž๋™ ์™„์„ฑ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, JSON body ์•ˆ์˜ (์ค‘์ฒฉ๋˜์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋Š”) price๋ผ๋Š” ํ‚ค๋Š” Request๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด ๋‚ด์— ์žˆ์ง€๋งŒ ์ž๋™ ์™„์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด์   ์ด๋ฆ„์„ ์ž˜๋ชป ์ ์ง€ ๋งˆ์„ธ์š”. username์ธ์ง€ user_name์ธ์ง€ ๋ชฐ๋ผ์„œ, ๋ฌธ์„œ๋ฅผ ์™”๋‹ค ๊ฐ”๋‹ค ํ•  ์ผ๋„ ์Šคํฌ๋กค์„ ์œ„์•„๋ž˜๋กœ ํ›‘์„ ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค.

์š”์•ฝ

๋ชจ๋“  ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๊ณ , ์–ด๋””๋“  ์›ํ•˜๋ฉด ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์— ๋”ฐ๋ผ, ์›ํ•˜๋Š” API ์ •์˜์— ๋”ฐ๋ผ ์ž…๋ง›์— ๋งž๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ, ์ „๋ถ€ "๊ทธ๋ƒฅ ๋˜๊ฑฐ๋“ ์š”".

๊ฒ€์ฆ

  • ์•„๋ž˜๋ฅผ ํฌํ•จํ•œ, ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • JSON objects (dict).
  • JSON array (list) defining item types.
  • String (str) fields, defining min and max lengths.
  • Numbers (int, float) with min and max values, etc.

  • ์•„๋ž˜์™€ ๊ฐ™์€, ์™ธ๋ถ€์ ์ธ ํƒ€์ž…๋“ค์˜ ๊ฒ€์ฆ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • URL
  • Email
  • UUID
  • ๊ทธ ์™ธ

๋ชจ๋“  ๊ฒ€์ฆ์€ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ์ž˜ ์„ค๊ณ„๋œ Pydantic์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ๊ณผ ์ธ์ฆ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ ์—†์ด, ๋ณด์•ˆ๊ณผ ์ธ์ฆ์„ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

OpenAPI์— ์ •์˜๋œ ๋ณด์•ˆ ์Šคํ‚ค๋งˆ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • HTTP Basic.
  • OAuth2 (JWT tokens ํฌํ•จ). OAuth2 with JWT ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.
  • API keys in:
  • ํ—ค๋”(Headers)
  • ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜(Query parameters)
  • ์ฟ ํ‚ค(Cookies) ๋“ฑ

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋ณด์•ˆ ๊ธฐ๋Šฅ๋“ค์€ Starlette ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. (์„ธ์…˜ ์ฟ ํ‚ค ํฌํ•จ).

๋นŒ๋“œ๋œ ๋ชจ๋“  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํˆด๊ณผ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์‹œ์Šคํ…œ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ๊ณผ๋„ ์—ฐ๋™ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)

FastAPI๋Š” ๋งค์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) ์‹œ์Šคํ…œ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜์กด์„ฑ์ด ๋‹ค๋ฅธ ์˜์กด์„ฑ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด, ์˜์กด์„ฑ ๊ณ„์ธต ๊ตฌ์กฐ๋‚˜ ์˜์กด์„ฑ "๊ทธ๋ž˜ํ”„" ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ „๋ถ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • All the dependencies can require data from requests and augment the path operation constraints and automatic documentation.
  • ์ž๋™ ๊ฒ€์ฆ์€ path operation ํŒŒ๋ผ๋ฏธํ„ฐ์—๋„ ์˜์กด์„ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ์œ ์ € ์ธ์ฆ ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ ์ง€์›
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ”„๋ก ํŠธ์—”๋“œ ๋“ฑ์„ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ†ตํ•ฉ์€ ๋ฌด์ฒ™ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ฌดํ•œํ•œ "ํ”Œ๋Ÿฌ๊ทธ์ธ"

๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด, ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋ผ๊ณ  ํ•  ๊ฒŒ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ชจ๋“  ์˜์กด์„ฑ์„ ๊ณ ๋ คํ•˜๋ฉด์„œ ํ†ตํ•ฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. path operations์— ์ž‘์„ฑํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ์™€ ๊ตฌ๋ฌธ์œผ๋กœ ์ง  2์ค„์งœ๋ฆฌ ์ฝ”๋“œ๋กœ๋„ "ํ”Œ๋Ÿฌ๊ทธ์ธ"์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ

  • 100% test coverage.
  • 100% type annotated code base.
  • ์‹ค์ œ๋กœ ๋ฐฐํฌํ•ด์„œ ์‚ฌ์šฉํ•ด๋ดค์Œ.

Starlette features

FastAPI๋Š” Starlette๋ฅผ ์™„์ „ํžˆ ํ˜ธํ™˜ํ•˜๊ณ , ๊ทธ ๊ธฐ๋ฐ˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ Starlette ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์ž˜ ๋™์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FastAPI ๋Š” ์‹ค์ œ๋กœ Starlette์˜ ์„œ๋ธŒ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฏธ Starlette๋ฅผ ์•Œ๊ณ  ์žˆ๊ฑฐ๋‚˜ ์จ๋ดค๋‹ค๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FastAPI์—์„œ๋Š” Starlette์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (FastAPI๋Š” Starlette์˜ ์ƒ์œ„ ํ˜ธํ™˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

Pydantic features

FastAPI๋Š” Pydantic๋ฅผ ์™„์ „ํžˆ ํ˜ธํ™˜ํ•˜๊ณ , ๊ทธ ๊ธฐ๋ฐ˜์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ Pydantic ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ์ž˜ ๋™์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ORM, ODM ๋“ฑ์˜ Pydantic ๊ธฐ๋ฐ˜์˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒŒ ์ž๋™์ ์œผ๋กœ ๊ฒ€์ฆ๋˜๊ธฐ ๋•Œ๋ฌธ์—, request๋กœ ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ง์ ‘ ๋„˜๊ธฐ๋Š” ๋“ฑ์˜ ์ƒํ™ฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊บผ๋‚ธ ๊ฐ์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ง์ ‘ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

FastAPI์—์„œ๋Š” Pydantic์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (FastAPI๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ Pydantic ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

  • ๋จธ๋ฆฌ ๊นจ์ง€๋Š” ์ผ์€ ์ด์ œ ๊ทธ๋งŒ:
  • ์ƒˆ๋กœ ๋ฐฐ์›Œ์•ผ ํ•  ์ž์ž˜ํ•œ schema ์ •์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ด์ฌ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ์•ˆ๋‹ค๋ฉด, Pydantic๋ฅผ ์ถฉ๋ถ„ํžˆ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • IDE, linter, ๊ทธ๋ฆฌ๋„ ๋‹น์‹ ์˜ ๋‘๋‡Œ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์„ธ์š”:
  • Pydantic์˜ ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ •์˜ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค๋ฟ์ž…๋‹ˆ๋‹ค. ์ž๋™ ์™„์„ฑ, ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ, mypy ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์˜ ์ง๊ฐ์€ ๊ฒ€์ฆ๋œ ๋ฐ์ดํ„ฐ์™€ ์ž˜ ๋Œ์•„๊ฐˆ ๊ฒ๋‹ˆ๋‹ค.
  • ๋น ๋ฅด๋‹ค:
  • ๋ฒค์น˜๋งˆํ‚น์—์„œ Pydantic์ด ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋ณด๋‹ค ๋น ๋ฅด๋‹จ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ๊ตฌ์กฐ ๊ฒ€์ฆ:
  • ๊ณ„์ธต์ ์ธ Pydantic ๋ชจ๋ธ, ํŒŒ์ด์ฌ์˜ typing์— ์žˆ๋Š” List and Dict ๋“ฑ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • Validator๋Š” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋“ค์„ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ณ  ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ, ๊ทธ๋ฆฌ๊ณ  JSON ์Šคํ‚ค๋งˆ๋กœ ๋ฌธ์„œํ™”๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  • ๊นŠ์ด๊ฐ€ ๊นŠ์€ Nested JSON ๊ฐ์ฒด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „๋ถ€ ๊ฒ€์ฆ๋˜๊ณ  ์ฃผ์„์ด ๋‹ฌ๋ฆฐ ์ฑ„๋กœ์š”.
  • ํ™•์žฅ์„ฑ:
  • Pydantic์€ ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋“ค์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด, ๋ชจ๋ธ์— validator decorator๋ฅผ ๋ฐ์ฝ”๋ ˆ์ดํŠธ(decorate)ํ•œ ํ›„, ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์„œ validation์„ ํ™•์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 100% test coverage.