shinyapps.io 배포
shinyapps.io는 Posit(구 RStudio)이 운영하는 Shiny 앱 전용 클라우드 서비스입니다. 서버 설정 없이 R 콘솔 명령어 하나로 앱을 배포할 수 있어서 처음 배포를 시도하는 분에게 가장 적합합니다.
계정 만들기
- https://www.shinyapps.io에 접속합니다.
- "Sign Up"을 클릭하고 계정을 만듭니다. Google 계정으로도 가입할 수 있습니다.
- 가입 후 계정 이름(예:
myname)을 설정합니다. 앱 URL이myname.shinyapps.io/앱이름형태가 됩니다.
rsconnect 패키지 설치 및 인증
install.packages("rsconnect")
shinyapps.io 대시보드에서 "Account → Tokens → Show"를 클릭하면 토큰과 시크릿이 나타납니다. 해당 화면에서 "Copy to clipboard"를 누르면 아래 형태의 명령어가 복사됩니다.
rsconnect::setAccountInfo(
name = "myname",
token = "ABCDEF1234567890",
secret = "secretkey"
)
이 코드를 R 콘솔에 붙여넣어 실행합니다. 인증 정보는 로컬에 저장되어 다시 설정할 필요가 없습니다.
앱 배포
library(rsconnect)
deployApp(
appDir = "modular-app", # app.R이 있는 폴더
appName = "public-dashboard"
)
처음 배포하면 rsconnect가 앱이 사용하는 패키지를 분석해서 서버에 설치하고 실행합니다. 5~10분 정도 걸립니다. 완료되면 브라우저가 자동으로 열리고 배포된 앱 URL이 표시됩니다.
재배포
코드를 수정한 후 같은 명령어를 다시 실행하면 새 버전으로 교체됩니다.
deployApp("modular-app", appName = "public-dashboard")
앱 관리
shinyapps.io 대시보드에서 배포된 앱을 관리합니다.
| 메뉴 | 기능 |
|---|---|
| Applications | 배포된 앱 목록 |
| Logs | 실시간 앱 로그 확인 |
| Metrics | 접속자 수, 메모리 사용량 |
| Settings | 앱 공개 여부, 인스턴스 크기 |
R 콘솔에서도 관리할 수 있습니다.
# 배포된 앱 목록
rsconnect::listApplications()
# 앱 종료 (비용 절감)
rsconnect::terminateApp("public-dashboard")
# 앱 삭제
rsconnect::purgeApp("public-dashboard")
무료 vs 유료 플랜 비교
| 항목 | 무료(Starter) | 기본(Basic) | 표준(Standard) |
|---|---|---|---|
| 월 활성 시간 | 25시간 | 무제한 | 무제한 |
| 앱 개수 | 5개 | 25개 | 무제한 |
| 동시 사용자 | 1명 | 무제한 | 무제한 |
| 사용자 인증 | 없음 | 없음 | 있음 |
| 월 비용 | 무료 | $13 | $99 |
수업 발표용이나 포트폴리오 용도라면 무료 플랜으로 충분합니다. 회사 내부 도구라면 사용자 인증이 포함된 표준 플랜이 필요합니다.
배포 시 자주 겪는 문제
배포 후 앱이 오류를 내면 대부분 패키지 문제입니다. Logs 탭에서 오류 메시지를 확인합니다.
Error in library(DT) : there is no package called 'DT'
이런 메시지가 나오면 app.R 맨 위에 library(DT)가 있는지 확인합니다. rsconnect는 library() 호출을 분석해 패키지 목록을 만들기 때문에, 명시적으로 선언해야 합니다.
한글 폰트가 깨지는 경우에는 시스템 폰트 대신 구글 폰트를 씁니다.
# app.R 상단에 추가
theme <- bs_theme(
bootswatch = "flatly",
base_font = font_google("Noto Sans KR")
)