C
Python//Lesson 25

FastAPI 시작하기

1시간·theory
Python

FastAPI 시작하기

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ Python 이 AI/데이터 표준 언어가 됐는지
  • ✅ Python 3.x 기준 venv + requirements.txt 셋업
  • ✅ print / input / type / dir 4개 내장 함수

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

FastAPI — 코드 + 실행 결과

FastAPI = Python 모던 웹 프레임워크. 타입 힌트 자동 검증 + Swagger UI 자동 생성. 비동기 표준.


1. 설치 + Hello World

bash
$ pip install fastapi uvicorn
python
# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def 인덱스():
    return {"message": "안녕!"}
bash
$ uvicorn main:app --reload
# http://localhost:8000 → {"message": "안녕!"}
# http://localhost:8000/docs → Swagger UI 자동

2. 경로 매개변수

python
@app.get("/items/{id}")              # /items/42 → id=42
def 아이템(id: int):                 # 타입 힌트 = 자동 변환
    return {"id": id, "name": f"아이템 {id}"}

# /items/abc → 422 에러 (자동 검증)

3. 쿼리 매개변수

python
@app.get("/search")                 # /search?q=python&limit=10
def 검색(q: str, limit: int = 5):
    return {"검색어": q, "개수": limit}

4. POST + 본문 (Pydantic)

python
from pydantic import BaseModel

class 사용자(BaseModel):
    이름: str
    나이: int
    이메일: str | None = None

@app.post("/users")
def 만들기(u: 사용자):                # JSON → 자동 검증
    return {"생성됨": u.이름}

# 요청: POST /users {"이름": "홍길동", "나이": 28}
# 응답: {"생성됨": "홍길동"}
# 잘못된 JSON → 422 에러 자동

5. 비동기 + DB 호출

python
@app.get("/users/{id}")
async def 가져오기(id: int):
    user = await db.fetch_one("SELECT * FROM users WHERE id = $1", id)
    if not user:
        raise HTTPException(404, "없음")
    return user

한 줄 요약

@app.get/post + 타입 힌트 + Pydantic 모델 3개면 REST API 끝.

💻 FastAPI 기본 예제
# pip install fastapi uvicorn
from fastapi import FastAPI, Query, Path
from typing import Optional

app = FastAPI(title="My API", version="1.0.0")

# 기본 엔드포인트
@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI!"}

# 경로 매개변수
@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

# 쿼리 매개변수
@app.get("/search/")
def search(
    q: str,
    skip: int = 0,
    limit: int = Query(default=10, le=100)
):
    return {"q": q, "skip": skip, "limit": limit}

# 비동기 엔드포인트
@app.get("/async/")
async def async_endpoint():
    return {"message": "Async response"}

# 실행: uvicorn main:app --reload
# 문서: http://localhost:8000/docs (Swagger UI)
# 문서: http://localhost:8000/redoc (ReDoc)

💡 핵심 포인트

1. 자동 API 문서: /docs, /redoc
2. 타입 힌트 → 자동 검증
3. uvicorn: ASGI 서버

Python은 간결하고 읽기 쉬운 문법으로 다양한 분야에 활용됩니다. 인터프리터 언어로 REPL 환경에서 즉시 실행 가능합니다. PEP 8 코딩 스타일 가이드를 따르고, Black/autopep8으로 자동 포맷팅합니다. 타입 힌트(type hints)로 코드 가독성과 IDE 지원을 향상시킵니다. pip로 패키지 관리, venv/conda로 가상환경을 구성합니다.

🐍 실행해보기 — FastAPI 시작하기

위 개념을 실제로 코드로 실행해보세요. 값을 바꿔가며 어떻게 동작하는지 직접 확인하는 게 가장 빠른 학습.
✏️ Python 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
🐍 Pyodide로 실제 Python 실행 — 첫 실행 시 로딩 3~5초 소요

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 Flask 코드를 FastAPI 로 마이그레이션해줘"
  • "이 FastAPI 엔드포인트에 Pydantic 모델 + 의존성 주입 추가해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

먼저 읽으면 좋은 개념: pathlib — 모던 파일 경로 (PEP 428)
다음 추천: NumPy 입문
FastAPI 입문 - Python