NakedFlower 님의 블로그

FastAPI 공부 본문

궁금해서 해본 거/API

FastAPI 공부

nakedflower 2025. 9. 29. 15:41

이론

FastAPI란?

 

Python 기반의 웹 프레임워크로, 빠르고 간결한 API개발을 목적으로 만들어졌다.
최신 Python기능을 적극 활용하여 코드의 생산성과 유지보수성을 높였다.

 

 

  • 타입 힌팅(Type Hinting): FastAPI는 Python의 타입 힌팅을 사용하여 자동으로 API 문서를 생성하고, 타입 검사를 통해 버그를 사전에 방지할 수 있습니다.
  • 자동화된 문서 생성: FastAPI는 Swagger와 ReDoc을 사용하여 API의 문서를 자동으로 생성합니다. 개발자는 추가적인 설정 없이도 API 사용법을 쉽게 설명할 수 있습니다.
  • 비동기 지원: FastAPI는 Python의 async 와 await 키워드를 지원하여 비동기 처리를 매우 효율적으로 수행할 수 있습니다. 이를 통해 많은 요청을 동시에 처리하는 고성능 API 서버를 쉽게 만들 수 있습니다.
  • 빠른 성능: FastAPI는 Starlette과 Pydantic과 같은 고성능의 경량 라이브러리를 기반으로 만들어졌습니다. 이로 인해 많은 요청을 짧은 시간 안에 처리할 수 있습니다.

 

실습

먼저 실습 전에 터미널에

pip3 install fastapi
pip3 install uvicorn

을 입력해서 환경 구축부터 해줍시다

from fastapi import FastAPI, Form, Request
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse

# FastAPI의 인스턴스를 생성
app = FastAPI()

templates = Jinja2Templates(directory="templates")

# templates 폴더의 "index.html" 응답
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

# 사용자가 폼을 통해 보낸 데이터(content)를 받아서 "result.html" 템플릿에 넘김
@app.post("/result", response_class=HTMLResponse)
async def post_result(request: Request, content: str = Form(...)):
    return templates.TemplateResponse("result.html", {"request": request, "content": content})

위 코드로 main.py 파일을 만들어주고
같은 파일 안에 templates라는 폴더를 만들어서 그 안에
index.html파일과 result.html파일을 만들어줍니다.

 

 

 

 

그리고

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Index</title>
</head>
<body>
    <form action="/result" method="post">
        <input type="text" name="content" placeholder="내용을 입력하세요...">
        <button type="submit">제출</button>
    </form>
</body>
</html>

index.html과

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Result</title>
</head>
<body>
    <h1>입력한 내용:</h1>
    <p>{{ content }}</p>
</body>
</html>

result.html파일을 만들어주면