디폼블럭 메이커 앱 서비스(fastapi 백엔드, python 프론트앤드)
- ai 모델을 가지고 추론하는 기능이 있는 python 앱을 “빌드”하거나 “서비스”하는 경험원래는 빌드를 해보려고 했습니다. 다른 프로그램(예를 들어 ffmpeg.exe를 수동으로 넣어서 로드하는)의 경우 제가 하는 법을 깨우쳐서 해봤던 경험이 있어서 비슷하게 풀어가려고 했었는데요, 두 가지 만만치 않은 문제가 있었습니다. pyinstaller가 빌드할 파일에 .dll이나 .pyd 등 중요한 파일들을 누락해서 그걸 일일이 찾아서 빌드설정에 넣어주는 게 까다롭습니다. 그리고 파이썬의 라이브러리끼리 상호 의존하는 경우가 숨겨져있는 경우가 많습니다. 그 경우 또 찾아서 hidden import 해주어야 합니다. 또한 onefile로 빌드를 하게 되면 MEIPASS 라는 임시 경로가 생기는데 거기에서 서로 참조를 끊기지 않도록 연결해주는 게 꽤나 까다롭습니다.
- onnx 인공지능 모델을 사용하기 위해 메모리에 올릴 때 다소 시간이 걸립니다. 이 시간을 gui가 있는 앱에서 기다려줘야 하는데 이게 잘 안되더라구요. 초기 모델 로드 시간이 문제입니다.
- 그래서 qt5 나 가벼운 라이브러리를 사용하는 client.exe 앱, 그리고 거기서 사용하는 모델사용하는 sdk.exe를 따로 만들까 하다가, 이것도 사용자 관점에서는 100mb가 넘어가는 sdk.exe를 가지고 다니는게 부담이 될 것 같고, 또 임시방편인 듯 하여, 프론트, 서버로 나누기로 했습니다. 서버에서는 모델을 한번만 로드해놓고 계속 놔두면 되니까요. ㅎㅎ
- 백엔드로 보내니 client가 원래는 150mb였던게 40mb로 줄었습니다. 그리고 나머지는 서버로 갔죠.제 quirkalab 도메인에 클라우드플레어 터널을 만들어서 연결해놨습니다.
- 그리고 터널 바로 뒤에 node.js로 엣지프록시 서버를 열었습니다. 이 서버의 역할은 봇과 악성 접근을 차단하고 의도한 접근만 통과시키도록 하는 역할입니다.
- 엣지프록시 서버 뒤에는 fastapi 서버의 엔드포인트가 있습니다. 이 서버로는 로드해놓은 ai 모델로 업로드한 사진의 배경제거를 하고 돌려주는 역할을 합니다.
- 이 세 가지를 도커 네트워크에 올려서 라운드 로빈(round-robin)으로 엣지서버2개, fastapi서버 4개를 생성해서 올렸습니다. 라운드로빈이란 프로세스들 간 우선순위 없이 일을 할당하는 방법입니다. 저는 job-queue를 구현하지 않았기 때문에 최소한의 스케일아웃으로 라운드로빈을 조치해놓기로 했던 겁니다. 이용자수가 늘어나면 로그인서버를 붙이고 job-queue도 구현해야겠죠. ㅎㅎ
제 시연 영상도 시청해주세요.
[영상]
[영상]
프로그램 아래에 광고를 넣을 수 있도록 공간도 마련해두었습니다.ㅎㅎ 어디서든 연락이 오면 좋겠네요. ㅎㅎ
#python_디폼블럭_도안_반자동생성_서버_클라이언트_프로그램
#디폼블럭 #디폼블럭도안 #블럭도안제작 #도안생성 #블럭아트 #블럭프린트 #블럭디자인 #픽셀아트 #조카선물 #클레이피아 #AI #AI도안생성 #AI배경제거 #인공지능 #Python #FastAPI #PyQt5 #ONNX #ONNXRuntime #PyInstaller #Python앱 #AI앱 #모델서빙 #API서버
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

