쉽게 Streamlit 앱을 배포하고 클라우드에 호스팅하는 방법
Updated on
Streamlit은 데이터 애플리케이션 분야에서 게임 체인저로 떠오르고 있습니다. 개발자들에게 데이터 스크립트를 대화형 웹 앱으로 빠르고 쉽게 변환할 수 있는 기능을 제공합니다. 하지만 앱을 생성하는 것으로 여정이 끝나는 것은 아닙니다. 다음으로 중요한 단계는 배포입니다. 배포를 통해 Streamlit 앱을 전 세계 사용자에게 접근 가능하게 하여 상호 작용, 피드백 및 실제 응용을 가능하게 합니다.
스트림릿 앱을 Tableau로 변환해주는 멋진 데이터 분석 및 데이터 시각화 도구를 들어보신 적이 있나요?
PyGWalker (opens in a new tab)는 탁월한 파이썬 라이브러리로, 여러분의 스트림릿 앱에 Tableau와 유사한 UI를 손쉽게 통합할 수 있도록 도와줍니다.
파트 1: Docker를 사용하여 DigitalOcean에 배포하기
DigitalOcean은 인기 있는 클라우드 인프라 제공업체로, 여러 컴퓨터에서 동시에 실행되는 응용 프로그램을 배포하고 확장할 수 있는 플랫폼을 제공합니다. 여기에서는 응용 프로그램을 컨테이너를 사용하여 생성, 배포 및 실행하는 작업을 간소화하는 플랫폼인 Docker를 사용합니다.
Docker란 무엇인가요?
Docker는 응용 프로그램의 배포, 확장 및 관리를 자동화하는 오픈 소스 플랫폼입니다. Docker는 응용 프로그램을 컨테이너에 캡슐화하여 응용 프로그램을 실행하는 데 필요한 모든 것을 포함한 독립 실행형 패키지로 만듭니다.
이제 Docker를 사용하여 DigitalOcean에 스트림릿 앱을 배포하는 단계별 가이드를 살펴보겠습니다:
- Dockerfile 만들기: Dockerfile은 이미지를 조립하기 위한 모든 명령을 포함하는 텍스트 문서입니다. 다음은 스트림릿 앱을 위한 Dockerfile의 기본 예입니다:
## 부모 이미지로 공식 Python 런타임 사용
FROM python:3.7-slim
## 컨테이너 내부의 작업 디렉터리를 /app으로 설정
WORKDIR /app
## 현재 디렉터리의 내용을 컨테이너의 /app에 추가
ADD . /app
## requirements.txt에 지정된 필요한 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt
## 컨테이너 외부에서 포트 80을 사용할 수 있도록 설정
EXPOSE 80
## 컨테이너 실행 시 app.py를 실행
CMD streamlit run --server.port 80 app.py
-
Docker를 사용하여 droplet 설정: droplet은 확장 가능한 컴퓨팅 플랫폼으로, 추가 저장소, 보안 및 모니터링 기능이 제공됩니다. droplet의 크기, 위치 및 초기 소프트웨어를 사용자 정의할 수 있습니다.
-
앱 배포: Dockerfile이 준비되고 droplet이 실행 중인 경우, 스트림릿 앱을 배포할 수 있습니다. 다음은 Docker 이미지를 빌드하고 실행하는 기본 명령입니다:
docker build -t my-streamlit-app .
docker run -p 80:80 my-streamlit-app
파트 2: Streamlit Sharing
Streamlit Sharing은 개발자들이 스트림릿 앱을 구성 없이 즉시 배포할 수 있는 플랫폼입니다. 앱을 빠르고 쉽게 공유하고자 하는 경우에는 매우 좋은 옵션입니다.
Streamlit Sharing 사용 방법
Streamlit Sharing을 사용하는 것은 간단합니다. 다음은 단계별 가이드입니다:
-
스트림릿 앱을 공개 GitHub 리포지토리에 푸시: Streamlit Sharing은 앱을 직접 GitHub에서 배포하므로 앱은 공개 리포지토리에 있어야 합니다.
-
Streamlit Sharing에 가입:
Streamlit Sharing 웹사이트로 이동하여 "GitHub으로 로그인"을 클릭하여 가입합니다.
- 앱 배포: 로그인한 후 "새로운 앱"을 클릭하고 GitHub 리포지토리, 브랜치 및 파일 경로를 선택한 후 "배포"를 클릭합니다. 앱은 몇 분 내에 실행됩니다!
다음은 Streamlit Sharing 대시보드의 예시입니다:
내 앱
- 앱 1 (배포됨)
- 앱 2 (배포됨)
- 앱 3 (진행 중)
새로운 앱
- 리포지토리: my-github-username/my-streamlit-app
- 브랜치: main
- 파일 경로: app.py
파트 3: 실행 파일로 배포하기
스트림릿은 공식적으로 실행 파일로 다른 운영 체제에 앱을 배포하는 것을 지원하지 않지만, 일부 해결책을 통해 가능합니다. 다음은 이를 위한 일반적인 가이드입니다:
-
앱 패키지화: PyInstaller 또는 cx_Freeze와 같은 도구를 사용하여 스트림릿 앱을 실행 파일로 패키지화할 수 있습니다. 이러한 도구는 앱의 실행에 필요한 모든 파일과 라이브러리를 수집하여 하나의 파일로 묶습니다.
-
설치 프로그램 생성: 앱을 다른 사용자에게 배포하려는 경우, 설치 프로그램을 생성할 수 있습니다. 이를 위해 Inno Setup 또는 NSIS와 같은 도구를 사용할 수 있습니다.
-
실행 파일 테스트: 앱을 배포하기 전에 대상 운영 체제에서 실행 파일을 테스트하여 정상 작동되는지 확인하세요. 다음은 PyInstaller를 사용하여 실행 가능한 파일을 생성하는 샘플 명령어입니다:
pyinstaller --onefile --add-data='myapp:myapp' app.py
파트 4: 헤로쿠에 배포하기
헤로쿠는 다양한 프로그래밍 언어로 작성된 응용 프로그램을 배포, 실행 및 관리할 수 있는 클라우드 플랫폼입니다. 다음은 Streamlit 앱을 헤로쿠에 배포하는 방법에 대한 단계별 가이드입니다:
-
헤로쿠 계정 만들기: 이미 헤로쿠 계정이 없다면 무료로 가입해주세요.
-
헤로쿠 CLI 설치하기: 헤로쿠 CLI는 터미널에서 직접 헤로쿠 앱을 생성하고 관리할 수 있는 도구입니다.
-
앱을 헤로쿠에 준비하기: 헤로쿠는 Streamlit 앱을 배포하기 위해 두 가지 추가 파일인
Procfile
과setup.sh
파일이 필요합니다.Procfile
은 앱을 시작할 때 사용할 명령을 헤로쿠에 알려주며,setup.sh
파일은 환경을 설정합니다.
다음은 Procfile
과 setup.sh
의 예시입니다:
web: sh setup.sh && streamlit run app.py
mkdir -p ~/.streamlit/
echo "\
[general]\n\
email = \"your-email@domain.com\"\n\
" > ~/.streamlit/credentials.toml
echo "\
[server]\n\
headless = true\n\
enableCORS=false\n\
port = $PORT\n\
" > ~/.streamlit/config.toml
- 앱을 배포하기: 앱을 준비한 후에는 헤로쿠 CLI를 사용하여 헤로쿠에 배포할 수 있습니다. 다음은 앱을 배포하는 예시 명령어 순서입니다:
git init
heroku create
git add .
git commit -m "Initial commit"
git push heroku master
이 단계를 마치면 Streamlit 앱이 헤로쿠에 실시간으로 배포됩니다!
파트 5: Google Cloud Platform에 배포하기
Google Cloud Platform (GCP)은 Google이 내부적으로 사용하는 인프라에 기반한 클라우드 컴퓨팅 서비스 모음입니다. GCP는 Streamlit 앱을 배포하기 위한 강력하고 확장 가능한 환경을 제공합니다.
GCP에 Streamlit 앱 배포 및 보안 설정하기
다음은 GCP에 Streamlit 앱을 배포하는 방법에 대한 단계별 가이드입니다:
-
GCP 계정 만들기: GCP 계정이 없다면 GCP 계정을 만들어주세요.
-
새 프로젝트 생성하기: GCP 콘솔로 이동하여 새 프로젝트를 만들어주세요.
-
App Engine 활성화하기: "App Engine" 섹션으로 이동하여 프로젝트에서 App Engine을 활성화해주세요.
-
앱을 GCP에 준비하기: 헤로쿠와 마찬가지로 GCP는 앱을 구성하기 위해
app.yaml
파일이 필요합니다. 다음은 Streamlit 앱에 대한 샘플app.yaml
파일입니다:
runtime: python39
instance_class: F2
automatic_scaling:
target_cpu_utilization: 0.65
entrypoint: streamlit run --server.port $PORT --server.enableCORS false app.py
- 앱을 배포하기: 앱을 준비한 후에는 Google Cloud SDK를 사용하여 GCP에 배포할 수 있습니다. 다음은 앱을 배포하는 예시 명령어 순서입니다:
gcloud app deploy
이 단계를 마치면 Streamlit 앱이 GCP에서 실시간으로 실행됩니다!
파트 6: 아마존 SageMaker Studio에서 Streamlit 앱 빌드하기
아마존 SageMaker Studio는 기계 학습을 위한 완전히 통합된 개발 환경(IDE)입니다. 기계 학습 모델을 빠르게 구축, 훈련 및 배포하는 데 필요한 모든 도구를 제공합니다.
아마존 SageMaker Studio 사용의 장점
-
완전히 관리되는 서비스: 아마존 SageMaker Studio는 모든 하위 인프라를 관리하므로 Streamlit 앱을 구축 및 배포에 중점을 둘 수 있습니다.
-
통합 Jupyter 노트북: 데이터를 탐색하고 시각화하기 위해 간편하게 Jupyter 노트북을 생성할 수 있습니다.
-
모델 구축 및 훈련: SageMaker Studio는 내장된 알고리즘과 사용자 정의 알고리즘을 지원하여 기계 학습 모델을 구축하고 훈련하기 쉽게 만듭니다.
-
모델 배포: 모델을 훈련한 후에는 SageMaker Studio 콘솔에서 한 번 클릭으로 배포할 수 있습니다.
파트 7: Azure App Services에 배포하기
Azure App Services는 웹 앱을 구축, 배포 및 확장하기 위한 완전히 관리되는 플랫폼입니다. Python을 포함한 다양한 프로그래밍 언어를 지원하므로 Streamlit 앱을 배포하는 데 좋은 선택입니다.
Azure App Services에 Streamlit 앱 배포하기
다음은 Azure App Services에 Streamlit 앱을 배포하는 방법에 대한 단계별 가이드입니다:
-
Azure 계정 만들기: Azure 계정이 없다면 Azure 계정을 만들어주세요.
-
새 App Service 만들기: Azure 포털로 이동하여 새 App Service를 만들어주세요.
-
App Service 구성하기: 구독, 리소스 그룹, 이름, 발행 방법 (코드), 런타임 스택 (Python) 및 운영 체제를 선택하세요.
-
앱 배포하기: App Service를 설정한 후에는 Azure CLI 또는 Git을 사용하여 Streamlit 앱을 배포할 수 있습니다. 다음은 Azure CLI를 사용하여 앱을 배포하는 예시 명령어 순서입니다:
az webapp up --sku F1 --name my-streamlit-app
이 단계를 마치면 Streamlit 앱이 Azure App Services에서 실시간으로 실행됩니다!
파트 8: AWS Fargate에 기계 학습 파이프라인 배포하기
AWS Fargate는 컨테이너용 서버리스 컴퓨팅 엔진입니다. Amazon Elastic Container Service (ECS) 및 Amazon Elastic Kubernetes Service (EKS)와 함께 작동하여 컨테이너화된 응용 프로그램을 배포하기 쉽게 만들어줍니다.
PyCaret 및 Streamlit 앱을 AWS Fargate에 배포하기
다음은 PyCaret과 Streamlit 앱으로 개발한 기계 학습 파이프라인을 AWS Fargate에 배포하는 방법에 대한 단계별 가이드입니다:
- Dockerfile 생성하기: Dockerfile에는 PyCaret, Streamlit 및 기타 필요한 라이브러리를 설치하기 위한 필요한 지침이 포함되어야 합니다. 다음은 기본적인 예시입니다:
## 공식 Python 런타임을 부모 이미지로 사용
FROM python:3.7-slim
## 컨테이너 내의 작업 디렉토리를 /app으로 설정
WORKDIR /app
## 현재 디렉토리의 내용을 /app으로 추가
ADD . /app
## requirements.txt에 명시된 필요한 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt
## 포트 80을 컨테이너 외부에 공개
EXPOSE 80
## 컨테이너 시작 시 app.py 실행
CMD streamlit run --server.port 80 app.py
-
도커 이미지 빌드 및 푸시: 도커 CLI를 사용하여 도커 이미지를 빌드하고 Amazon Elastic Container Registry (ECR)와 같은 컨테이너 레지스트리에 푸시할 수 있습니다.
-
AWS Fargate에서 새 작업 정의 생성: 작업 정의는 애플리케이션을 구성하는 하나 이상의 컨테이너를 설명하는 JSON 형식의 텍스트 파일입니다. 사용할 컨테이너 이미지, 필요한 CPU 및 메모리, 네트워크 구성 등이 포함됩니다.
-
작업 실행: 작업 정의를 설정한 후 AWS Fargate에서 작업을 실행할 수 있습니다. 이제 Streamlit 앱은 작업의 공개 IP 주소에서 액세스할 수 있어야 합니다.
다음은 도커 이미지를 빌드하고 Amazon ECR로 푸시하는 예제 명령 시퀀스입니다:
$(aws ecr get-login --no-include-email --region region)
docker build -t my-streamlit-app .
docker tag my-streamlit-app:latest my-ecr-repo/my-streamlit-app:latest
docker push my-ecr-repo/my-streamlit-app:latest
이 단계를 마치면 PyCaret 및 Streamlit 앱이 AWS Fargate에 배포되어 있어야 합니다!
파트 9: 배포 오류 해결
Streamlit 앱을 배포하는 것은 때로는 어려운 작업일 수 있습니다. 특히 해독하기 어려운 오류가 발생할 경우 더욱 어렵습니다. 그러나 이러한 일반적인 오류를 이해하고 해결할 수 있다면 문제 해결에 도움이 될 수 있습니다.
일반적인 배포 오류 및 해결 방법
- ModuleNotFoundError: 이 오류는 Python이 앱 실행에 필요한 모듈을 찾을 수 없을 때 발생합니다. 이를 해결하려면
requirements.txt
파일에 필요한 모든 모듈이 나열되어 있는지 확인하십시오.
ModuleNotFoundError: No module named 'module-name'
- StreamlitAPIException: 이 오류는 Streamlit 코드에 문제가 있을 때 발생합니다. 오류 메시지를 확인하고 코드를 조정하십시오.
StreamlitAPIException: 'function-name'은(는) 유효한 Streamlit 명령어가 아닙니다.
- Docker 빌드 실패: Docker 빌드가 실패하는 경우 주로 Dockerfile에 문제가 있습니다. Dockerfile에서 구문 오류나 누락된 명령어를 확인하십시오.
ERROR: Service 'service-name' failed to build
- 배포 시간 초과: 배포가 너무 오래 걸릴 경우 시간 초과될 수 있습니다. 이는 느린 인터넷 연결, 큰 도커 이미지 또는 복잡한 빌드 프로세스로 인한 것일 수 있습니다. Dockerfile을 최적화하거나 타임아웃 제한을 늘려 보십시오.
Error: Deployment timed out.
문제 해결의 핵심은 오류 메시지를 이해하는 것입니다. 기술 용어에 겁먹지 마십시오. 분해하고 메시지가 무엇을 의미하는지 이해하면 해결책을 찾을 수 있습니다.
결론
Streamlit 앱을 배포하는 것은 데이터 애플리케이션 개발 프로세스에서 중요한 단계입니다. 이를 통해 앱을 전 세계에서 액세스할 수 있게 되며 사용자 상호작용과 실제 응용프로그램을 가능하게 합니다. 이 가이드에서는 Streamlit Community Cloud, Heroku, AWS, Google Cloud, Azure 등을 포함한 다양한 플랫폼에서 Streamlit 앱을 배포하는 방법을 살펴보았습니다.
각 플랫폼에는 각각의 장점과 단점이 있으며, 가장 적합한 플랫폼은 개별적인 요구사항과 상황에 따라 다릅니다. 이러한 옵션을 탐색하고 시도해보며 가장 적합한 플랫폼을 찾으시기 바랍니다. 행운을 빕니다!
Streamlit 앱을 Tableau로 변환해주는 멋진 데이터 분석 및 시각화 도구인 PyGWalker (opens in a new tab)를 들어 보셨나요?
PyGWalker는 Tableau와 비슷한 UI를 쉽게 Streamlit 앱에 통합해주는 Python 라이브러리입니다.
자주 묻는 질문
-
Streamlit 앱을 어떻게 배포하나요?
Streamlit 앱을 배포하는 것은 앱과 종속성을 패키지화한 다음 호스팅 플랫폼에 업로드하는 과정입니다. 정확한 단계는 사용하는 플랫폼에 따라 다릅니다. 이 가이드는 여러 인기 있는 플랫폼에 대한 자세한 지침을 제공합니다.
-
로컬에서 Streamlit 앱을 호스팅하는 방법은 무엇인가요?
로컬에서 Streamlit 앱을 호스팅하기 위해 터미널에서 명령어
streamlit run your-app.py
를 실행하면 됩니다. 올바른 디렉토리에 있고 필요한 종속성이 설치되어 있는지 확인해야 합니다. -
Streamlit 앱을 배포하는 데 얼마나 시간이 걸리나요?
Streamlit 앱의 배포 시간은 앱의 크기, 인터넷 연결 속도 및 사용하는 플랫폼에 따라 다를 수 있습니다. 그러나 좋은 설정을 한 경우 몇 분 안에 완료될 수 있습니다.
-
Streamlit은 Flask보다 좋은가요?
Streamlit과 Flask는 모두 훌륭한 도구입니다만, 각자 다른 목적으로 사용됩니다. Streamlit은 빠르고 쉽게 데이터 애플리케이션을 구축하는 데에 특화되어 있으며, Flask는 더 일반적인 웹 프레임워크로 애플리케이션을 더 많은 제어권을 가지고 개발할 수 있습니다. 가장 적합한 도구는 개별적인 요구에 따라 다릅니다.