FastAPI

김우진·2026년 3월 6일

FastAPI

목록 보기
1/6
post-thumbnail

FastAPI 기초 정리

FastAPI란?

Python 기반의 API 생성 툴로, 프레임워크보다는 API 생성에 특화된 도구다.
Micro Service 방식으로 서버를 기능별로 분할해서 만든다.

특징

  • 매우 빠른 속도
  • 코드가 간결함
  • 비동기 처리 지원 → 특정 코드가 오래 걸리면 일단 제끼고 다른 코드 실행 가능
  • 요청이 많은 사이트에 강점

주요 기능

  • GET / POST 요청 처리
  • DB 입출력
  • 회원 인증
  • 데이터 Validation
  • 웹소켓
  • async / await (비동기)
  • 타입 힌트
  • API 문서 자동 생성

환경 세팅

가상환경은 폴더마다 따로 만들어야 한다. 폴더가 바뀔 때마다 아래 순서를 진행한다.

# 1. 폴더 만들고 이동
cd C:\work
mkdir board
cd board

# 2. 가상환경 생성
py -m venv .venv

# 3. 가상환경 활성화 (앞에 (.venv) 붙으면 성공)
.venv\Scripts\activate

# 4. 패키지 설치
pip install fastapi uvicorn

# 5. 서버 실행
uvicorn main:app --reload

팀 프로젝트에서는

팀원이 requirements.txt 를 넘겨주면 한 번에 환경 세팅 가능하다.

pip install -r requirements.txt

src 폴더 생성

폴더에src디렉터리를 만들고 그 안에 .py파일들을 생성한다.
src폴더는 mark directory as에서 source root으로 바꿔준다.

기본 서버 만들기

from fastapi import FastAPI

app = FastAPI()

메인 페이지 접속 시 데이터 반환

@app.get("/")
def root():
    return "hello"

특정 경로로 데이터 반환

@app.get("/data")
def get_data():
    return {"hello": 1234}

메인 페이지에서 HTML 파일 전송

from fastapi.responses import FileResponse

@app.get("/")
def root():
    return FileResponse("index.html")

API 문서 자동 생성

서버 실행 후 아래 주소로 접속하면 API 문서를 자동으로 확인할 수 있다.

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

유저 데이터 받기 (POST)

유저에게 데이터를 받을 때는 Pydantic으로 모델을 생성해야 한다.

Pydantic이란?

유저가 데이터를 보낼 때 타입이 맞는지 자동으로 검사해주는 도구.
잘못된 데이터가 서버에 들어오는 걸 막아준다.
Spring의 @Valid, @NotNull 같은 Bean Validation과 같은 역할이다.

from pydantic import BaseModel

class Model(BaseModel):
    name: str   # 타입 지정
    phone: int

@app.post("/send")
def send_data(data: Model):  # /send로 보낸 데이터가 담김
    print(data)
    return "전송완료"

비동기 처리 (async / await)

@app.get("/")
async def root():
    await 오래_걸리는_코드()  # 이 코드가 끝날 때까지 기다림
    return FileResponse("index.html")

SQLAlchemy (ORM)

ORM이란?

SQL을 직접 쓰지 않고 Python 코드로 DB를 다룰 수 있게 해주는 도구다.
Spring의 JPA / Hibernate와 똑같은 역할이다.

# SQL 직접 쓰면
SELECT * FROM posts WHERE id = 1

# SQLAlchemy 쓰면
db.query(Post).filter(Post.id == 1).first()

Spring이랑 비교

역할SpringFastAPI
ORMJPA / HibernateSQLAlchemy
테이블 정의@Entityclass Post(Base)
쿼리JpaRepositorydb.query(Post)

JPA 써봤으면 개념은 이미 알고 있다. 문법만 다를 뿐이다.


DB 입출력

추후 작성 예정

0개의 댓글