Streamlit과 GitHub로 엮어낸 나의 첫 앱 배포기
밤새워 만든 데이터 분석 코드를 동료에게 보여주고 싶을 때, 그저 코드 파일을 보내는 것만으로는 무언가 아쉬울 때가 있습니다. '이걸 직접 만져보고, 슬라이더를 움직여보면 훨씬 와닿을 텐데...' 하는 생각, 저만 해본 건 아니겠죠? 제 컴퓨터 안에서만 맴돌던 아이디어를 누구나 쉽게 경험할 수 있는 웹 앱으로 만들고 싶다는 소망, 그것이 저의 첫 배포 여정의 시작이었습니다.
오늘은 저처럼, 자신의 소소하지만 소중한 프로젝트를 세상에 처음 선보이고 싶은 분들을 위해 제가 겪었던 Streamlit 앱 배포의 설렘과 고민의 순간들을 공유하려 합니다.
세상에 내보낼 제 앱을 위해 가장 먼저 한 일은 GitHub에 아늑한 집을 마련해 주는 것이었습니다. GitHub는 단순히 코드를 저장하는 공간을 넘어, 제 프로젝트의 역사가 차곡차곡 쌓이는 소중한 기록 보관소와 같다고 느꼈습니다.
처음 GitHub에 Repository, 즉 저장소를 만들 때 'Public'으로 설정하는 버튼 앞에서 잠시 망설였습니다. 제 서툰 코드를 세상에 공개해도 괜찮을까 하는 부끄러움 때문이었죠. 하지만 이내 마음을 고쳐먹었습니다. 이것은 제 아이디어를 세상에 내놓기 위한 첫 번째 용기 있는 발걸음이니까요.
GitHub 계정 만들기: 혹시 아직 계정이 없다면, 든든한 나의 저장소를 위해 첫 삽을 뜬다는 마음으로 가입부터 시작합니다.
새로운 저장소(Repository) 생성: 로그인 후, 우측 상단의 + 아이콘을 눌러 New repository를 선택합니다. 그리고 용기를 내어 Public으로 설정합니다. 이것이 세상과의 첫 연결고리입니다.
소중한 코드 올리기: Add file > Upload files를 통해 제 앱의 심장인 Streamlit 메인 파일을 올립니다. Commit changes 버튼을 누르자, 제 코드가 드디어 세상에 나갈 준비를 마쳤다는 생각에 가슴이 두근거렸습니다.
GitHub에 둥지를 튼 제 코드를 살아 숨 쉬는 웹 앱으로 만들어 줄 마법사는 바로 Streamlit Community Cloud였습니다. 복잡한 서버 설정이나 배포 명령어 없이, 몇 번의 클릭만으로 제 앱을 세상에 공개할 수 있다는 사실이 처음에는 믿기지 않았습니다.
Streamlit Community Cloud에 GitHub 계정으로 로그인하고, 제가 만든 저장소를 연결한 뒤, 메인 파일 경로를 지정해주었습니다. 그리고 마침내 'Deploy!' 버튼을 눌렀습니다.
내 코드가 살아 숨 쉬는 웹페이지가 되는 순간, 그 짜릿함을 당신도 느껴보셨으면 합니다.
몇 분의 기다림 끝에, 제 컴퓨터에서만 보이던 작은 화면이 이제는 고유한 웹 주소를 가진 어엿한 '앱'이 되어 나타났습니다. 링크 하나만 있으면 전 세계 누구든 제 데이터 실험실에 방문할 수 있게 된 것입니다. 그 순간의 감격은 아마 오랫동안 잊지 못할 것 같습니다.
하지만 모든 것이 동화처럼 아름답지만은 않았습니다. 제 앱이 조금씩 복잡해지고 무거워지자, 무료라는 달콤함 뒤에 숨겨진 현실의 벽이 보이기 시작했죠. Streamlit Community Cloud의 무료 플랜은 제 앱에게 주어진 '작은 방'과 같았습니다.
리소스의 한계: 앱당 최대 1GB의 RAM과 800MB의 디스크 공간. 처음에는 넉넉해 보였지만, 무거운 데이터를 다루거나 복잡한 계산을 하려니 금세 버거워졌습니다.
짧은 휴식 시간: 사용자가 없어 1시간이 지나면 앱은 깊은 잠에 빠져버립니다. 누군가 다시 찾아올 때마다 잠에서 깨어나는 시간이 필요했죠.
모두에게 열린 문: 무료 플랜의 앱은 기본적으로 모두에게 공개됩니다. 저의 작은 실험실에 민감한 데이터를 들여놓을 수는 없다는 점을 항상 기억해야 했습니다.
이러한 제한들은 저에게 '무엇을, 어떻게 보여줄 것인가'에 대한 더 깊은 고민을 안겨주었습니다. 화려함보다는 핵심에 집중하고, 효율적인 코드를 작성하는 것의 중요성을 깨닫게 된 계기였습니다.
커뮤니티를 둘러보면, 많은 개발자들이 간단한 데이터 시각화나 미니 프로젝트를 Streamlit으로 멋지게 배포하며 기쁨을 나누고 있었습니다. 저 또한 처음에는 그 기쁨을 만끽했죠. 하지만 복잡한 머신러닝 모델을 얹으려는 욕심이 생겼을 때, 저는 리소스 부족이라는 현실의 벽에 부딪혔습니다. 앱이 버벅거릴 때의 아쉬움은 꽤나 컸습니다.
이 실패의 경험은 저를 좌절시키기보다, 오히려 한 단계 성장하게 만들었습니다. 모든 것을 다 보여주려는 욕심을 내려놓고, 가장 빛나는 핵심 아이디어 하나에 집중하는 법을 배우게 된 것이죠. 성공 사례는 저에게 영감을 주었고, 실패의 경험은 저를 더 단단한 개발자로 만들어 주었습니다.
Streamlit 앱을 배포하는 과정은 단순히 기술을 익히는 것을 넘어, 제 아이디어를 세상에 내놓고 사람들과 소통하며 성장하는 소중한 경험이었습니다. 때로는 한계에 부딪혀 좌절하기도 했지만, 그 과정 속에서 더 나은 방법을 배우고 제 프로젝트에 대한 애정은 더욱 깊어졌습니다.
어쩌면 배포의 가장 큰 의미는 완벽한 결과물을 세상에 자랑하는 것이 아닐지도 모릅니다. 나의 작은 아이디어가 누군가에게 영감을 주고, 또 다른 누군가와 연결될 수 있다는 가능성. 그 가능성을 향해 용기를 내어 세상의 문을 두드리는 행위 그 자체가 아닐까요?
당신의 서랍 속에서 잠자고 있는 아이디어는 무엇인가요? 오늘, 그 아이디어에 작은 날개를 달아 세상 밖으로 날려 보내는 것은 어떨까요?