Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

인터넷 접속이 불가능 한 내부망에서의 R package 설치방법에 대해

05 Mar 2017 » R



(지금은 그렇지 않은데) 이전에 일하던 환경이 망분리(내부망)의 도입으로 인하여
인터넷이 불가능한 상황에서 R을 이용해 분석을 해야 했던 적이 있었다.
특히 보안으로 인한 법 개정인지 몰라도 망분리 도입이 공기업을 시작으로 활발하게 진행하는 듯 싶은데,
이로인한 많은 이슈를 대응해야 하는 사람들 입장에선 많이 피곤할 것으로 생각한다.

오픈소스 소프트웨어 특성상 대부분이 그렇겠지만 인터넷의 의존도는 높을 것이다. (버전의 업데이트 주기가 빠르고 변화에 빠르게 대응한다) 그중 R 언어 역시 마찬가지다.
R 패키지의 설치는 기본적으론 CRAN 을 통해 패키지 리소스들을 요청하고 다운로드 하는데 이것이 불가해진다.
그렇다고 패키지 설치가 아예 불가능한 것은 아니다.
아래의 PPT 슬라이드는 패키지 수동설치에 대한 일반적인 방법 한가지를 설명한다.

위 설명은 가장 쉬운방법이지만
다량의 패키지를 설치하기위해, 그리고 의존성이 걸리는 패키지들까지 설치하기 위한 방법으론 적당하지 않을 수 있다.
다량의 패키지를 수동설치 하고자 한다면 아래 방법도 고려해볼만 하다.



명령어로 설치하기

방법을 소개하기 전에 한가지 집고 넘어가는것이 좋다.
인터넷이 접속안되는 컴퓨터의 환경을 미리 알고 대비하는게 좋다.
윈도우라면 윈도우의 가상머신을.. 리눅스면 리눅스 가상머신을 준비할 수 있다면 준비하자. 1 필자는 편의상 MacOS 인 환경을 기준으로만 설명하겠다.

우선 인터넷이 가능한 말끔한 상태의 가상머신에서
R 설치 및 실행 후
수동설치를 하고자 하는 패키지를 마음껏 install.packages() 함수를 통해 설치한다.
그럼 패키지 리소스인 tgz 압축 파일들이 temp 폴더에 임시로 저장되게 된다.

예를 들어 “car” 패키지를 설치하고 싶은 경우 install.packages("car") 로 가상머신에 설치를 진행하면

/var/folders/tw/crr70_s16xs6frt419xh9b740000gn/T//RtmpkL6bWJ/downloaded_packages 라는 복잡한 경로에 car 패키지 리소스인 car_2.1-6.tgz 파일이 임시로 저장된다.
만약 “car” 패키지의 의존성 패키지가 설치되어있지 않다면 이를 포함하여 다운로드하게 된다.

자신이 임시로 저장하고 싶은 경로를 지정할 수도 있다.
destdir 인자를 이용해 저 복잡한 경로가 아닌 임의의 경로로 지정해 패키지 리소스 파일을 임시로 저장한다.

아래의 예제는 ~/r_package 폴더를 만들고 그곳에 “ape”, “Amelia”, “car” 3개의 패키지 리소스를 저장해 보는 예제이다.

이처럼 준비된 패키지 리소스들을 인터넷이 안되는 머신으로 물리적으로 복사한다.
이후 인터넷이 안되는 머신의 시점으로 돌아간다.
편의상 인터넷 불가한 머신의 ~/r_package 폴더에 Amelia_1.7.4.tgz, ape_5.0.tgz, car_2.1-6.tgz 3개 파일을 복사하였다고 가정하고

위 처럼 install.package() 함수의 repos = NULL 옵션으로
CRAN의 인터넷 접속에 의존하지 않은 채 수동설치가 가능하다.



맺음말

망분리란 고립된 환경, 그외 여러한 제약들 때문에
인터넷을 이용한 패키지 설치가 어려우실 경우
이러한 방법들을 이용해 어느정도 해갈이 되었으면 하는 바램이다.


  1. Virture box, Docker 등 방법은 다양하다↩︎