이번에 준비한 튜토리얼은 제 강의를 듣는 과거-현재-미래 수강생분들을 위해 준비한 자료이다. 많은 도움이 되기를 바란다
이번에 준비한 Tutorial 코로나 세계현황을 Shiny Dashboard
로 만들어 가는 과정을 담았다.
처음 shiny를 접하거나 shiny의 전체 튜토리얼이 궁금한 사람들을 위해 이전 글을 소개한다. - shiny tutorial 01 - get started - shiny tutorial 02 - Shiny Structure - shiny tutorial 03 - HTML content - shiny tutorial 04 - Shiny Layouts
이 영역은 웹개발자에게는 매우 쉬운 영역일 수도 있다. 그러나, 웹 환경에 익숙하지 않은 R 유저에게는 조금 버거울 수도 있다. 2-3번 정도만 반복하면 쉽게 작업하게 될 것이고, Shiny를 클라우드 서버를 통해 배포하는 방법도 익힐 수 있다.
운이 좋게도, RStudio 에서는 무료로 매우 쉽게 배포를 할 수 있도록 하고 있다. 또한 On-Premise(사내 전용) 환경에서 배포할 수 있도록 오픈 소스도 제공하고 있다. 서버는 사실 경제적 비용이 발생하기 때문에, 클라우드로 배포할지, 도커(Docker) 및 오픈소스로 구현하여 배포할지, 고민할 필요는 있다. 배포에 관한 자세한 내용은 Hosting and Deployment에서 확인하기를 바란다.
shiny tutorial 01 - get started에서 소개한 Sample Dashboard는 모두 Shinyapps.io
에서 배포를 하는 중이다. 배포 하는 과정은 어렵지 않으니 간단히 그 과정만 소개한다.
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
버튼을 클릭한다.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
보다 속도는 체감적으로 많이 느린감이 있다.
App
이 다음 URL에서 확인 할 수 있을 것이다. https://chloevan.shinyapps.io/shinyProject_Test/RStudio를 활용하면 무료로 배포를 하는데, 간단한 클릭만으로도 배포를 할 수 있음을 확인할 수 있다.
어떤 수강생들이 이런 질문을 한적이 있다. > Linux에서 배포를 하고 싶어요, 클라우드에서 배포를 하고 싶어요, 도커에서 배포를 하고 싶어요,
결론부터 말하면 모두 가능하다. Shiny를 개발단에서 확인하고 싶다면, 정식문서를 참고하기를 바란다. 공식문서: Shiny Server Professional v1.5.13 Administrator’s Guide
도커에서 배포 예제: Learn How to Dockerize a ShinyApp in 7 Steps
AWS 배포 예제: Deploying a Shiny App with Shiny Server on an AWS EC2 Instance
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