소개
Supabase로 동적 웹사이트 만들기
전통적으로 R 유저가 웹을 만들 때 Shiny를 사용하지만, 사용자 인증(Auth)이나 데이터베이스(DB) 연동에서 큰 장벽을 만납니다. 이번 프로젝트에서는 Supabase를 백엔드로 활용하여 복잡한 서버 구축 없이 로그인, 파일 업로드, 데이터 이력 관리가 가능한 동적 웹을 구축했습니다.
Vercel이 아닌 shinyapps.io로 간단하게 만들기
처음에는 Next.js를 프론트로 검토했으나, 배포 포인트를 줄이고 R 개발자의 생산성을 극대화하기 위해 Vercel을 과감히 제거했습니다. Shiny가 전체 UI를 담당하고, 무거운 분석 엔진은 Railway에 별도로 띄워 '단일 배포, 다중 엔진' 구조로 효율을 높였습니다.
진행 방법
1. 활용 도구 및 아키텍처
UI/Frontend:
Shiny(R 개발자 친화적 환경)Backend (BaaS):
Supabase(Auth, Storage, REST API)Analysis Engine:
R Plumber+Railway(Docker 배포)AI Logic:
Gemini 2.5 Flash(데이터 구조 분 석 및 자동 요약)
2. 핵심 아키텍처 결정 (YAGNI 원칙 준수)
결정 사항
사유
Vercel 제거
배포 포인트 단순화 (3개 → 2개) 및 유지보수성 향상
Supabase REST API
DB 비밀번호 관리 부담 제거, Shiny 환경변수 설정 간소화
Gemini 2.5 Flash
무료 티어 활용 및 Claude API 대체로 비용 절감
결과와 배운 점
과정 중의 시행착오
Gemini 버전 이슈: 처음에는
Gemini 2.0 Flash를 사용하려 했으나, API 할당량(Limit 0) 문제로 인해 최신 모델인Gemini 2.5 Flash로 업데이트하여 해결했습니다.코드 모듈화: 기존의 긴 R 스크립트를 API에서 호출하기 위해 모든 기능을 함수화(
run_prep_cyt(),run_max_cal())하는 과정이 필요했습니다.
도움이 필요한 부분
현재 Railway에 R 분석 엔진을 배포 중인데, 대용량 엑셀 파일 처리 시 메모리 최적화 방법이 고민입니다.
앞으로의 계획
Phase 3 진입: Railway 엔진 배포 완료 후, Shiny 앱에서 분석 결과를 받아 실시간 시각화(ggplot2 + plotly) 및 보고서 내보내기 기능을 구현할 예정입니다.
도움 받은 글 (옵션)
참고한 지피터스 글이나 외부 사례를 알려주세요.
(내용 입력)