본문 바로가기

AI 개발 실습

FastAPI 입문 — Spring Boot 개발자 눈으로 보기

백엔드 개발자가 AI 쪽으로 넘어오면서 제일 먼저 만나는 게 FastAPI예요.
근데 Spring Boot 쓰던 사람 입장에서 보면 처음엔 좀 낯설어요.

"어? 이게 끝이야? 너무 간단한데?"

이 글에서는 Spring Boot랑 비교하면서 FastAPI를 빠르게 이해해볼게요.


FastAPI가 뭔가요?

FastAPI는 파이썬으로 만드는 웹 API 서버 프레임워크예요.
AI 챗봇 백엔드, 머신러닝 모델 서빙 등에 많이 쓰여요.

이름에 "Fast"가 붙은 이유가 두 가지예요.

  • 개발 속도가 빠름 — 코드량이 Spring Boot 대비 훨씬 적어요
  • 실행 속도가 빠름 — 비동기 처리 기반이라 성능이 좋아요

Spring Boot vs FastAPI 한눈에 비교

항목 Spring Boot FastAPI
언어 Java / Kotlin Python
설정 파일 application.yml, pom.xml 거의 없음
서버 실행 내장 Tomcat uvicorn
API 문서 Swagger (별도 설정) 자동 생성 (/docs)
코드량 많음 적음
학습 난이도 높음 낮음
AI 연동 가능하지만 복잡 자연스러움

설치부터 서버 실행까지

pip install fastapi uvicorn

Spring Boot는 Maven/Gradle로 의존성 관리하지만,
FastAPI는 pip 한 줄이면 끝이에요.


Hello World 비교

Spring Boot (Java)

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

FastAPI (Python)

from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
def hello():
    return {"message": "Hello, World!"}

코드량 차이가 느껴지시나요?
어노테이션 방식은 비슷하지만 훨씬 간결해요.


서버 실행 방법

Spring Boot는 mvn spring-boot:run 또는 IDE에서 실행하지만,
FastAPI는 터미널에서 이렇게 실행해요.

uvicorn main:app --reload
  • main → 파일명 (main.py)
  • app → FastAPI 인스턴스 변수명
  • --reload → 코드 변경 시 자동 재시작 (개발용)

실행하면 이렇게 떠요:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process

API 문서 자동 생성 — 이게 진짜 편해요

FastAPI의 가장 큰 장점 중 하나예요.
서버 실행 후 브라우저에서 아래 주소로 접속하면:

👉 http://127.0.0.1:8000/docs

Swagger UI가 자동으로 생성돼 있어요.
Spring Boot에서는 별도 라이브러리 추가하고 설정해야 했는데,
FastAPI는 그냥 됩니다.


요청/응답 파라미터 처리

경로 파라미터 (Path Parameter)

@app.get("/items/{item_id}")
def get_item(item_id: int):
    return {"item_id": item_id}

Spring Boot의 @PathVariable과 동일한 개념이에요.

쿼리 파라미터 (Query Parameter)

@app.get("/search")
def search(keyword: str, limit: int = 10):
    return {"keyword": keyword, "limit": limit}

함수 파라미터에 기본값 넣으면 쿼리 파라미터로 자동 처리돼요.
/search?keyword=AI&limit=5 이런 식으로 호출해요.

요청 Body (POST)

from pydantic import BaseModel

class ChatRequest(BaseModel):
    message: str
    user_id: str = "anonymous"

@app.post("/chat")
def chat(request: ChatRequest):
    return {"received": request.message}

Spring Boot의 @RequestBody + DTO 클래스랑 같은 개념이에요.
BaseModel이 DTO 역할을 해요.


프로젝트 구조

Spring Boot는 패키지 구조가 복잡한 편인데,
FastAPI는 처음엔 이 정도면 충분해요.

my_project/
├── main.py          # FastAPI 앱 진입점
├── routers/         # 라우터 (Controller 역할)
│   └── chat.py
├── models/          # 요청/응답 모델 (DTO 역할)
│   └── schemas.py
├── .env             # 환경 변수
└── requirements.txt # 의존성 목록

AI 연동이 자연스러운 이유

FastAPI가 AI 백엔드로 많이 쓰이는 이유가 있어요.

import google.generativeai as genai
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
model = genai.GenerativeModel("gemini-1.5-flash")

class ChatRequest(BaseModel):
    message: str

@app.post("/chat")
def chat(request: ChatRequest):
    response = model.generate_content(request.message)
    return {"reply": response.text}

Gemini API 연동이 이렇게 짧아요.
다음 글에서 이걸 더 발전시켜서 챗봇 백엔드를 완성해볼 거예요.


정리

Spring Boot 개념 FastAPI 대응
@RestController @app.get/post
@PathVariable 경로 파라미터
@RequestBody + DTO BaseModel
application.yml .env
Tomcat uvicorn
Swagger (설정 필요) /docs (자동)

Spring Boot 해보셨다면 FastAPI는 생각보다 금방 익숙해질 거예요.
개념은 다 아는 건데 문법만 다른 느낌이에요.


다음 글에서는 FastAPI로 AI 챗봇 백엔드 만들기를 해볼게요.
오늘 배운 내용에 Gemini API를 붙여서 실제로 동작하는 챗봇을 만들어봐요!


📌 이 글 시리즈