Skip to content

Streamlit 앱 실행 및 최적화하는 방법

Updated on

스트림릿(Streamlit)은 데이터 주도형 웹 애플리케이션을 구축하고 배포하는 방식을 혁신적으로 변화시켰습니다. 그러나 스트림릿을 어떻게 실행하는 것일까요? 최적의 성능을 위해 스트림릿 앱을 어떻게 최적화할 수 있을까요? 이 포괄적인 안내서에서는 이러한 질문들에 대답하며 스트림릿을 마스터할 수 있는 지식과 도구를 제공합니다.

스트림릿 이해하기

스트림릿이란 무엇일까요? 스트림릿은 개발자들이 상호작용하는 데이터 주도형 웹 애플리케이션을 쉽게 만들 수 있는 오픈 소스 Python 라이브러리입니다. 이는 데이터 과학자와 엔지니어가 스크립트를 몇 줄로 웹 앱으로 변환하여 공유할 수 있도록 돕는 것을 목적으로 합니다.

스트림릿은 전 세계에서 가장 인기있는 프로그래밍 언어 중 하나인 Python과의 통합을 통해 데이터 분석 및 시각화를 위한 강력한 도구가 됩니다. 그러나 스트림릿은 단순히 Python 라이브러리가 아닌 동시에 효과적인 키워드 도구입니다. 이는 검색 엔진 결과의 첫 페이지에서 랭킹에 가까운 키워드를 식별하고 최적화하는 데 도움이 될 수 있으며, 웹 사이트의 가시성과 트래픽을 증가시킬 수 있습니다.

스트림릿 시작하기

스트림릿을 실행하는 것은 간단하며, 사용하는 운영 체제에 관계없이 수월하게 할 수 있습니다. Windows, Linux, macOS를 사용하든 상관없이 원하는 것은 시간을 들여 스트림릿 앱을 설정하면 됩니다.

Windows에서 스트림릿 실행하기

Windows에서 스트림릿을 실행하려면 먼저 설치해야 합니다. 명령 프롬프트를 열고 다음 명령을 입력하세요:

pip install streamlit

한 번 스트림릿이 설치되면 다음 명령을 입력하여 실행할 수 있습니다:

streamlit run your_script.py

your_script.py를 사용자의 Python 스크립트 이름으로 대체하세요. 그러면 스트림릿은 기본 웹 브라우저에서 실행되어 사용자가 상호작용할 수 있는 앱이 표시됩니다.

서버에서 스트림릿 실행하기

서버에서 스트림릿을 실행하는 것도 비슷한 과정을 따릅니다. 서버에 스트림릿을 설치한 후, streamlit run 명령 다음에 Python 스크립트의 경로를 입력하세요. 그런 다음 서버의 IP 주소와 스트림릿이 실행 중인 포트 번호를 사용하여 스트림릿 앱에 액세스할 수 있습니다.

VS Code에서 스트림릿 실행하기

Visual Studio Code(VS Code)는 스트림릿을 지원하는 인기있는 코드 편집기입니다. VS Code에서 스트림릿을 실행하려면 에디터에서 Python 스크립트를 열고 터미널을 열어 streamlit run 명령 다음에 스크립트의 경로를 입력하세요.

첫 번째 스트림릿 앱 만들고 실행하기

이제 스트림릿을 실행하는 방법을 알았으니, 첫 번째 스트림릿 앱을 만들어 보겠습니다. 이 절에서는 코드 작성부터 Render에 앱을 배포하는 과정까지 단계별로 안내합니다.

첫 번째 스트림릿 앱 작성하기

스트림릿 앱은 스트림릿 라이브러리를 사용하는 단순한 Python 스크립트입니다. 다음은 간단한 예시입니다:

import streamlit as st
 
st.title('안녕, 스트림릿!')
st.write('이것은 내 첫 번째 스트림릿 앱입니다.')

이 스크립트를 스트림릿으로 실행하면 "안녕, 스트림릿!"이라는 제목과 "이것은 내 첫 번째 스트림릿 앱입니다."이라는 텍스트를 가진 웹 페이지가 표시됩니다.

Render에 스트림릿 앱 배포하기

Render는 스트림릿을 포함한 웹 앱을 쉽게 배포할 수 있도록 도와주는 클라우드 플랫폼입니다. Render에 스트림릿 앱을 배포하려면 앱을 빌드하고 실행하는 방법을 Render에 알려주는 Dockerfile을 생성해야 합니다. 다음은 예시입니다:

FROM python:3.7
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD streamlit run app.py

Dockerfile은 Python 3.7 이미지로 시작하고 작업 디렉토리를 /app로 설정한 후, 앱의 파일을 이미지에 복사하고 필요한 Python 패키지를 모두 설치한 뒤 스트림릿 앱을 실행합니다.

Dockerfile을 작성한 후, 앱을 Render에 업로드하면 자동으로 빌드되고 배포됩니다.

스트림릿 앱 최적화하기

스트림릿 앱은 빠르고 효율적으로 설계되었지만, 모든 소프트웨어와 마찬가지로 개선 가능한 부분이 있습니다. 이 절에서는 성능과 반응성을 향상시키기 위해 스트림릿 앱을 최적화하는 몇 가지 기술을 살펴보겠습니다.

앱 성능 향상

스트림릿은 데이터 웹에서 데이터를 로드하거나 대용량 데이터를 처리하거나 비용이 많이 드는 계산을 수행하는 함수를 캐싱하는 데 사용되는 강력한 캐싱 기능을 제공합니다. 이러한 캐싱 기능을 사용하면 앱이 웹에서 데이터를 로드하거나 대용량 데이터를 조작하거나 비용이 많이 드는 계산을 수행할 때에도 성능을 유지할 수 있습니다.

스트림릿은 @st.cache_data@st.cache_resource라는 두 가지 주요 캐싱 유형을 제공합니다. @st.cache_data 데코레이터는 데이터를 반환하는 함수(예: 데이터 프레임 변환, 데이터베이스 쿼리, 머신러닝 추론)를 캐시하는 데 사용됩니다. 반면 @st.cache_resource는 전역 리소스(예: 데이터베이스 연결, 머신러닝 모델)를 반환하는 함수를 캐시하는 데 사용됩니다.

다음은 이러한 데코레이터를 사용하는 예시입니다:

@st.cache_data
def long_function(param1, param2):
    # 여기에서 비용이 많이 드는 계산 또는 웹에서 데이터를 가져옵니다.
    return data
 
@st.cache_resource
def init_model():
    # 여기에서 전역 리소스를 반환합니다.
    return pipeline(
        "sentiment-analysis",
        model="distilbert-base-uncased-finetuned-sst-2-english"
    )

또한 st.cache_data.clear()st.cache_resource.clear()를 사용하여 모든 인메모리 및 온디스크 데이터 캐시를 지울 수도 있습니다.

앱 렌더링 최적화

스트림릿 앱의 성능은 사용자 인터페이스의 복잡성에 따라 영향을 받을 수도 있습니다. 브라우저 창의 크기를 조정하거나 사이드바를 확장/축소할 때 앱이 응답하지 않는 경우, 복잡한 UI 요소의 렌더링 때문일 수 있습니다. Streamlit 앱을 최적화하는 한 가지 방법은 UI를 단순화하는 것입니다. 예를 들어, 많은 수의 슬라이더나 선택 슬라이더 대신에 리소스 소모가 적은 다른 유형의 입력 위젯을 사용하는 것을 고려해보세요.

또 다른 접근 방법은 플롯을 최적화하는 것입니다. 복잡한 Plotly 차트가 포함된 경우, st.plotly_chart를 호출할 때 use_container_width=True 옵션을 사용하는 것을 고려해보세요. 이 옵션은 앱의 컨테이너에 가장 적합한 크기로 차트를 렌더링하므로 렌더링 성능이 향상됩니다.

Streamlit 앱 효율적으로 배포하기

Streamlit 앱을 배포할 때 앱이 필요로하는 리소스와 배포 플랫폼의 기능을 고려하는 것이 중요합니다. 예를 들어, 앱이 무거운 계산을 수행하거나 큰 데이터 세트를 처리하는 경우, 충분한 CPU 및 메모리 리소스를 갖춘 배포 플랫폼을 선택해야 할 수도 있습니다.

Streamlit 앱을 배포할 때 흔히 저지르는 실수 중 하나는 메모리 최적화를 고려하지 않는 것입니다. 앱에서 큰 양의 메모리를 사용하면 배포 중에 충돌하거나 응답하지 않을 수 있습니다. 이를 피하기 위해 캐싱, 효율적인 데이터 처리 및 메모리 프로파일링과 같은 기술을 사용하여 앱의 메모리 사용량을 줄이는 것을 고려해보세요.

요약하면, Streamlit 앱을 최적화하는 것은 계산 성능을 향상시키고 UI 렌더링을 최적화하며 앱을 효율적으로 배포하는 것의 조합입니다. 이러한 기술을 적용하여 Streamlit 앱을 빠르고 반응적이며 신뢰할 수 있는 상태로 유지할 수 있습니다.

Streamlit의 고급 기능

Streamlit은 단순한 웹 앱을 만드는 도구에 머무르지 않습니다. Streamlit은 다양한 고급 기능을 지원하는 강력한 플랫폼으로 사용자들이 쉽게 복잡하고 대화식인 애플리케이션을 구축할 수 있습니다. 기본기에 익숙해진 후에는 Streamlit의 고급 기능을 탐색해볼 수 있습니다. 이러한 기능은 다음과 같습니다:

  • 대화식 위젯: Streamlit은 슬라이더, 체크박스, 라디오 버튼 등 다양한 대화식 위젯을 지원합니다. 이러한 위젯을 사용하여 사용자들이 앱과 상호 작용하고 데이터를 시각화하는 다양한 방법을 제공할 수 있습니다.

  • 데이터 캐싱: 앞서 설명한 것처럼, Streamlit의 캐싱 기능을 사용하면 앱의 성능을 크게 향상시킬 수 있습니다. 비용이 많이 드는 계산 작업의 결과를 캐싱함으로써 앱을 더 빠르고 반응적으로 만들 수 있습니다.

  • 세션 상태: Streamlit의 세션 상태 기능을 사용하면 다시 실행되는 동안 상태를 유지할 수 있으며, 더 복잡한 상호 작용이 가능해집니다. 예를 들어, 세션 상태를 사용하여 사용자의 입력이나 다중 페이지 애플리케이션에서 현재 페이지를 기억할 수 있습니다.

  • 구성 요소: Streamlit 구성 요소를 사용하면 다른 JavaScript 라이브러리 및 프레임워크와 통합하여 Streamlit의 기능을 확장할 수 있습니다. 구성 요소를 사용하여 사용자 정의 위젯 생성, 대화식 시각화 내장 등을 할 수 있습니다.

이러한 고급 기능을 숙달함으로써 사용자의 요구를 충족하는 복잡하고 대화식인 Streamlit 앱을 구축할 수 있습니다.

게다가, 이 멋진 오픈 소스 Python 라이브러리를 사용하여 No Code Data Visualization 도구를 만들 수 있습니다:

PyGWalker (opens in a new tab)는 테이블 같은 UI를 손쉽게 Streamlit 앱에 통합할 수 있는 Python 라이브러리입니다.

Streamlit에서 데이터 시각화를 위한 PyGWalker (opens in a new tab)

결론

Streamlit은 데이터 기반 웹 애플리케이션을 만드는 강력한 도구입니다. 직관적인 사용자 인터페이스와 다양한 기능을 제공하여 개발자들이 Python 스크립트를 몇 줄의 코드로 상호 작용 가능한 웹 앱으로 빠르게 변환할 수 있게 도와줍니다. Streamlit을 로컬 머신, 서버 또는 VS Code에서 실행하더라도 시작하기는 간단합니다. 그리고 적절한 최적화 기법을 사용함으로써 Streamlit 앱을 빠르고 반응적이며 신뢰할 수 있게 할 수 있습니다. 지금 Streamlit을 탐색하고 데이터 분석 및 시각화 작업을 효율적으로 수행하는 방법을 발견하세요.

자주 묻는 질문

  1. Streamlit이란 무엇인가요?

    Streamlit은 개발자들이 쉽게 상호 작용적이고 데이터 기반의 웹 앱을 만들 수 있도록 도와주는 오픈 소스 Python 라이브러리입니다. 몇 줄의 코드로 스크립트를 공유 가능한 웹 앱으로 변환하는 것을 지원하도록 설계되었습니다.

  2. 로컬 머신에서 Streamlit을 어떻게 실행할 수 있나요?

    로컬 머신에서 Streamlit을 실행하려면 먼저 pip를 사용하여 설치해야 합니다. 설치한 후에는 명령 프롬프트에서 streamlit run your_script.py라는 명령을 입력하여 Streamlit을 실행할 수 있습니다. your_script.py는 사용자의 Python 스크립트의 이름으로 변경해야 합니다.

  3. Streamlit 앱을 어떻게 최적화할 수 있나요?

    Streamlit 앱을 최적화하려면 Streamlit의 캐싱 기능을 사용하고 앱의 사용자 인터페이스를 단순화하고 앱을 효율적으로 배포하는 것입니다. 이러한 기술을 사용하면 앱의 성능을 향상시키고 앱을 더 빠르고 반응적으로 만들 수 있습니다.