공지

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

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

I. 이전 글 소개

처음 shiny를 접하거나 shiny의 전체 튜토리얼이 궁금한 사람들을 위해 이전 글을 소개한다. - shiny tutorial 01 - get started - shiny tutorial 02 - Shiny Structure - shiny tutorial 03 - HTML content - shiny tutorial 04 - Shiny Layouts

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 실행

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

(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언어 기반으로 작성된 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