백엔드 개발자가 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를 붙여서 실제로 동작하는 챗봇을 만들어봐요!
📌 이 글 시리즈
'AI 개발 실습' 카테고리의 다른 글
| 매번 같은 조건 반복하기 귀찮으셨죠? 시스템 프롬프트로 해결하세요 — 프롬프트 엔지니어링 2편 (0) | 2026.05.07 |
|---|---|
| ChatGPT한테 원하는 답 못 받는 이유, 드디어 알았습니다 — 프롬프트 엔지니어링 1편 (0) | 2026.05.07 |
| FastAPI + uvicorn 개발하면서 만난 에러 모음 (0) | 2026.04.28 |
| FastAPI로 AI 챗봇 백엔드 만들기 — Gemini 연동 완성 (0) | 2026.04.27 |
| GPT API vs Gemini API — 뭘 써야 할까요? (0) | 2026.04.21 |