브루잉 노트 — 배우고 기록하기/실험 일지

[Streamlit] 앱 여러 개 안 만들어질 때, 멀티페이지로 해결하는 법 (앱 만들기 3편)

AI brewer 2026. 5. 30. 15:11

이전 이야기

 

[Streamlit] 내가 만든 앱 스마트폰에서 쓰는 법 — Github, Streamlit 웹 배포 실험 (앱 만들기 2편)

이전 이야기2026.05.26 - [AIffee 한 잔 — 오늘의 AI 활용/써보니까] - [Google AI 스튜디오] 파이썬 없어도 45분 만에 앱 만든 후기 — 비개발자 실전 기록노션에 결과가 자동으로 척 저장되는 거 보고 혼

morning-aiffee.tistory.com

 

웹앱을 만들고 폰에서도 쓸 수 있게 된게 너무 신기했었다. 

 

웹앱 하나 더 추가하는건 엄청 쉽겠다!

스트림릿(Streamlit)으로 간단한 웹앱 하나를 만들어서 배포에 성공하고 나면, 자연스럽게 이런 생각이 든다.

"오, 생각보다 쉽네? 그럼 두 번째 앱도 하나 만들어볼까?"

streamlit 에 private으로 새 앱을 추가하려 하니까, 이상하게 막혔다.
"분명 첫 번째 앱은 잘 됐는데 왜 두 번째는 안 되지?" 하면서 삽질하면서 찾은 해결책, 멀티페이지(Multipage) 구성에 대한 이야기이다. 

 

그래서, 왜 앱이 여러 개 안 만들어졌을까?

결론부터 말하면, 무료 요금제의 앱 개수 제한 때문이었다.  

  • 비공개(Private) 앱: 1개

코드를 공개하기 싫어서 비공개로 만들려고 하면 딱 1개까지만 무료로 허용됩니다.
아무것도 모르고 두 번째 앱을 비공개로 올리려다가 여기서 막혔었다. 

이것 역시 AI한테 해결책을 물었고, 멀티페이지라는 대답이 나왔다. 

앱을 여러 개 만드는 대신, 앱 하나 안에 여러 페이지를 넣자.

 

멀티페이지가 대체 뭔가요?

멀티페이지는 하나의 앱 안에 여러 페이지를 두는 구조이다.

화면 왼쪽 사이드바에서 페이지를 골라 이동하는 그 방식이다.

블로그에 카테고리가 여러 개 있어도 블로그 자체는 하나인 것과 비슷하다. 

이렇게 하면 좋은 점 이 있다. 

  • 스트림릿 입장에서는 앱 1개로 카운트되니까 개수 제한에 안 걸린다.
  • 깃허브 저장소도 하나로 통합 관리된다.
  • 도구 여러 개를 한 주소에서 깔끔하게 모아 보여줄 수 있다.

스트림릿에서 멀티페이지를 만드는 방법은 크게 두 가지인 것 같은데, 나는 간단한 1번 으로 시작했다.

  1. pages/ 폴더를 쓰는 방법 (간단)
  2. st.Page + st.navigation을 쓰는 방법  

 

실제로 이렇게 구성했어요 (코드 포함)

방법 1. 가장 간단한 pages/ 폴더 방식

깃허브 저장소를 이런 구조로 만들면 된다.

your-repo/
├── streamlit_main_app.py     ← 메인(첫 화면)
└── pages/
    ├── 1_첫번째도구.py
    └── 2_두번째도구.py

pages/ 폴더 안에 파이썬 파일을 넣기만 하면, 스트림릿이 자동으로 사이드바에 메뉴를 만들어 줍니다.

파일명 앞에 숫자를 붙이면 그 순서대로 정렬된다. 정말 별다른 코드가 필요 없습니다.  - 사실 이것도 바이브코딩으로 짜달라고 하면 된다.

 

내가 사용한 코드는 이거다. 

import streamlit as st

st.title("🔒 나의 AI 작업실")
st.write("원하는 앱을 선택해 주세요!")

st.divider()

st.subheader("📱 앱 바로가기")

col1, col2, col3 = st.columns(3)

with col1:
    if st.button("AI 오운완 코치", use_container_width=True):
        st.switch_page("pages/my-workout-app.py")

with col3:
    if st.button("AI 살림 도우미", use_container_width=True):
        st.switch_page("pages/my-smarthome-app.py")

with col2:
    if st.button("AI 식단 코치", use_container_width=True):
        st.switch_page("pages/my-foodAI-app.py")

 

Streamlit 연동은 어떻게?

이전엔 1_첫번째도구.py를 연결한 앱을 만들었다면,
이젠 streamlit_main_app.py 를 연결해주면 된다.

그럼 짜잔!

 

마무리하며

정리하자면, 무료 스트림릿에서 비공개 앱은 1개까지만 만들 수 있기 때문에,
도구를 여러 개 운영하고 싶다면 앱을 쪼개지 말고 멀티페이지로 합치면 된다. 

처음엔 "왜 안 되지?" 하고 답답했지만, 덕분에 오히려 더 깔끔한 구조를 배우게 됐다. 

 

여러분은 어떠셨나요?

혹시 스트림릿으로 앱 만들다가 비슷한 벽에 부딪힌 적 있으신가요? 어떤 도구를 페이지로 묶어 봤는지 댓글로 알려주세요.