가장 좋은 구조는 다음과 같습니다.
Flutter App
↓ HTTP / REST API
Python Server
↓
DB / AI / 파일 / 장비 데이터
즉,
Flutter = 화면, 앱, 사용자 입력
Python = 서버, API, AI, 데이터 처리
이렇게 역할을 나누는 방식입니다.
1. Flutter는 Dart로 개발
Flutter 앱 화면은 Dart로 작성합니다.
예를 들어 Flutter에서 버튼을 만들면 다음과 같습니다.
ElevatedButton(
onPressed: () {
print('조회 버튼 클릭');
},
child: Text('조회'),
)
Flutter 앱 안에서 Python 코드를 그대로 작성하는 구조는 아닙니다.
2. Python은 백엔드 서버로 사용
Python은 FastAPI, Flask, Django 등을 사용해서 API 서버를 만들 수 있습니다.
FastAPI 공식 문서는 Python 타입 힌트 기반으로 API를 만드는 고성능 웹 프레임워크라고 설명합니다.
예를 들어 Python FastAPI 서버는 이렇게 만들 수 있습니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/api/items")
def get_items():
return [
{"itemCode": "A001", "itemName": "제품 A"},
{"itemCode": "B001", "itemName": "제품 B"}
]
Flutter 앱은 이 API를 호출해서 데이터를 가져옵니다.
final response = await http.get(
Uri.parse('http://서버주소/api/items'),
);
3. MES Lite 기준 구조
MES Lite를 Flutter와 Python으로 만든다면 구조는 이렇게 잡는 것이 좋습니다.
Flutter App
├─ 로그인
├─ 작업지시 조회
├─ 생산실적 등록
├─ 불량 등록
├─ LOT 조회
└─ 바코드/카메라
Python API Server
├─ 로그인 인증
├─ 작업지시 API
├─ 생산실적 저장 API
├─ 불량 저장 API
├─ LOT 추적 API
└─ 파일 업로드 API
Database
├─ MariaDB
└─ MS SQL Server
추천 구조는 다음과 같습니다.
Flutter App
↓
Python FastAPI / Flask
↓
MariaDB / MS SQL Server
4. Python을 Flutter 앱 내부에서 실행할 수 있나?
일부 패키지를 사용하면 Flutter 앱 안에 Python 실행 환경을 포함하는 방식도 있습니다. 예를 들어 serious_python 같은 패키지는 Flutter 앱 안에서 Python 백엔드 서비스를 호스팅하고, Flutter가 REST API, 소켓, SQLite, 파일 등을 통해 Python 환경과 통신하는 방식을 설명합니다.
하지만 실무에서는 권장 우선순위가 낮습니다.
이유는 다음과 같습니다.
| Flutter + Python API 서버 | 구조 명확, 유지보수 쉬움 | 서버 필요 |
| Flutter 앱 내부 Python 실행 | 오프라인 가능성 | 빌드/배포/성능/호환성 복잡 |
| Flutter + Firebase | 빠른 앱 개발 | 제조업 업무 로직에는 한계 |
| Flutter + 직접 DB 접속 | 단순해 보임 | 보안상 비추천 |
제조업 MES, ERP, FEMS 같은 업무 시스템은 앱 내부에 Python을 넣는 방식보다 Python API 서버를 두는 방식이 훨씬 안정적입니다.
5. Python + Flutter 개발 순서
1단계: Python API 서버 만들기
먼저 API를 만듭니다.
GET /api/items
GET /api/workorders
POST /api/production/result
POST /api/defect
GET /api/lot/{lotNo}
2단계: Flutter에서 API 호출
Flutter에서 http 또는 dio 패키지로 API를 호출합니다.
import 'package:http/http.dart' as http;
Future<void> loadItems() async {
final url = Uri.parse('http://127.0.0.1:8000/api/items');
final response = await http.get(url);
if (response.statusCode == 200) {
print(response.body);
} else {
print('조회 실패');
}
}
주의할 점은 Android 에뮬레이터에서 PC의 localhost를 호출할 때는 보통 127.0.0.1이 아니라 다음 주소를 사용합니다.
http://10.0.2.2:8000
실제 폰에서는 PC 또는 서버의 실제 IP/도메인을 사용해야 합니다.
6. Python이 맡으면 좋은 기능
Flutter 앱과 Python 서버를 같이 쓰면 Python은 다음 기능에 적합합니다.
DB 처리
업무 로직
AI 분석
이미지 분석
파일 업로드
엑셀 처리
PDF 생성
로그 저장
스케줄 작업
장비 데이터 수집
외부 API 연동
특히 AI나 데이터 분석이 들어가면 Python의 장점이 큽니다.
예를 들어 제조업에서는 다음 기능을 Python으로 처리하기 좋습니다.
불량 예측
설비 이상 감지
작업지시 추천
LOT 추적 분석
전력 사용량 분석
이미지 검사
OCR
생산 지연 예측
7. Flutter가 맡으면 좋은 기능
Flutter는 사용자 화면과 모바일 기능에 집중하는 것이 좋습니다.
로그인 화면
메뉴 화면
조회 화면
입력 화면
바코드 스캔
카메라 촬영
푸시 알림
GPS
파일 선택
태블릿 UI
즉, Flutter는 현장 사용자가 직접 조작하는 화면을 담당하고, Python은 데이터와 판단 로직을 담당하는 구조가 좋습니다.
8. 개발 도구 구성
Windows 기준 추천 구성은 다음과 같습니다.
| Flutter 개발 | VS Code 또는 Android Studio |
| Python 서버 | VS Code 또는 PyCharm |
| API 프레임워크 | FastAPI 또는 Flask |
| DB | MariaDB / MS SQL Server |
| API 테스트 | Postman / Swagger |
| 앱 빌드 | Flutter SDK |
| 서버 실행 | Uvicorn / Gunicorn |
| 배포 | Windows Server / Linux Server / Docker |
FastAPI를 사용하면 Swagger 문서가 자동으로 생성되어 Flutter 개발할 때 API 테스트가 편합니다.
결론
Python에서 Flutter를 “직접 사용한다”기보다는, 다음 구조로 개발하는 것이 맞습니다.
Flutter는 Dart로 앱 개발
Python은 API 서버와 AI/DB 처리
둘은 REST API로 연결
MES Lite 같은 시스템이라면 가장 추천하는 구조는 이것입니다.
Flutter App
↓ REST API
Python FastAPI
↓
MariaDB / MS SQL Server
이렇게 만들면 Android 앱, 태블릿 앱, Web 확장, AI 기능까지 비교적 깔끔하게 연결할 수 있습니다.