왜 파이썬이고, 왜 FastAPI인가 — 다른 언어·프레임워크와 비교해 보기 (FastAPI 입문 1편)
API가 무엇인지부터 시작해, 왜 많은 팀이 백엔드 언어로 파이썬을 고르고 그중에서도 FastAPI를 고르는지 Django·Flask·Express·Spring Boot·Go와 나란히 놓고 비교한다. 같은 API를 여섯 프레임워크로 짠 코드를 위젯으로 직접 비교해 보고, FastAPI를 고르지 말아야 할 때, 그리고 어떤 파이썬 버전(3.10~3.15)으로 돌려야 하는지 직접 돌려 본 결과와 함께 정리한다. 일곱 편짜리 FastAPI 입문 시리즈의 첫 편이다.
이 질문들에는 공통점이 있다. API가 어떻게 생겼는지 한곳에 정리돼 있지 않아서 생긴다는 점이다. FastAPI를 쓰는 팀에서는 대부분 이렇게 답하고 끝난다. “/docs 열어 보세요.”
이 시리즈는 FastAPI를 처음 접하거나, 팀 프로젝트에 투입됐지만 기본 사용법이 막막한 사람을 위해 썼다. 목표는 거창하지 않다. 라우팅과 /docs만 제대로 알아도 FastAPI 협업의 80%는 해결된다. 여기에 CRUD(만들기·읽기·수정·삭제)를 더하면 대부분의 사내 API를 읽고, 고치고, 새로 만들 수 있다.
POST/tasks + 본문 {"title": "보고서 쓰기", "priority": 4} — 새로 만들 내용은 본문(body)에 JSON으로
응답: 201 Created + {"id": 1, "title": "보고서 쓰기", ...} — 상태 코드(결과 요약) + JSON 본문
백엔드 프레임워크는 이 주문을 받는 데 필요한 반복 작업을 대신 해 준다.
① 라우팅
“GET /tasks/3” 이 요청을 어느 함수가 처리할지 찾아 준다.
② 파싱·검증
주소의 “3”(문자열)을 숫자 3으로 바꾸고, 본문 JSON이 약속한 모양인지 검사한다.
③ 실행
개발자가 쓴 함수(비즈니스 로직)를 부른다. 개발자가 실제로 신경 써야 하는 부분은 여기뿐이어야 좋다.
④ 직렬화
함수가 돌려준 파이썬 객체를 JSON으로 바꾸고 상태 코드를 붙인다.
⑤ 문서화
이 API가 어떤 요청을 받고 어떤 응답을 주는지 다른 사람이 볼 수 있게 정리한다.
프레임워크마다 차이가 나는 곳은 ②와 ⑤다. ①·③·④는 어느 프레임워크든 해 준다. 그런데 협업에서 사고가 나는 곳은 대부분 ②(검증 누락)와 ⑤(문서 부재) 다. 앞의 QA 질문(“제목이 비어도 저장돼요”)은 ②의 문제고, 프론트엔드 질문(“주소가 뭐였죠?”)은 ⑤의 문제다. FastAPI는 바로 이 둘을 코드를 따로 쓰지 않아도 해 준다는 점에서 다른 프레임워크와 갈린다. 뒤에서 자세히 보자.
2. 왜 파이썬인가
2-1. 숫자로 본 파이썬
57.9%
2025 Stack Overflow 개발자 설문에서 파이썬을 쓴다고 답한 비율
+7%p
같은 설문의 2024→2025 증가 폭. 설문은 “파이썬 채택이 크게 가속됐다”고 적었다
14.8%
같은 설문의 웹 프레임워크 부문에서 FastAPI 사용 비율 (Spring Boot 14.7%, Flask 14.4%)
+5%p
FastAPI의 한 해 증가 폭. 설문은 “웹 프레임워크 분야에서 가장 큰 변화 중 하나”라고 평가했다
2-2. 팀이 파이썬을 고르는 네 가지 이유
📖
① 읽기 쉽다 — 협업의 비용이 낮다
중괄호·세미콜론·타입 선언 없이 들여쓰기로 구조를 표현한다. 백엔드 전담이 아닌 사람(데이터 분석가, 기획자, 신입)도 코드를 읽고 리뷰에 참여할 수 있다. 협업에서는 “쓰기 쉬움”보다 “남이 읽기 쉬움”이 더 중요하다.
🤖
② AI·데이터 생태계가 파이썬에 있다
PyTorch, pandas, scikit-learn, Hugging Face, OpenAI·Anthropic SDK 등 AI와 데이터 도구가 파이썬을 1순위로 지원한다. 모델을 서비스로 만들 때 같은 언어로 API까지 이어지면 번역(다른 언어로 재작성) 비용이 사라진다.
🧩
③ 한 언어로 여러 일을 한다 ④ 배우는 사람이 많다
API 서버, 배치 스크립트, 데이터 처리, 자동화, 크롤러를 한 언어로 쓴다. 그리고 대학·부트캠프의 첫 언어로 가장 흔해서 채용과 인수인계가 쉽다. 팀원이 바뀌어도 코드가 고아가 되지 않는다.
2-3. 그래도 알아 둘 파이썬의 약점
파이썬이 모든 면에서 좋은 것은 아니다. 약점을 알고 고르는 것과 모르고 고르는 것은 다르다.
약점
어떤 문제인가
FastAPI 환경에서의 보완
실행 속도
인터프리터 언어라 Go·Java·Rust보다 CPU 연산이 느리다.
API 서버의 시간은 대부분 DB·외부 API 대기에 쓰인다. async로 대기 중 다른 요청을 처리하면 체감 성능 차이가 크게 준다. 무거운 연산은 NumPy 같은 C 확장 라이브러리가 맡는다.
동적 타입
변수에 타입을 안 적어도 돌아가서, 잘못된 값이 늦게(실행 중에) 발견된다.
FastAPI는 타입 힌트(user_id: int)를 적극적으로 쓴다. 에디터 자동완성·정적 검사가 되고, 요청 값 검증까지 이어진다.
환경 관리
“내 컴퓨터에선 되는데?” — 파이썬 버전·패키지 버전이 사람마다 달라지기 쉽다.
uv나 venv로 프로젝트마다 가상 환경을 두고, 의존성 파일(pyproject.toml)을 커밋한다. 7편에서 다룬다.
CPU 병렬 처리
한 프로세스 안에서 여러 CPU 코어를 동시에 쓰기 어렵다(GIL).
API 서버는 워커 프로세스를 여러 개 띄워 해결한다(fastapi run --workers 4). 최신 파이썬에는 GIL을 끈 빌드도 나왔다.
3. 파이썬 3대 웹 프레임워크 — Django, Flask, FastAPI
파이썬으로 웹 서버를 만든다고 하면 보통 세 후보가 나온다.
항목
Django
Flask
FastAPI
처음 나온 해
2005
2010
2018
성격
배터리 포함형 — ORM·관리자 화면·인증·템플릿까지
최소형 — 필요한 것만 골라 붙임
API 특화형 — 검증·문서·비동기를 기본으로
요청 검증
DRF Serializer 별도 작성
확장 라이브러리 필요
타입 힌트 + Pydantic으로 자동
API 문서
DRF + 추가 패키지
확장 라이브러리 필요
/docs·/redoc 자동 생성
비동기
부분 지원
부분 지원
처음부터 지원
잘 맞는 곳
관리자 화면이 필요한 웹서비스, 콘텐츠 사이트
작은 웹앱, 빠른 시제품
프론트엔드·앱과 JSON으로 대화하는 API 서버, AI 모델 서빙
GitHub 스타 (2026-09-27)
약 9.1만
약 7.5만
약 10.3만
FastAPI는 가장 늦게 나왔지만 GitHub 스타 수로는 셋 중 가장 많다. 이유는 시대 변화에 있다. 2010년대 중반 이후 웹의 구조가 “서버가 HTML을 만들어 보내는 방식”에서 “React·Vue·모바일 앱이 화면을 그리고, 서버는 JSON API만 제공하는 방식”으로 바뀌었다. 서버의 역할이 API로 좁혀지자, API에 필요한 것(검증·문서·비동기)을 기본으로 주는 프레임워크가 유리해졌다. 여기에 AI 모델을 API로 감싸야 하는 수요가 2023년 이후 폭발했다.
4. 다른 언어와 비교 — 같은 API를 여섯 가지로
말로 비교하는 것보다 코드를 보는 편이 빠르다. 아래 위젯은 똑같은 API — GET /users/{id}: id가 정수인지 확인하고 JSON을 돌려준다 — 를 여섯 프레임워크로 짠 코드다. 탭을 눌러 코드와 ‘기본으로 해 주는 일’을 비교해 보자.
위젯에서 눈여겨볼 점은 코드 길이가 아니라 “id가 정수가 아니면?”을 누가 처리하느냐다.
Express·Gin: 개발자가 직접 Number(...)나 strconv.Atoi(...)로 바꾸고, 실패하면 에러 응답 모양까지 직접 정한다. 팀원 다섯 명이 API 다섯 개를 만들면 에러 모양이 다섯 가지가 되기 쉽다.
Spring Boot: 타입 변환은 해 주지만, 파일 구조·빌드 설정·어노테이션을 먼저 이해해야 한다. 대규모 조직에서는 이 형식이 오히려 장점이다.
FastAPI: user_id: int 한 줄로 변환·검증·문서화가 끝난다. 잘못된 값이 오면 항상 같은 모양의 422 응답이 나간다. 팀 규칙을 코드가 강제하는 셈이다.
언어별 특징을 표로 정리하면 이렇다.
항목
Python · FastAPI
Node.js · Express/NestJS
Java · Spring Boot
Go · Gin
첫 API까지 걸리는 시간
파일 1개, 몇 분
파일 1개, 몇 분
프로젝트 생성·빌드 설정 필요
파일 1개, 모듈 설정
타입 안정성
타입 힌트(선택) + 실행 시 검증
TypeScript 선택 시 컴파일 검사
컴파일 시 강제
컴파일 시 강제
실행 성능
보통 (I/O 대기 위주면 충분)
보통~좋음
좋음
매우 좋음
자동 API 문서
기본 내장
NestJS는 플러그인, Express는 수동
springdoc 추가
swaggo 주석 + 생성
AI·데이터 연동
가장 쉬움 (같은 언어)
SDK는 있으나 데이터 도구 부족
별도 서비스로 분리하는 경우 많음
별도 서비스로 분리하는 경우 많음
대표적인 쓰임
AI 서비스, 사내 API, 스타트업 백엔드
풀스택 JS 팀, 실시간 서비스
금융·공공·대기업 시스템
인프라 도구, 고성능 게이트웨이
5. FastAPI를 만드는 세 기둥
FastAPI는 바닥부터 새로 만든 프레임워크가 아니다. 검증된 두 라이브러리 위에 “파이썬 타입 힌트”라는 접착제를 바른 구조다.
FastAPI 타입 힌트를 읽어 라우팅·검증·문서를 한 번에 연결
↓
Starlette 요청을 받고 응답을 보내는 웹 엔진 (비동기 ASGI)
Pydantic 데이터 모양을 선언하고 검증·변환하는 라이브러리
OpenAPI API 명세 표준 — /docs 화면의 원천
핵심은 한 번 적은 타입 정보가 세 곳에서 재사용된다는 점이다.
python
@app.get("/users/{user_id}")defread_user(user_id: int): # ← 이 int 하나가return {"id": user_id, "name": "홍길동"}
검증: /users/abc로 요청하면 함수를 실행하기 전에 422 에러를 돌려준다.
변환: 주소에서 온 문자열 "42"를 정수 42로 바꿔서 함수에 넘긴다.
문서: /docs 화면에 “user_id: integer, 필수”라고 자동으로 표시한다.
다른 프레임워크에서는 이 세 가지를 각각 따로 쓰고, 셋이 서로 어긋나지 않게 사람이 관리해야 한다. 코드는 바뀌었는데 문서는 안 바뀌는 사고가 여기서 난다. FastAPI에서는 코드가 곧 문서라서 어긋날 수가 없다. 협업하는 팀이 FastAPI를 좋아하는 가장 큰 이유다.
6. FastAPI를 고르지 말아야 할 때
좋은 도구 소개는 “언제 쓰지 말라”도 알려 줘야 한다.
이런 상황이라면
더 나은 선택
이유
관리자 화면, 회원 가입, 게시판이 한꺼번에 필요한 웹사이트
Django
관리자 페이지·인증·ORM이 기본으로 들어 있어 만드는 양이 훨씬 적다.
초당 수만 건을 처리하는 게이트웨이, CPU 연산이 많은 서버
Go, Rust
실행 성능과 메모리 효율이 한 단계 위다.
회사 표준이 Java이고 수백 명이 같은 코드베이스를 만진다
Spring Boot
엄격한 구조와 거대한 생태계, 사내 인력 풀이 이미 있다.
프론트엔드 팀이 서버까지 같이 맡는다
Node.js (NestJS, Next.js API)
언어를 하나로 통일하면 타입·코드를 공유할 수 있다.
AI 모델·데이터 처리를 API로 제공한다, 사내 도구 API가 필요하다
FastAPI
같은 언어로 모델과 API를 잇고, 문서가 자동이라 협업이 빠르다.
7. 어떤 파이썬 버전으로 돌릴까
“파이썬 깔려 있는데 그냥 쓰면 되지 않나요?”라는 질문이 가장 많다. 결론부터 말하면 새 프로젝트는 Python 3.13을 기본으로 하고, 팀 전원이 같은 버전을 쓰도록 고정하는 것을 권한다. 이유를 차례로 보자.
7-1. 파이썬 버전은 5년 동안 지원된다
파이썬은 매년 10월에 새 버전(3.x)이 나온다. 각 버전은 처음 약 2년 동안 버그 수정을 받고(bugfix), 그다음 3년은 보안 수정만 받다가(security), 출시 5년 뒤 지원이 끝난다(end-of-life, EOL). 지원이 끝난 버전은 보안 구멍이 발견돼도 고쳐지지 않고, 라이브러리들도 하나둘 설치를 막는다.
2026년 9월 27일 기준 상태와, 이 시리즈의 예제(7편의 테스트 8개 + 6편의 PATCH 검증)를 버전마다 직접 돌려 본 결과다.
버전
출시
지원 종료
현재 단계
FastAPI 0.141 설치 · 예제 실행
권장
3.9
2020-10
2025-10 (종료됨)
지원 끝
설치 불가 — 조용히 옛 버전(0.128.8)이 깔리고 예제가 에러
쓰지 않는다
3.10
2021-10
2026-10 (다음 달)
보안 수정만
통과
지금 올린다
3.11
2022-10
2027-10
보안 수정만
통과
기존 프로젝트는 유지 가능
3.12
2023-10
2028-10
보안 수정만
통과
기존 프로젝트는 유지 가능
3.13
2024-10
2029-10
버그 수정
통과
새 프로젝트 기본값
3.14
2025-10
2030-10
버그 수정 (최신)
통과 (GIL 없는 3.14t도 통과)
쓰는 라이브러리가 모두 지원하면 OK
3.15
2026-10-01 예정
2031-10
출시 전 (프리릴리스)
설치 실패 — 의존성(PyYAML) 빌드 에러
출시 후 몇 달 기다린다
남은 지원 기간을 막대로 보면 차이가 더 분명하다(2026년 9월 기준, 한 버전의 전체 지원 기간 60개월을 100%로).
3.10
약 1개월
3.11
13개월
3.12
25개월
3.13
37개월
3.14
49개월
7-2. 왜 3.13인가 — 가장 새것이 아니라 “가장 무난한 것”
버그 수정 단계다. 보안 수정만 받는 3.11·3.12와 달리 일반 버그도 아직 고쳐진다.
나온 지 2년 가까이 됐다. PyTorch·pandas·NumPy 같은 AI·데이터 라이브러리가 모두 미리 빌드된 설치 파일(wheel)을 제공한다. 3.14도 지원은 넓어졌지만, 오래된 사내 라이브러리나 C 확장이 있으면 3.13 쪽이 사고가 적다.
2029년 10월까지 지원된다. 지금 시작한 프로젝트가 한동안 버전 걱정 없이 간다.
모든 의존성이 3.14를 지원한다는 게 확인되면 3.14를 써도 좋다. 이 시리즈의 예제는 3.14에서도 모두 통과했다. 반대로 3.10을 쓰고 있다면 다음 달(2026년 10월)에 지원이 끝나니 올릴 계획을 세우자.
7-3. 오래된 버전의 함정 — 에러 없이 옛 FastAPI가 깔린다
3.9에서 pip install "fastapi[standard]"를 실행하면 에러가 나지 않는다. pip이 3.9를 지원하는 마지막 FastAPI(0.128.8)를 조용히 골라 설치하기 때문이다. 문제는 그다음이다. 이 시리즈의 코드를 실행하면 이렇게 멈춘다(실제 출력).
text
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'
str | None 같은 타입 표기는 3.10부터 생긴 문법이기 때문이다. 튜토리얼 코드가 안 돌 때 가장 먼저 python --version을 확인해야 하는 이유다.
⚠️
“최신이 좋다”의 반대 함정도 있다. 출시 직전인 3.15 프리릴리스에 FastAPI를 설치해 보면 의존성 중 하나(PyYAML)가 아직 이 버전용 설치 파일을 내지 않아 소스 빌드를 시도하다 실패한다. 새 버전이 나와도 라이브러리들이 따라오는 데 몇 달이 걸린다. 팀 프로젝트는 출시 후 반년쯤 지난 버전부터 검토하는 것이 안전하다.
7-4. 버전별로 FastAPI 코드에 영향을 주는 변화
버전
FastAPI 개발자에게 의미 있는 변화
3.10
str | None 같은 타입 표기(이 시리즈 전체가 쓴다), match 문
3.11
인터프리터가 크게 빨라짐(공식 발표 기준 3.10 대비 평균 1.25배), 에러 메시지에 문제 위치 표시, datetime.UTC
3.12
제네릭·타입 별칭 문법(type 문), f-string 제약 완화, 더 친절한 에러 메시지
3.13
새 대화형 셸(여러 줄 편집·색상), GIL 없는 실험 빌드 첫 등장
3.14
GIL 없는(free-threaded) 빌드 공식 지원, 타입 힌트의 지연 평가, 템플릿 문자열(t-string)
💡
GIL 없는 3.14t는 필요할까? 이 시리즈의 테스트는 3.14t(GIL 비활성)에서도 모두 통과했다. 하지만 FastAPI 서버는 보통 워커 프로세스를 여러 개 띄워 CPU 코어를 쓰므로, 입문·일반 API 서버라면 일반 빌드로 충분하다. CPU를 많이 쓰는 파이썬 코드를 한 프로세스 안에서 병렬로 돌려야 할 때 검토하자.
7-5. 팀 전원이 같은 버전을 쓰게 고정하기
“내 컴퓨터에서는 되는데요”의 절반은 파이썬 버전 차이다. 버전을 파일로 고정해 커밋하자. uv를 쓰면 두 줄이면 된다.
bash
uv init --python 3.13 todo-api # 프로젝트 생성 + 버전 지정cd todo-api
uv python pin 3.13 # 나중에 바꿀 때 (.python-version 갱신)
그러면 두 파일이 생긴다. 둘 다 Git에 커밋한다.
파일
내용
역할
.python-version
3.13
이 폴더에서 쓸 정확한 버전. uv가 없으면 자동으로 받아 설치한다
pyproject.toml
requires-python = ">=3.13"
이 프로젝트가 허용하는 최소 버전. 더 낮은 버전에서는 설치를 거부한다
uv는 파이썬 자체도 설치·관리해 주므로, 팀원 컴퓨터에 어떤 파이썬이 깔려 있든 uv sync 한 번이면 같은 버전·같은 패키지 환경이 만들어진다. 프로젝트 파일 구성은 7편에서 자세히 다룬다.
8. 다음 편을 위한 준비물
2편부터는 직접 코드를 돌린다. 미리 준비해 두면 좋다.
준비물 체크리스트
✅ 파이썬 3.13 권장 (최소 3.10) — 3.10은 FastAPI 최신판(0.141)이 요구하는 최소 버전이지만 2026년 10월에 지원이 끝난다. 터미널에서 python3 --version으로 확인
✅ 코드 에디터 — VS Code + Python 확장이면 타입 힌트 자동완성을 바로 누릴 수 있다
✅ 가상 환경 도구 — 기본 내장 venv 또는 파이썬 설치까지 관리해 주는 uv(권장)
✅ 웹 브라우저 — /docs 화면을 여는 데 쓴다. 별도 API 테스트 도구는 없어도 된다
출처와 기준. 언어·프레임워크 사용 비율은 2025 Stack Overflow Developer Survey(전체 응답자 기준)에서 옮겼다. GitHub 스타 수는 2026년 9월 27일 GitHub API로 조회한 값을 반올림했다(fastapi/fastapi 102,642 · django/django 91,201 · gin-gonic/gin 89,265 · spring-projects/spring-boot 81,510 · nestjs/nest 76,739 · pallets/flask 74,788 · expressjs/express 69,486). 스타 수는 인기의 한 단면일 뿐 실제 사용량과는 다르다. 비교표의 ‘학습 부담’·‘잘 맞는 곳’ 등 정성 평가는 필자의 판단이다. 이 시리즈의 모든 예제는 FastAPI 0.141.1 · Pydantic 2.13 · Python 3.11에서 실행해 확인했다. 삽화는 코어닷투데이가 생성했다.