shiny tutorial 05 - Sharing Apps

Page content

공지

이번에 준비한 튜토리얼은 제 강의를 듣는 과거-현재-미래 수강생분들을 위해 준비한 자료이다. 많은 도움이 되기를 바란다

이번에 준비한 Tutorial 코로나 세계현황을 Shiny Dashboard로 만들어 가는 과정을 담았다.

I. 이전 글 소개

처음 shiny를 접하거나 shiny의 전체 튜토리얼이 궁금한 사람들을 위해 이전 글을 소개한다.

II. Shiny Deployment의 개요

이 영역은 웹개발자에게는 매우 쉬운 영역일 수도 있다. 그러나, 웹 환경에 익숙하지 않은 R 유저에게는 조금 버거울 수도 있다. 2-3번 정도만 반복하면 쉽게 작업하게 될 것이고, Shiny를 클라우드 서버를 통해 배포하는 방법도 익힐 수 있다.

운이 좋게도, RStudio 에서는 무료로 매우 쉽게 배포를 할 수 있도록 하고 있다. 또한 On-Premise(사내 전용) 환경에서 배포할 수 있도록 오픈 소스도 제공하고 있다. 서버는 사실 경제적 비용이 발생하기 때문에, 클라우드로 배포할지, 도커(Docker) 및 오픈소스로 구현하여 배포할지, 고민할 필요는 있다. 배포에 관한 자세한 내용은 Hosting and Deployment에서 확인하기를 바란다.

III. Shinyapps.io

shiny tutorial 01 - get started에서 소개한 Sample Dashboard는 모두 Shinyapps.io에서 배포를 하는 중이다. 배포 하는 과정은 어렵지 않으니 간단히 그 과정만 소개한다.

(1) 회원가입

위 싸이트에서 회원가입을 진행하고 RStudio로 돌아온다.

(2) Shiny App 실행

  • 간단한 소스코드로 ShinyApp을 실행한다.
  • 소스코드는 Shiny User Case에 있는 Iris K-Means Clustering에서 가져왔다.
  • app.R
library(shiny)
iris <- iris
vars <- setdiff(names(iris), "Species")

ui <- pageWithSidebar(
  headerPanel('Iris k-means clustering'),
  sidebarPanel(
    selectInput('xcol', 'X Variable', vars),
    selectInput('ycol', 'Y Variable', vars, selected = vars[[2]]),
    numericInput('clusters', 'Cluster count', 3, min = 1, max = 9)
    ),
  mainPanel(
    plotOutput('plot1')
  )
)

server <- function(input, output, session) {

  # Combine the selected variables into a new data frame
  selectedData <- reactive({
    iris[, c(input$xcol, input$ycol)]
  })

  clusters <- reactive({
    kmeans(selectedData(), input$clusters)
  })

  output$plot1 <- renderPlot({
    palette(c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3",
      "#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999"))

    par(mar = c(5.1, 4.1, 0, 1))
    plot(selectedData(),
         col = clusters()$cluster,
         pch = 20, cex = 3)
    points(clusters()$centers, pch = 4, cex = 4, lwd = 4)
  })

}

# Run the application 
shinyApp(ui = ui, server = server)
## 
## Listening on http://127.0.0.1:8977
  • Shiny App을 실행하고 난 후에 우측 상단의 Publish 버튼을 클릭한다.
  • 아래 그림 참조

(3) ShinyApps.io 연동

Publish 버튼을 클릭하면 아래와 같은 팝업창이 활성화 될 것이다.

다음 메뉴에서 ShinyApps.io 또는 RStudio Connect를 선택하라는 팝업이 활성화 될 것이다. 여기에서 ShinyApps.io를 선택한다. RStudio Connect는 일종의 유료 버전이기 때문에 여기에서는 다루지 않는다. 자세히 알아보고 싶다면 RStudio Connect에서 확인하기를 바란다.

마지막 하단의 이미지에서 드디어 Token값을 받아야 하는데, 이 Token값은 ShinyApps.io 싸이트에서 확인해야 한다. 아래 팝업창을 유지한채로 웹사이트로 이동한다. 이동할 웹사이트는 친절하게 Go to your account on Shiny Apps로 클릭할 수 연동되어 있으니 클릭해주면 된다. 클릭 후 우측 상단의 Dashboard 메뉴를 클릭한다.

이제 Tokens을 찾아야 하는데, Tokens는 왼쪽 메뉴에 [Account]-[Tokens]-[Add Token]를 순서대로 클릭한다.

그러면 Token & Secret에 값이 생성 될 것인데, 이 때 [show] 버튼을 클릭하면 다음과 같은 이미지에서 [Show Secret] 버튼을 클릭한 후 전체 소스코드를 복사한다.

복사한 소스코드는 Connect ShinyApps.io Account에 붙여넣기 한후 Connect Account를 실행한뒤 Publish to Server 팝업창에서 Publish 버튼을 클릭하면 연동이 완료된다. 이 때 Shiny Project Title은 URL에 적용되므로 참고하기를 바란다. 강사는 shinyProject_Test 이름으로 Title을 적용했다.

Publishing을 진행하면 Deploy창이 활성화되면서 아래와 같은 메시지가 출력이 되기 시작할 것이다. App이 무거우면 배포하는데도 시간이 소요되므로 이 부분은 참고하기를 바란다.

Preparing to deploy application...DONE
Uploading bundle for application: 2027237...DONE
Deploying bundle: 2948176 for application: 2027237 ...
Waiting for task: 709961221
  building: Building image: 3271985
  building: Installing packages
  building: Installing files
  building: Pushing image: 3271985
  deploying: Starting instances
  success: Stopping old instances
Application successfully deployed to https://chloevan.shinyapps.io/shinyProject_Test/
Deployment completed: https://chloevan.shinyapps.io/shinyProject_Test/

참고로 이왕 배포하는 시간에 대해 굳이 비교하자면, 확실히 RStudio에서 배포하는 속도는 강사가 블로그를 작성하는 go언어 기반으로 작성된 hugo + github.io보다 속도는 체감적으로 많이 느린감이 있다.

IV. 배포 확인

V. 결론

RStudio를 활용하면 무료로 배포를 하는데, 간단한 클릭만으로도 배포를 할 수 있음을 확인할 수 있다.

어떤 수강생들이 이런 질문을 한적이 있다.

Linux에서 배포를 하고 싶어요, 클라우드에서 배포를 하고 싶어요, 도커에서 배포를 하고 싶어요,

결론부터 말하면 모두 가능하다. Shiny를 개발단에서 확인하고 싶다면, 정식문서를 참고하기를 바란다. 공식문서: Shiny Server Professional v1.5.13 Administrator’s Guide

VI. Reference

shinyapps.io team., (2020, March 5). shinyapps.io user guide. Retrieved March 31, 2020, from https://docs.rstudio.com/shinyapps.io/

Congratulation! You Mastered Deployment in Shiny