
νμ
ννΈ(Type Hints)λ
νμ΄μ¬ μ΄λ³΄μμκ²λ
βμμ΄λ λκ³ μμ΄λ λλ μ₯μβμ²λΌ 보μΈλ€.
βμ΄μ°¨νΌ νμ΄μ¬μ νμ
μ μ¨λ λμμ?β
βμ€νλ μ λλλ° μ κ΅³μ΄?β
def add(a, b):
return a + b
add(3, 5) # OK
add("3", "5") # OK
add(3, "5") # λ°νμ μλ¬
μ΄ ν¨μμ λ¬Έμ λ 무μμΌκΉ?
β λ¬Έμ λ βνλ¦° νμ
μ λ£μ μ μλ€βκ° μλλΌ,
β μ무λ μ΄ ν¨μμ μλλ₯Ό λͺ¨λ₯Έλ€λ κ²μ΄λ€
def add(a: int, b: int) -> int:
return a + b
μ΄ ν μ€λ‘ λ°λ κ²μ μ€ν κ²°κ³Όκ° μλλ€.
β
νμ
ννΈλ νμ΄μ¬μ μ격νκ² λ§λλ κΈ°λ₯μ΄ μλλ€
β
μλλ₯Ό λ¬Έμλ‘ λ¨κΈ°λ κΈ°λ₯μ΄λ€
β νμ
ννΈλ κ°μ κ° μλλ€
β νμ§λ§ μ½λ μ¬λμ λ°°λ €νλ€
π νμ ννΈλ μ»΄ν¨ν°λ³΄λ€ μ¬λμ μν κΈ°λ₯μ΄λ€
name: str = "jay"
age: int = 25
height: float = 175.5
is_active: bool = True
def greet(name: str) -> str:
return f"μλ
νμΈμ, {name}"
μ¬κΈ°μ -> strμ μλ―Έ:
βμ΄ ν¨μλ λ¬Έμμ΄μ λ°ννλ€β
π¦ 컬λ μ
νμ
ννΈ
리μ€νΈ(list)
names: list[str] = ["μ² μ", "μν¬", "λ―Όμ"]
β λ¬Έμμ΄λ§ λ€μ΄κ°λ 리μ€νΈ
β IDE μλμμ±μ΄ μ νν΄μ§λ€
λμ
λ리(dict)
scores: dict[str, int] = {
"μ² μ": 90,
"μν¬": 95
}
β keyλ λ¬Έμμ΄
β valueλ μ μ
νν(tuple)
user: tuple[str, int, bool] = ("jay", 25, True)
β μμΉλ§λ€ νμ
μ΄ κ³ μ λλ€
β κ΅¬μ‘°κ° λͺ
νν΄μ§λ€
π μ νμ κ° (None νμ©)
μ΄λ€ κ°μ μμ μλ, μμ μλ μλ€.
nickname: str | None = None
μ΄ νμ
μ μλ―Έλ λ€μκ³Ό κ°λ€.
π λ¬Έμμ΄μ΄κ±°λ
π μ무 κ°λ μμ μ μλ€
Python 3.10 μ΄μμμλ | λ¬Έλ²μ μ¬μ©νλ€.
π μ¬λ¬ νμ
νμ©νκΈ°
user_id: str | int
β λ¬Έμμ΄ ID νμ©
β μ«μ IDλ νμ©
μ€λ¬΄μμ λ§€μ° μμ£Ό λ±μ₯νλ ν¨ν΄
π§ νμ
ννΈμ μ§μ§ κ°μΉ
- μλμμ± μ νλ μμΉ
- μ€ν μ μ€λ₯ νμ§
- μ½λ μμ²΄κ° λ¬Έμκ° λ¨
β νμ
ννΈλ βνμ
체ν¬μ© κΈ°λ₯βμ΄ μλλ€
β μμ¬μν΅ λꡬλ€
π FastAPIμμμ νμ©
μ΄μ νμ
ννΈκ° μ βμμΌλ©΄ μ’μ κ²βμ΄ μλλΌ
βμμΌλ©΄ μ λλ κ²βμΌλ‘ λ°λλ μκ°μ 보μ.
π FastAPIλ νμ
ννΈλ₯Ό μ½μ΄μ λμνλ νλ μμν¬λ€
π 1. λ°μ΄ν° κ²μ¦ (Validation)
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}
μ΄ μ½λμμ ν΅μ¬: user_id: int
- /users/123 β μ μ λμ
- /users/abc β μλμΌλ‘ 422 μλ¬ λ°ν
β κ°λ°μκ° if λ¬ΈμΌλ‘ κ²μ¬νμ§ μλλ€
β try / exceptλ₯Ό μ°μ§ μλλ€
β
νμ
ννΈ νλλ‘ μμ² λ°μ΄ν° κ²μ¦μ΄ λλλ€
π 2. μλ νμ
λ³ν
@app.get("/items/{item_id}")
def get_item(item_id: int):
return {"item_id": item_id}
URLμ λͺ¨λ κ°μ κΈ°λ³Έμ μΌλ‘ λ¬Έμμ΄μ΄λ€.
νμ§λ§ FastAPIλ μ΄λ κ² λμνλ€.
- "42" β int 42
- "3.14" β λ³ν μ€ν¨ β μλ¬
π νμ
ννΈλ λ³ν κ·μΉμ΄ λλ€
π 3. API λ¬Έμ μλ μμ±
@app.get("/search")
def search(
keyword: str,
page: int = 1,
limit: int | None = None
):
return {
"keyword": keyword,
"page": page,
"limit": limit
}
μλ² μ€ν ν /docsμ μ μνλ©΄
λλΌμ΄ μΌμ΄ λ²μ΄μ§λ€.
- κ° νλΌλ―Έν°μ νμ
- νμ / μ ν μ¬λΆ
- κΈ°λ³Έκ°
μ΄ λͺ¨λ κ²μ΄ λ¬Έμλ‘ μλ μμ±λλ€.
β
νμ
ννΈ = API μ€ν λ¬Έμ
π§© Request Bodyμ νμ
ννΈ
FastAPIμμ JSON μμ² λ³Έλ¬Έμ
νμ
ννΈ μμ΄λ μ λλ‘ λ€λ£° μ μλ€.
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
age: int
email: str | None = None
@app.post("/users")
def create_user(user: UserCreate):
return user
μ¬κΈ°μ λ²μ΄μ§λ μΌ:
- νμ νλ μλ κ²μ¬
- νμ
λΆμΌμΉ μλ μλ¬
- λ¬Έμ μλ μμ±
π νμ
ννΈ νλλ‘
π κ²μ¦ + λ³ν + λ¬Έμκ° λμμ ν΄κ²°λλ€
β οΈ νμ
ννΈκ° μμΌλ©΄ μκΈ°λ λ¬Έμ
- μμ² κ²μ¦μ΄ λΆκ°λ₯νλ€
- μλ λ¬Έμκ° λΆμ νν΄μ§λ€
- IDE μλμμ±μ΄ 무λμ§λ€
β FastAPIμμ νμ
ννΈλ μ νμ΄ μλλ€
β μ€κ³ κ·Έ μ체λ€
π§ ν΅μ¬ μ 리
- νμ
ννΈλ μ€νμ μν κΈ°λ₯μ΄ μλλ€
- μλλ₯Ό νννλ μΈμ΄λ€
- FastAPIλ κ·Έ μλλ₯Ό μ½λλ‘ λ°κΏμ€λ€
π νμ
ννΈλ₯Ό μ μ°λ©΄
π API μ€κ³κ° κ³§ μ½λκ° λλ€
β¨ μ΅μ’
μμ½
- νμ΄μ¬ λ¨λ
β νμ
ννΈλ κΆμ₯
- FastAPI β νμ
ννΈλ νμ
- μ½λ = λ¬Έμ = κ²μ¦ κ·μΉ
π§ βFastAPIμμ νμ
ννΈλ μ νμ§κ° μλλΌ μΈμ΄λ€β