안녕하세요. DataCPA, Cloud입니다.
오늘은 데이터 분석 기초 시리즈의 열 두 편 중 마지막 글입니다.
이번 시리즈에서는,
1. 우선 파이썬을 이용하기 위해 주피터 노트북을 설치 했고,
2~3. 공공데이터사이트나 API를 통해 데이터를 수집한 다음,
4~5. 전처리와 EDA를 거쳐서,
6~7. 지오코딩을 통해 파생변수를 만들고, 여러 피처 엔지니어링을 수행했습니다.
8~9. 그 결과를 시각화를 통해서 분석해보고, 시각적 분석에 유용한 툴인 PowerBI도 다뤄보았죠.
10. 그 다음으로 드디어 파이썬을 이용한 머신러닝을 통해 모델링까지 하였고,
11. 스트림릿으로 데모 웹페이지용 웹앱을 만들어 수정/보완을 거쳐
12. 오늘 대중에게 배포하는 최종 버전을 만드려고 합니다.
각각의 과정에 대해 링크를 걸어두었으니 모르는 부분이 있으면 가서 확인하시면 좋을 것 같습니다.
여기까지가 데이터를 이용해서 할 수 있는 기본 틀입니다.
물론 각 과정에서 이용할 수 있는 무궁무진한 도구들이 있고, 그 중 매우 작은 부분만을 다루었습니다.
그러나 어떤 툴을 이용하든 이 과정만 그대로 따라오면,
독자분들이 스스로 인식한 문제를 데이터를 기반하여 해결해나가실 수 있을 것입니다.
서론이 길었네요!
오늘 다룰 내용은 저희처럼 빅데이터를 통해 만든 대용량 모델을,
Streamlit Community Cloud와 깃허브를 통하여 대중에게 배포하는 방법입니다.
1. Streamlit Community Cloud를 이용하는 이유: 서버 측 실행환경 제공
빅데이터를 이용하여 모델의 성능을 더 끌어올릴 수록, 필연적으로 이를 웹에서 돌리기에 무거워질 수 밖에 없습니다. 저희가 다른 글에서 다뤘던 Netlify로 배포를 할 경우, 정적 호스팅 방식이기에 웹앱의 사용자가 브라우저에 1GB가 넘는 모델 파일을 직접 다운로드하고 파싱해야 했습니다. 이는 브라우저의 메모리 한계를 초과하게 할 것이고 따라서 웬만한 컴퓨터는 실행이 되지 않을 것입니다.
반면, Streamlit은 서버에서 Python코드를 실행합니다. 따라서 대용량 모델을 서버 메모리에 한 번만 로드하면 되므로 문제없이 처리할 수 있게 됩니다. 사용자는 모델 파일을 직접 다운받지 않아도 웹 인터페이스를 통해 입력값을 보내고 예측 결과만 받을 수 있는 것입니다. 이는 사용자가 휴대폰으로도 가볍게 앱에 접근할 수 있도록 해줍니다.
2. Git 다운로드
Git - Downloads
Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. Latest source Release 2.51.0 Release Notes (2025-08-18) Download Source Code Logos Various Git logos in PNG (bitmap) and EPS (vector) formats are av
git-scm.com
이 사이트로 들어가 이용하는 컴퓨터 운영체제에 맞는 버전으로 Git을 다운로드 받아줍니다.
올리려는 모델이 소형(25MB 이하)이라면 깃허브 홈페이지에 직접 업로드할 수 있습니다. 하지만 이보다 큰 모델은 Git 명령어를 통해 직접 업로드 해야 합니다. 이를 위해서 위 프로그램이 필요한 것입니다.
뭘 받을건지 계속 물어보는데, 앞으로 깃허브를 계속 쓸 것이므로 웬만한건 다 체크해주고 설치하시면 됩니다.
3. JSON파일 형식의 모델 포맷 변환 및 압축
XGBoost 모델은 일반적으로 JSON형태가 일반적입니다. 하지만 이는 텍스트 기반이라 크기가 커질 수밖에 없고, 전송 및 실행이 느려지거나 문제가 발생할 가능성이 증가합니다. 따라서 모델을 더 작고 로드가 빠른 바이너리 포맷인 UBJ(Universal Binary JSON)으로 변환하고, 전송량을 더욱 줄이기 위해 Gzip(.gz)로 추가 압축하여 최종적으로 .ubj.gz 파일을 생성합니다.
아래는 이 작업을 위한 파이썬 코드입니다. 저는 주피터노트북을 이용했는데, 참고하셔서 라이브러리 다운받고, 파일명 변경 뒤 이용하면 됩니다.
| # 셀 1: xgboost 설치 (최신 버전 권장) !pip install -U xgboost # 셀 2: 변환 및 압축 실행 import xgboost as xgb import gzip import shutil import os # 원본 JSON 모델 파일명 SRC = "jeonse_gbm_xgb.json" # 변환될 UBJ 파일명 UBJ = "jeonse_gbm_xgb.ubj" # 최종 압축될 Gzip 파일명 GZ = "jeonse_gbm_xgb.ubj.gz" # 1. JSON 모델 로드 bst = xgb.Booster() bst.load_model(SRC) # 2. UBJ 포맷으로 저장 bst.save_model(UBJ) # 3. UBJ 파일을 Gzip으로 압축 with open(UBJ, "rb") as f_in, gzip.open(GZ, "wb", compresslevel=9) as f_out: shutil.copyfileobj(f_in, f_out) |
4. GitHub CLI(Command Line Interface)를 이용한 대용량 파일 업로드
1) 깃허브에서 레포(repository)를 만들어줍니다.


2) 커밋에 파일 업로드
새로 만든 레포에 들어가면 커밋과 릴리즈라는 두 개의 공간을 볼 수 있습니다.
커밋은 내 레포에 있는 파일들과 그 변동 내역을 관리하는 곳이고,
릴리즈는 배포하고자 하는 최종 파일을 V1.1.0과 같이 버전을 달아 업로드하여 공유하는 곳입니다.
따라서 릴리즈에 아까 압축한 모델 파일을 넣고, 커밋에 나머지 파일들(app.py, requirements.txt, readme.txt)를 업로드하겠습니다.

커밋에서는 직접 파일을 수정할 수 있는데, Add file 버튼을 클릭해 업로드 한 app.py파일을 클릭하면 이런 창이 뜨고, 연필모양을 눌러 수정창으로 들어가면 됩니다.

3) 레포 파일 수정하기
로컬 스트림릿에서 돌릴 때와 다르게, 저희는 모델을 GitHub URL에서 다운받아 이를 서버에서 실행하기로 했으므로, 기존 app.py에서 이 부분을 수정해주어야 합니다. 구체적 수정사항은 아래와 같습니다.
- 모델 URL 지정: GitHub Releases에 업로드 된 .ubj.gz 파일의 다운로드 URL을 MODEL_URL 변수에 지정.
- 다운로드 및 압축 해제: 앱이 시작될 때 모델 파일이 없으면 URL에서 다운로드하고 압축을 해제하여 .ubj파일 생성. 이 과정은 한 번만 실행하고 이후에는 캐시된 파일 사용.
- 모델 로딩: .ubj파일을 xgb.Booster().load_model()로 로드.
- 캐싱: 모델 로딩과 지하철 정보 로딩처럼 무거운 작업은 @st.cache_resource를 사용해 메모리에 캐싱해 앱 성능 높임.
또한, 모델을 URL에서 다운로드 하기 위해 추가로 라이브러리가 필요합니다. 따라서 app.py와 같은 방식으로 requirements.txt 파일을 열고, 수정창에 들어가 아래 항목을 추가해주어야 합니다.
requests>=2.31.0,<3
TIP
이런 수정을 해 줄 땐 항상 정상적으로 작동하던 파일을 백업해주어야 합니다. 저희는 GPT를 통해 코딩을 하기 때문에 GPT가 중간에 길을 잃으면 잘 작동하던 것도 안 될 수 있기 때문입니다. 자주 발생하는 오류로는, 코드 중복, 코드 누락, 기능 누락, 코드 순서 위반 등이 있습니다.
만약 그런 상황이 발생한다면, 간단한 건 바로 고치면 되고, 크게 잘못된 것 같은 경우 정상 작동하던 파일을 업로드해주고 이를 참고해서 수정사항을 다시 반영해달라고 프롬프트를 넣으시면 됩니다.
4) release에 Git 명령어로 대용량 파일 업로드하기
커밋에서 위 사항들을 수행 한 뒤에 release에 모델 압축 파일을 올려줍니다. 이를 위한 명령어는 다음과 같습니다.
아까 다운받은 Git Bash를 열고 실행하면 됩니다.
참고로, Git Bash에서는 ctrl+V가 되지 않으니, 마우스 우클릭하셔서 paste로 붙여넣기 하시면 됩니다.

| gh release create v1.0.2 "C:/Users/LG/Desktop/house_streamlit/jeonse_gbm_xgb.ubj.gz" -t "v1.0.2" -n "model files" -R Jiwoon625/jeonse |
|
설명:
• gh release create v1.0.2: v1.0.2라는 이름의 새 릴리즈를 만듭니다.
• "C:/.../jeonse_gbm_xgb.ubj.gz": 업로드할 파일의 경로입니다. 이 부분은 실제 파일이 있는 경로로 수정해야 합니다.
• -t "v1.0.2": 릴리즈에 사용할 태그(tag) 이름입니다.
• -n "model files": 릴리즈에 붙일 제목입니다.
• -R Jiwoon625/jeonse: 대상 리포지토리(repository)를 지정합니다. 레포에 들어간 첫 화면 주소에서 github.com/다음에 나오는 부분을 복사해서 넣으시면 됩니다. |
5. Streamlit Community Cloud 접속 및 new app 생성
1) 아래 Streamlit Community Cloud 사이트로 들어가 Join Community Cloud 버튼을 눌러줍니다.
https://streamlit.io/cloud
Streamlit Community Cloud • Streamlit
Deploy, manage, and share your Streamlit apps — all for free.
streamlit.io
2) 방금 레포를 만든 깃허브 계정과 연동하여 로그인합니다.
3) 오른쪽 위 Create app 버튼을 누르고, Deploy a public app from GitHub 버튼을 클릭합니다.
4) Repository와 Main file path 입력창을 눌러 방금 만든 레포를 선택하고, app.py를 선택합니다.
5) APP URL은 하고싶은 대로 설정하시면 됩니다.
6) Deploy버튼을 누르시면 드디어 웹앱이 배포됩니다.

6. 실행화면 확인 및 배포


저번 글에서 로컬에서 돌린 앱이 바뀐 설정에 따라 Streamlit Community Cloud에서도 잘 돌아가는 것을 확인할 수 있습니다.
만약 오류가 뜬다면, 페이지 오른쪽 아래에 Manage app을 클릭해서 오류 로그를 확인하고, GPT를 통해 이를 수정하시면 됩니다.
문제가 없다면, 페이지 오른쪽 위에 있는 Share버튼을 누르고, link를 복사하여 공유하고 싶은 대상에게 링크를 전달하면 됩니다!

마무리
이렇게 배포까지 완료하면, 파이썬을 활용한 데이터 분석과 문제해결 과정이 마무리가 됩니다.
여러분은 어떤 문제를, 어떤 데이터로, 어떻게 해결하셨나요?
AI가 기술적인 측면을 맡아주는 만큼, 인간은 자신의 전문분야에 대한 통찰력이 더욱 중요해지고 있습니다.
저는 앞으로도 다양한 문제를 생각해보고, 그것을 해결하기 위해 데이터를 분석해 볼 것입니다.
다음에 또 흥미로운 데이터나 새로운 툴을 갖고 오겠습니다!
'AI & Data analystics > Data' 카테고리의 다른 글
| 스트림릿(streamlit)으로 파이썬 기반 모델 배포하기 | 데이터 분석 기초(11) (1) | 2025.09.30 |
|---|---|
| 서울시 전세 보증금 예측모델 만들기 | 데이터 분석 기초(10): 머신러닝 (0) | 2025.09.29 |
| 서울시 평당 전세 보증금 및 월세 임대료를 높이는 요인 10가지 | 데이터 분석 기초(9)_PowerBI (1) | 2025.09.15 |
| 서울시 10개년(2015~2024) 전월세 거래 분석 시각화 (feat. PowerBI) | 데이터분석 기초(8) (1) | 2025.09.14 |
| 월세를 결정하는 주요 요인은 뭘까? - 지오코딩을 활용한 피처 엔지니어링 | 데이터 분석 기초(7) (1) | 2025.09.13 |