miniCRAN이란?

    개인과 달리 기업에서는 보안상 기업의 데이터를 외부로 유출되지 않도록 VDI나 외부망으로 접근할 수 없는 폐쇄망을 운영하기도 한다. 요즘과 같이 4차 산업 혁명 시대에서는 내부 및 외부의 데이터를 활용하여 회사, 공장 등의 효율적 관리와 고객의 가치 제고를 위하여 Data Scientist들은 이들 데이터 분석을 한다. Data Sicentist들은 데이터 분석의 도구로써 R을 많이 활용하고 있다. R은 Open source 기반의 tool로써 많은 분석 알고리즘을 제공하고 있으며 지속적으로 package들이 추가 또는 update되고 있다. 그리고 R의 분석 알고리즘들은 용도에 맞게 필요할 때에 다운받아서 추가하는 식으로 사용을 해야 하지만 폐쇄망에서는 외부로 직접 접근을 하지 못하므로 Package를 제공할 서버가 필요하다. 이와 같이 miniCRAN은 폐쇄망 내에서 Package 배포를 위한 서버 구성(Local Repository)을 쉽게 도와주는 R package이다.

 


miniCRAN 실행 환경

    miniCRAN을 사용하기 위해서 몇가지 구성이 필요하다.

 

1. R 프로그램 설치

    miniCRAN은 R package이므로 이를 실행할 R 프로그램을 설치하여야 한다. 또한 miniCRAN을 실행하는 R의 version에 맞는 연관 package를 다운받기 때문에 R프로그램의 version이 매우 중요하다. 예를 들어 R의 version 3.6.1이라면 miniCRAN을 통하여 수집되는 모든 package들은 R 3.6.1에 호환되는 package의 version으로 다운받게 되므로 사내에서 표준 R 버전을 선정하는 것이 중요하다. (주기적으로 표준 version 선정)

 

2. 외부망 연결

    외부에 있는 CRAN mirror 서버로 부터 R의 Package를 다운받아야 하므로 외부 CRAN mirror 서버와 방화벽을 open하거나 Proxy 서버와 연결되어 외부로 접근이 가능해야 한다.

 

3. Web Server 설치(배포 서버로 사용 시)

    외부의 package를 한 곳에 모으는 목적은 외부망으로 접근이 불가능한 개인 PC의 R(R-Studio)이나 서버용 R(R-Studio) 또는 R 운영 서버에 Package를 제공해야 하므로 파일을 배포할 Web Server (Apache, Tomcat 등) 프로그램의 설치가 필요하다. 

 


miniCRAN 실행

1. Install miniCRAN package

    R 또는 R-Studio를 실행한다. (R에서 실행 시)

$ R

 

miniCRAN 패키지를 설치한다.

> install.packages("miniCRAN") 

 

miniCRAN package를 loading한다.

> library(miniCRAN) 

 

 


 

2. available.packages( ) 실행

현재 실행하고 있는 R 버전에 호환되는 모든 package 목록을 수집한다.

> pkgList = available.packages() 

 

위의 실행 결과, package 목록을 및 파일을 다운 받을 수 있는 외부 공개 Mirror 서버 목록을 출력하고 숫자를 입력하여 서버를 선택한다. (한국 서울 서버 선택 시에는 아래와 같이 41번 입력)

--- Please select a CRAN mirror for use in this session --- 
Secure CRAN mirrors 

1: 0-Cloud [https]                   2: Algeria [https] 
3: Australia (Canberra) [https]      4: Australia (Melbourne 1) [https] 
5: Australia (Melbourne 2) [https]   6: Australia (Perth) [https] 
7: Austria [https]                   8: Belgium (Ghent) [https] 
9: Brazil (PR) [https]               10: Brazil (RJ) [https] 
11: Brazil (SP 1) [https]            12: Brazil (SP 2) [https] 
13: Bulgaria [https]                 14: Chile [https] 
15: China (Hong Kong) [https]        16: China (Lanzhou) [https] 
17: China (Shanghai) [https]         18: Colombia (Cali) [https] 
19: Czech Republic [https]           20: Denmark [https] 
21: Ecuador (Cuenca) [https]         22: Ecuador (Quito) [https] 
23: Estonia [https]                  24: France (Lyon 1) [https] 
25: France (Lyon 2) [https]          26: France (Marseille) [https] 
27: France (Montpellier) [https]     28: Germany (Erlangen) [https] 
29: Germany (Göttingen) [https]      30: Germany (Münster) [https] 
31: Germany (Regensburg) [https]     32: Greece [https] 
33: Hungary [https]                  34: Iceland [https] 
35: Indonesia (Jakarta) [https]      36: Italy (Padua) [https] 
37: Japan (Tokyo) [https]            38: Japan (Yonezawa) [https] 
39: Korea (Busan) [https]            40: Korea (Gyeongsan-si) [https] 
41: Korea (Seoul 1) [https]          42: Korea (Ulsan) [https] 
43: Malaysia [https]                 44: Mexico (Mexico City) [https] 
45: Morocco [https]                  46: Norway [https] 
47: Philippines [https]              48: Serbia [https] 
49: Spain (Madrid) [https]           50: Sweden [https] 
51: Switzerland [https]              52: Turkey (Denizli) [https] 
53: Turkey (Mersin) [https]          54: UK (Bristol) [https] 
55: UK (London 1) [https]            56: USA (CA 1) [https] 
57: USA (IA) [https]                 58: USA (KS) [https] 
59: USA (MI 1) [https]               60: USA (MI 2) [https] 
61: USA (OR) [https]                 62: USA (TN) [https] 
63: USA (TX 1) [https]               64: Uruguay [https] 
65: (other mirrors) 

Selection: 41 

 


3. makeRepo( ) 실행

    available.packages( )을 이용하여 얻은 전체 Package 목록을 실제로 다운로드를 하기 위해서 makeRepo()를 실행한다.

 

makeRepo()의
   첫번째 파라미터는 available.packages()가 return한 값이다.
   두번째 파라미터 path는 실제로 파일을 다운받아서 저장할 디렉토리로 일반적으로 web server의 Document Root 위치이다.

   세번째 파리미터 type
       LINUX용 package만 다운 받으려면 type = "source"를 입력하고,

       Windows용 package만 다운 받으려면 type = "win.binary"를 입력하고,
       모두 다운받으려면 type = c("source", "win.binary")를 입력한다.

 

 

아래의 $WEB_HOME은 Web Document Home으로 실제 디렉토리명으로 바꿔줘야 한다.

 

LINUX의 경우

> makeRepo(pkgList, path = "$WEB_HOME", type = "source") 

----- <중략>

trying URL 'https://cran.seoul.go.kr/src/contrib/b6e6rl_1.1.tar.gz' 
Content type 'application/x-gzip' length 4236 bytes 
================================================== 
downloaded 4236 bytes 

trying URL 'https://cran.seoul.go.kr/src/contrib/babar_1.0.tar.gz' 
Content type 'application/x-gzip' length 283704 bytes (277 KB) 
================================================== 
downloaded 277 KB 

----- <중략>

[18684] "$WEB_HOME/src/contrib/reshape_0.8.8.tar.gz" 
[18685] "$WEB_HOME/src/contrib/Matrix_1.2-17.tar.gz" 
[18686] "$WEB_HOME/src/contrib/Matrix_1.2-17.tar.gz" 
[18687] "$WEB_HOME/src/contrib/taxize_0.9.8.tar.gz" 
[18688] "$WEB_HOME/src/contrib/optmatch_0.9-11.tar.gz" 

 
 

Windows의 경우

> makeRepo(pkgList, path = "$WEB_HOME", type = "win.binary") 

----- <중략>

trying URL 'https://cran.seoul.go.kr/bin/windows/contrib/3.5/acepack_1.4.1.zip' 
Content type 'application/zip' length 97986 bytes (95 KB) 
================================================== 
downloaded 95 KB 

----- <중략>

[18684] "$WEB_HOME/bin/windows/contrib/3.5/reshape_0.8.8.zip" 
[18685] "$WEB_HOME/bin/windows/contrib/3.5/Matrix_1.2-17.zip" 
[18686] "$WEB_HOME/bin/windows/contrib/3.5/Matrix_1.2-17.zip" 
[18687] "$WEB_HOME/bin/windows/contrib/3.5/taxize_0.9.8.zip" 
[18688] "$WEB_HOME/bin/windows/contrib/3.5/optmatch_0.9-11.zip" 

 

위의 작업은 수만개의 파일을 다운받고, 다운받은 모든 파일의 변조 여부를 검사하고, Index화 하기 때문에 각 각의 단계마다 매우 오랜 시간이 걸린다. (수시간이 걸립니다.)

 

위의 실행 결과를 보면 디렉토리 구성의 차이가 있음을 알 수 있다.
LINUX용 Package는 소스를 다운받기 때문에 R의 version에 호환되는 소스를 src/contribue 디렉토리에 계속 쌓는다. 즉, R의 버전이 달라도 같은 디렉토리에 쌓아둔다. 

Windows용 Package는 그 버전에 최적화되어 컴파일된 바이너리를 다운 받기 때문에 R의 소숫점 첫째 자리 version으로 디렉토리명을 구성한다. 따라서 버전이 다르면 아예 다운을 받을 수 없다.

 

 


운영시 고려 사항

 

1. 주기적으로 Package Update

    R의 Package들은 Open Source 기반으로 버그 patch나 새로운 package들의 추가가 빈번하므로 매달 또는 분기별로 위의 작업을 주기적으로 수행하여 package의 최신 버전으로의 유지가 필요하다.

 


 

2. 배포 서버가 외부망으로 연결할 수 없는 경우

    miniCRAN으로 Package를 다운받아서 공유하기 위한 서버가 외부망에 연결되어 있지 않아서 위의 작업을 수행할 수 없는 경우도 있다. 이 경우에는 외부망으로 연결이 가능한 PC나 서버에서 위의 명령어를 실행하여 파일을 전체 다운받은 후에 다운 받은 디렉토리를 통째로 압축하여 내부망으로 반입하여 Web 서버의 Document Home 디렉토리에 압축을 풀어주면 된다. 

 


see also : miniCRAN을 활용한 일부 package 다운로드

 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요