์ฐ๋ฆฌ ํ์ ์ต๊ทผ Azure VM์ ๋ฐฐํฌ๋ Rstudio ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ์ต๋๋ค. ์ต๊ทผ์ ๋ฐฐ๊ด๊ณต API๋ฅผ ํ ์คํธํ๋ ์ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. Rstudio์์ "API ์คํ" ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ด๊ฐ ์ ์ญ ์ต์ ์์ ํน์ ํฌํธ๋ฅผ ์ง์ ํ์ง ์๋ ํ ๋ฐฐ๊ด๊ณต์ด 3k์์ 10k ์ฌ์ด์์ ์์๋ก ์ ํ๋ ํฌํธ์์ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฐ๋ฆฌ ์์ง๋์ด๋ค์ Windows ์ ์ ๋ฐฉํ๋ฒฝ์์ ํฌํธ ์ ๋ฌ ๊ท์น์ ์ค์ ํ ์ ์์ง๋ง ํ ๋ฒ์ ํ๋์ฉ ์ง์ ํด์ผ ํ๋ค๊ณ ๋ค์์ต๋๋ค. : ์ธ๋ค :. ๋ฐฐ๊ด๊ณต์ด ์ ํํ ํฌํธ ๋ฒ์๋ฅผ ์ค์ ํ์ฌ ๋ ์์ ๋ฒ์์ ํฌํธ๋ก ์ฌ์ฉ์ ์ ํํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ์ฌ์ ์ธ ํด๊ฒฐ์ฑ
์ getRandomPort
๋ฅผ ์์ ํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก 3k์์ 10k ๋ฒ์๋ก ์ค์ ํ๊ธฐ ์ ์ getOption("plumber.port_range")์ด ์ค์ ๋์ด ์๋์ง ํ์ธํ๋ ๊ฒ์
๋๋ค.
์๋ ํ์ธ์ ๋ณดํ๊ณ๋ฆฌ์ฌ์ ๋๋ค. ์, ์ต์ ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. getRandomPort์ ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ๊ณ ๊ธฐ๋ฅ์ ๋ ธ์ถํ ์๋ ์์ต๋๋ค. ๋น๋ถ๊ฐ์ findPort ๊ธฐ๋ฅ์ ๋ณต์ ํ์ฌ run ๋ฉ์๋๋ ๋ฐฐ๊ด๊ณต ํฌํธ ์ต์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
options(plumber.port = XYZ)
์์ต๋๋ค. ์ด ๊ฐ์ plumber.R
ํ์ผ ๋ด์์ ๋๋ $run()
๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์ค์ ํ ์ ์์ต๋๋ค.
@schloerke , ํฌํธ๋ฅผ ํ ๋ฒ์ ํ๋์ฉ ์ง์ ํ๋ ๊ฒ์ ์ ์ฌ์ ์ธ ์คํฑ ๊ฐญ ์๋ฃจ์ ์ ๋๋ค. ๋ ๋ง์ ํ์ rstudio ์๋ฒ๋ก ๊ฐ์ ธ์ด์ ๋ฐ๋ผ ํฌํธ ์ฌ์ฉ ์กฐ์ ์ ๋ํด ๊ฑฑ์ ํ์ง๋ง ํฌํธ๊ฐ ๊ฐ๋ณ ๋ฐฐ๊ด๊ณต ํ์ผ์ ํ๋์ฝ๋ฉ๋์ง ์์ ๊ฒฝ์ฐ ๋น๊ต์ ์์ ํ์ด๋ฉด ์ถฉ๋ถํฉ๋๋ค.
@meztez ๋๋ ์ด๊ฒ์ ์ํด ์ฃผ๋ง์ PR ์์ ์ ์์ํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ ๊ฐ์ ์์๊ฐ ์๋ ๋จ์ผ ํญ๋ชฉ์ธ plumber.port_range์ ๋ํด ๋ ๊ฐ์ ๊ฐ๋ณ ์ต์ plumber.port_range.min ๋ฐ plumber.port_range.max๊ฐ ์๋์ง ์ฌ๋ถ์ ๋ํ ๊ท์น์ด ์์ต๋๊น?
๋ค๋ฅธ ์ต์ ์ด ํ์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ์ต์ ์ผ๋ก ๋ฒ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
options("plumber.port" = 4000:7000)
rstudio ์๋ฒ์์ ์ง์ ๋ฐฐ๊ด๊ณต API๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋ ๋ ๋ชจ๋ ๊ฒ์ด rstudio ์๋ฒ ํฌํธ์ ํ๋ก์๋์ด์ผ ํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ทํ์ ์ ์ฌํ ์ค์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋คํธ์ํฌ ๋ฐฉํ๋ฒฝ์์ ํ๋์ ๋ฐ์ ํฌํธ๋ง ํ์ฉํ์ง๋ง ๋ง์ API๋ฅผ ๋์์ ์คํํ ์ ์์ต๋๋ค.
Pro ์ ํ๊ณผ์ ํตํฉ ๋ฌธ์ ์ ๋ํด ์ ๋ชจ๋ฅด์ง๋ง ์ด๊ฒ์ด ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
# plumber.R
options("plumber.port" = httpuv::randomPort(min = 4000, max = 7000, n = 100))
### define the rest of your plumber router...
์๋๋ฉด ๋ฐฐ๊ด๊ณผ ์คํ ์ฌ์ด์ ์๊ฐ ์ฐจ์ด๊ฐ ๋๋ฌด ์ปค์ ๋์ API๋ฅผ ์คํํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๊น?
๊ทธ๋ ์ง ์์ผ๋ฉด 4000:7000
์ ๊ฐ์ ํฌํธ ๊ฐ ๋ฒ์๋ฅผ ์๋ฝํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋์ธ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋ฐ๊พธ์ง ์์ ๊ฒ์
๋๋ค.
๋ด ๊ธฐ๋ฅ ์์ฒญ๊ณผ ๊ด๋ จ๋ ํค์๋์ ๋ํ ๋ฌธ์ ๋ฅผ ๊ฒ์ํ๋ ค๊ณ ์๋ํ์ง๋ง ์ง๊ธ์ #569์ ์ค๋ช ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ, ๋๋ ํน์ ์ ํ ๋ฒ์ httpuv๋ฅผ ์ฌ์ฉํ์ฌ, @schloerke์ ์ ์์ ํ์ํ๋ ์ฌ๋ฌ ์ํฉ์ ์๊ฐ :: randomPort ์ข์ ์๋ฃจ์ ์ด ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ {๋ฐฐ๊ด} ํ์ด ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ณด์ง ์๋ ํ ์ด ๊ธฐ๋ฅ ์์ฒญ์ ์ข ๋ฃํ๊ณ packagedown ์ฌ์ดํธ์ "ํ ๋ฐ ์๋ น" ๋ฌธ์์ @schloerke ์ค๋ํซ์ ํฌํจํ๋๋ก ์๋ก์ด ๋ฌธ์ ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Pro ์ ํ๊ณผ์ ํตํฉ ๋ฌธ์ ์ ๋ํด ์ ๋ชจ๋ฅด์ง๋ง ์ด๊ฒ์ด ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์๋๋ฉด ๋ฐฐ๊ด๊ณผ ์คํ ์ฌ์ด์ ์๊ฐ ์ฐจ์ด๊ฐ ๋๋ฌด ์ปค์ ๋์ API๋ฅผ ์คํํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๊น?
๊ทธ๋ ์ง ์์ผ๋ฉด
4000:7000
์ ๊ฐ์ ํฌํธ ๊ฐ ๋ฒ์๋ฅผ ์๋ฝํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋์ธ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋ฐ๊พธ์ง ์์ ๊ฒ์ ๋๋ค.