WEEK 1 · 프레임워크 비교

FastAPI vs Flask
전체 MVP 구현 기준 비교

현재 페이지는 두 층을 분리해 보여줍니다. Dashboard 집계·위험 이벤트 검색·정비 조치 추천 등 대표 기능 3개를 FastAPI와 Flask에 실제로 동일 구현해 기능·검증·성능을 대칭 비교했고, 전체 162개 OpenAPI 경로·172개 HTTP 작업은 FastAPI 제품 구현 현황과 Flask route mirror 범위를 구분해 표시합니다.

실제 서비스 162경로 Swagger 비교 화면 Swagger FastAPI /health Flask /health 프록시 FastAPI 대표 Dashboard API Flask 대표 Dashboard API FastAPI 위험 검색 API Flask 위험 검색 API 대표 기능 3종 실측 JSON 162경로 전수 비교 JSON 전체 비교 JSON
전체 API 표면162개 경로172개 HTTP 작업
인증 전수 프로브172 / 172200 34건 · 403 36건 · 404 9건 · 422 83건 · 503 10건
처리되지 않은 오류0건SQLite에서 PostgreSQL 전용 503 10건은 명시적인 기능 제한 응답
기준선 실험GET /health
FastAPI 확인 중
Flask 확인 중
비교 범위 구분
대표 기능 3개는 같은 GS fixture, 같은 risk snapshot, 같은 업무 함수를 양쪽에 연결한 실제 대칭 비교입니다. 반면 전체 172개 작업은 FastAPI에만 제품 업무 로직이 있고 Flask에는 route mirror만 있으므로, 전체 성능을 양쪽이 모두 구현한 것처럼 표현하지 않습니다.

1. 서로 다른 대표 기능 3개 실제 양방향 구현

/app/projects/manufacturing-demo-project의 주요 사용 패턴을 반영해 ① 집계·중첩 JSON, ② 필터·정렬·페이지네이션, ③ POST body 검증·업무 판단이라는 서로 다른 성격의 기능을 비교했습니다.

대표 기능3개GET 2개 · POST 1개
정상 응답 계약3/3 일치canonical SHA-256 비교
FastAPI 3개 성능 평균4.91/5
Flask 3개 성능 평균4.92/5
GET

제조 Dashboard 집계

/benchmark/manufacturing-dashboard?risk_threshold=0.0&limit=8

Aggregate eight risk events, line summaries and sensor series

응답일치
FastAPI4.92/5
Flask4.94/5
GET

위험 이벤트 검색·필터

/benchmark/risk-events?risk_threshold=0.6&status=warning&sort=probability_desc&limit=5&offset=0

Filter, sort and paginate product risk events

응답일치
FastAPI4.9/5
Flask4.96/5
POST

정비 조치 추천

/benchmark/maintenance-recommendation

Validate a POST body and apply a deterministic maintenance rule

응답일치
FastAPI4.9/5
Flask4.86/5
대표 기능프레임워크순차 p50순차 p95순차 RPS동시 p50동시 p95동시 p99동시 RPS오류율기능 점수
제조 Dashboard 집계FastAPI3.4082ms3.823ms274.567.8964ms17.8237ms20.7399ms1001.270.0%4.92/5
제조 Dashboard 집계Flask3.3705ms3.6115ms276.058.0787ms18.2752ms23.4696ms979.180.0%4.94/5
위험 이벤트 검색·필터FastAPI3.3308ms3.6527ms278.967.9047ms17.3627ms18.7136ms999.00.0%4.9/5
위험 이벤트 검색·필터Flask3.2242ms3.5578ms287.497.4828ms17.9439ms20.3548ms1026.440.0%4.96/5
정비 조치 추천FastAPI3.3172ms3.6473ms279.217.8068ms17.616ms20.3067ms1010.780.0%4.9/5
정비 조치 추천Flask3.2191ms3.4648ms286.918.2141ms19.0106ms21.69ms973.310.0%4.86/5

각 기능마다 서버를 별도 프로세스로 실행하고 순차 300회 × 3라운드, 동시성 10도 같은 횟수로 요청했습니다. 기능과 라운드마다 FastAPI 우선·Flask 우선 순서를 교차했고, 두 서버 모두 매 요청 새 연결을 사용했습니다. 환경: macOS-27.0-arm64-arm-64bit-Mach-O · Python 3.14.6.

대표 기능프레임워크Adapter 코드량검증·계약 구현
제조 Dashboard 집계FastAPI15 LOC선언형 query/body 검증·response_model·OpenAPI
제조 Dashboard 집계Flask33 LOC수동 query parser·Pydantic 호출·오류 응답
위험 이벤트 검색·필터FastAPI23 LOC선언형 query/body 검증·response_model·OpenAPI
위험 이벤트 검색·필터Flask56 LOC수동 query parser·Pydantic 호출·오류 응답
정비 조치 추천FastAPI12 LOC선언형 query/body 검증·response_model·OpenAPI
정비 조치 추천Flask13 LOC수동 query parser·Pydantic 호출·오류 응답

오류·경계값 계약 검증

기능검증 사례기대 HTTPFastAPIFlask결과
manufacturing_dashboardlimit below minimum422422422일치
risk_event_searchunsupported sort value422422422일치
risk_event_searchvalid empty result200200200일치
maintenance_recommendationinvalid operator role422422422일치
maintenance_recommendationunknown event404404404일치

입력 범위 초과, 지원하지 않는 정렬값, 정상적인 빈 검색 결과, 잘못된 POST enum, 존재하지 않는 이벤트 등 5개 사례를 확인했습니다. 상태 계약은 모두 일치했습니다. 기능별 네 성능 지표를 같은 비중으로 계산한 후 세 기능을 다시 평균한 결과는 FastAPI 4.91/5, Flask 4.92/5입니다. 운영 환경 벤치마크가 아니라 로컬 framework·server stack 비교이며 원격 DB와 외부 모델 호출은 제외했습니다.

2. 프레임워크별 실제 테스트 결과와 장단점

대표 기능 3개는 양쪽 모두 실제 구현했습니다. 전체 제품 수준에서는 FastAPI 172개 업무 작업과 Flask 3개 대표 업무 API + 172개 route mirror를 구분해 평가합니다.

최종 선택

FastAPI

99.55/100

실제 테스트 결과

  • 실제 업무 핸들러 172개 실행
  • OpenAPI 172개 자동 생성
  • 요청 검증 대상 147개
  • JSON 응답 런타임 검증 168개
  • 인증 전수 프로브 처리되지 않은 5xx 0건
  • 대표 기능 3개 성능 평균 4.91/5

장점

  • typed router·의존성 주입·Pydantic을 이용해 큰 API 구조를 일관되게 구성할 수 있습니다.
  • 코드·검증·Swagger 문서가 하나의 계약을 공유합니다.
  • 잘못된 입력과 응답 계약 불일치를 런타임에서 탐지합니다.

단점

  • 대표 기능별로 프레임워크 우위가 달라 환경에 따른 성능 변동을 고려해야 합니다.
  • Pydantic 모델과 타입 계약을 지속적으로 관리해야 합니다.
비교 대상

Flask

69.6/100

실제 테스트 결과

  • 라우트 미러 172개 등록 성공
  • 대표 업무 API 3개 실제 구현
  • 기본 구성 자동 OpenAPI·요청 검증·응답 Schema 0개
  • 대표 기능 3개 성능 평균 4.92/5

장점

  • 세 기능의 3라운드 성능 평균으로 단일 endpoint보다 신중하게 비교했습니다.
  • 필요한 기능만 선택해 붙이는 유연성이 있습니다.

단점

  • 큰 API에서는 프로젝트 구조와 확장 도구 조합을 별도로 설계해야 합니다.
  • OpenAPI·Schema·요청 및 응답 검증은 기본 제공되지 않아 별도 구성이 필요합니다.
  • 대표 API 외 전체 업무 애플리케이션은 구현하지 않아 172개 전체의 성능은 직접 비교하지 못했습니다.

3. 어떤 요소에 더 큰 비중을 뒀는가

네 항목을 동일하게 평가했습니다. 개발 생산성·API 계약 자동화·검증 안정성·대표 업무 API 성능에 각각 25%를 배정했습니다. 성능은 각 기능의 순차 p95·처리량과 동시성 10 p95·처리량을 같은 비중으로 계산한 뒤 세 기능 평균을 사용했습니다.
FastAPI 가중 합계99.55 / 100개발 구조·계약·검증에서 우세
Flask 가중 합계69.6 / 100대표 업무 API 성능에서 근소 우세
평가 요소가중치실제 테스트 결과FastAPI 평가Flask 평가
개발 완성도와 구현 생산성25%서로 다른 대표 기능 3개(제조 Dashboard 집계, 위험 이벤트 검색·필터, 정비 조치 추천)의 HTTP adapter를 실제 구현한 결과 FastAPI는 50 LOC, Flask는 수동 query·body 검증을 포함해 80 LOC였습니다. FastAPI 전체 제품은 별도로 172개 업무 작업을 실행합니다.5/525점 반영

세 기능에서 query·body 제약과 응답 계약을 route 선언에 함께 표현해 adapter 코드가 더 짧았습니다.

3/515점 반영

route 자체는 단순하지만 동일한 query·POST 검증과 오류 계약을 맞추기 위한 수동 코드가 추가됐습니다.

API 계약과 문서 자동화25%FastAPI는 OpenAPI 172개, JSON 성공 응답 Schema 168개, binary·SSE 계약 2개, no-content 계약 2개를 생성했습니다. bare Flask 자동 생성 결과는 0개입니다.5/525점 반영

라우터 코드와 Swagger 문서가 같은 계약을 사용해 변경 누락 위험이 작습니다.

2/510점 반영

확장 라이브러리를 사용하면 구현할 수 있지만 bare Flask 기본 구성에는 포함되지 않습니다.

요청·응답 검증과 오류 안전성25%대표 기능 3개의 정상 응답 JSON과 SHA-256이 모두 일치했고, 입력·빈 결과·존재하지 않는 이벤트를 포함한 5개 검증 사례에서 HTTP 상태도 일치했습니다. FastAPI는 Query·Pydantic body constraint와 response_model로 자동 검증했고 Flask는 같은 결과를 수동 parser와 Pydantic 호출로 구현했습니다. 전체 FastAPI에서는 요청 검증 147개, JSON 응답 검증 168개, 미처리 5xx 0건을 확인했습니다.5/525점 반영

잘못된 입력과 구현·응답 계약 불일치를 실행 중에 바로 탐지합니다.

4/520점 반영

세 대표 기능의 오류 상태는 동일했지만 query·body·응답 검증을 route마다 수동 연결해야 합니다.

대표 업무 API 성능과 경량성25%대표 기능 3개를 각각 별도 HTTP 프로세스에서 순차·동시성 10으로 3라운드 교차 측정했습니다. 기능별 점수는 제조 Dashboard 집계 FastAPI 4.92/5, Flask 4.94/5 · 위험 이벤트 검색·필터 FastAPI 4.9/5, Flask 4.96/5 · 정비 조치 추천 FastAPI 4.9/5, Flask 4.86/5이며, 세 기능 평균은 FastAPI 4.91/5, Flask 4.92/5입니다. 모든 정상 부하의 오류율은 0%였습니다.4.91/524.55점 반영

세 기능의 순차 p95·처리량과 동시성 p95·처리량을 같은 비중으로 계산한 평균을 반영했습니다.

4.92/524.6점 반영

세 기능별 동일 지표를 측정하고 기능 평균을 계산해 단일 API 우연성의 영향을 줄였습니다.

4. FastAPI 전체 제품 구현 현황과 Flask 구성 범위

아래 표는 전체 제품 성능의 대칭 비교가 아닙니다. FastAPI의 실제 제품 구현 범위와 Flask에서 같은 URL 구조가 등록되는지, 추가로 어떤 기능을 구성해야 하는지 보여주는 범위 분석입니다.

프레임워크API 표면업무 핸들러자동 OpenAPI요청 자동 검증성공 응답 계약응답 런타임 검증전수 프로브추가 업무 구성
FastAPI최종 선택162개 경로 / 172개 작업전체 제품 업무 핸들러 172개172147JSON 168 · binary/SSE 2 · no-content 21681720
Flask라우트 미러162개 경로 / 172개 작업전체 제품 업무 핸들러 0개0000172172

5. 참고: 동일 `/health` 최소 응답 비교

/health는 최소 framework overhead를 살펴보는 이전 기준선입니다. 최종 성능 평가는 위의 대표 기능 3개 실제 HTTP 측정을 사용합니다. 마지막 열은 3번 평가표의 네 점수를 평균한 종합점수입니다.

프레임워크HTTP응답 일치OpenAPI응답 Schema코드 줄 수p50*p95*종합 평균*
FastAPI최종 선택200일치자동 생성선언·검증3줄0.7603ms1.7285ms4.98/54개 평가 요소 평균
Flask비교 대상200일치기본 미제공수동 처리3줄0.0766ms0.1235ms3.48/54개 평가 요소 평균
최종 선정

최종 선택: FastAPI

개발 생산성·계약 자동화·검증 안정성·대표 업무 API 성능 네 항목을 각각 25%로 동일하게 평가했습니다. Dashboard 집계·위험 검색·정비 추천 등 대표 기능 3개를 양쪽에 실제 구현한 결과까지 반영했으며, FastAPI는 adapter 코드량·계약 자동화·검증에서 앞서 FastAPI 99.55점, Flask 69.6점으로 FastAPI를 선택했습니다. 이번 결론은 기존 코드를 옮기는 비용이 아니라 새 제품을 구축할 때의 개발 방식과 기본 제공 기능을 기준으로 한 판단입니다.

Flask가 우세한 부분: 대표 기능 3개의 평균 성능 점수와 작은 framework의 단순성입니다.

FastAPI가 우세한 부분: 대표 기능 3개의 총 adapter 코드량, 자동 계약·검증과 전체 제품 구조화입니다.

대표 기능 3개는 FastAPI와 Flask에 동일하게 구현했지만, 전체 172개 제품 업무 작업을 Flask로 다시 구현한 것은 아닙니다. 성능 값은 로컬 Mac loopback과 각 프레임워크의 로컬 서버 stack을 포함한 측정이며 운영 환경 성능을 보장하지 않습니다.