WSl을 이용해 R 사용하기
Using R on WSL(Windows Subsystem for Linux)
WSL에 Rstudio-server를 설치하면 윈도우 브라우저를 통해 리눅스 버전의 R을 사용할 수 있는데, 이를 위한 기본적인 설정 방법과 의존성 문제 해결방법 등을 정리해서 올린다. WSL은 우분투 18.04 LTS 버전을 기준으로 한다.
1. Microsoft R Open 설치
우분투는 기본저장소를 통해 R 패키지를 제공하고 있다. 사용자는 우분투 터미널 창에 sudo apt install r-base r-base-core
명령문을 실행시켜 간단하게 R을 설치할 수 있다. 그러나 이번에는 기본 R이 아닌 MS사가 제공하는 MRO(Microsoft R Open) 버전의 R을 설치하는 것을 택했다. 기본 R이 최신버전인 R_3.6이 아니라 R_3.4 이기도 하고, 들리는 말로는 MRO가 멀티 쓰레드 연산에 이점이 있다고 하니 기왕이면 MRO를 설치하자.
먼저 MRO링크를 방문하여 우분투용 설치파일을 윈도우 다운로드 폴더에 다운받는다. 현재 MRO 최신버전은 3.5.3이다. 그리고 우분투 bash terminal에 다음의 코드를 실행시킨다.
$ cd /mnt/c/Users/사용자명/Downloads
$ tar -xf microsoft-r-open-3.5.3.tar.gz
$ cd microsoft-r-open
$ sudo ./install.sh
WSL에서는 윈도우10 폴더가 마치 외장하드인 마냥 접근할 수 있다. cd /mnt/c/Users/사용자명/Downloads
를 통해 윈도우의 다운로드 폴더에 접근한 후, 다운받은 파일인 microsoft-r-open-3.5.3.tar.gz을 압축해제하여 설치 스크립트 sudo ./install.sh
를 실행한다.
설치과정을 완료하고 다시 우분투 터미널에 R
을 치면 터미널 상에 다음과 같은 화면이 나온다. MRO 설치가 완료되었다.
2. Rstudio-Server 설치
이제 윈도우의 웹브라우저를 통해 WSL의 R에 접속하여 사용할 수 있도록 Rstudio-server를 설치해야 한다. 방법은 매우 간단하다. 링크에 나온 설명을 따라 그대로 우분투 터미널에 다음의 코드를 입력하면 된다.
$ sudo apt install gdebi-core
$ wget https://download2.rstudio.org/server/trusty/amd64/rstudio-server-1.2.5001-amd64.deb
$ sudo gdebi rstudio-server-1.2.5001-amd64.deb
버전이 업데이트 되면 위의 코드가 조금씩 변경될 수 있으니 반드시 링크의 내용을 확인하자.
설치과정이 완료되고 다시 우분투 터미널에 다음의 코드를 입력하면 Rstudio-server가 실행되며 윈도우의 브라우저 에서 접속할 수 있는 상태가 된다.
$ sudo rstudio-server start
$ sudo rstudio-server stop
sudo rstudio-server start
는 Rstudio-server를 실행시키는 명령어 이고 sudo rstudio-server stop
은 Rstudio-server를 종료시키는 명령어이다. 작업이나 분석이 끝나면 꼭 sudo rstudio-server stop
를 입력하여 R 서버를 종료시키자.
sudo rstudio-server start
코드를 입력하여 서버를 실행시켰다면 윈도우 브라우저 주소창에 localhost:8787
을 입력하자. 파이어폭스, 크롬, 익스플로러, 엣지… 어느 브라우저를 이용해도 상관없다. 다만 개인이 운용하는 서버나 AWS등의 클라우드 서버를 운용할 경우 localhost:8787
의 localhost 대신 서버 ip주소를 입력해야 한다.
브라우저에 다음과 같은 화면이 뜨면 정상적으로 작동한 것이다. 화면의 Username과 Password는 WSL의 개인 사용자명과 비밀번호이다. 이제 기본적인 설치과정은 완료되었다.
3. 의존성 문제 해결 및 기본 설정
1) JAVA, rJava 설치
R에서 사용하는 다양한 패키지 중에는 JAVA에 의존하는 패키지가 있다. 예컨대 한글 형태소 분석을 위한 R패키지인 KoNLP는 JAVA와 rJava가 설정되어 있지 않으면 사용할 수 없다. 따라서 JAVA와 관련된 설정을 미리 해두는 것이 좋다.
우분투에서 JAVA를 설치하는 방법은 다양하다. 기본저장소에서 제공하는 Open-JDK를 설치할 수도 있고 오라클에서 제공하는 JDK를 직접 다운받아 설치할 수도 있다. 여기서는 개인적으로 가장 간단하다고 생각하는 방법을 안내한다.
$ sudo apt install default-jdk
$ sudo update-alternatives --config java
$ sudo R CMD javareconf
$ sudo apt install r-cran-rjava
첫번째 코드를 우분투 터미널에 입력하여 JDK를 설치한다. 컴퓨터에 여러가지 버전의 JAVA가 설치되어 있다면 두번째 코드를 실행시켜 실제 이용할 JAVA를 선택한다. 한가지 종류만 설치되어 있을 경우 이 과정은 생략한다.
마지막 코드인 sudo R CMD javareconf
는 자바 환경변수를 설정하는 것이다. 윈도우에서도 JAVA를 설치한 후, 시스템 변수에 JAVA_HOME과 PATH를 추가하는 과정을 거치는데 이와 유사한 작업이라고 볼 수 있다. 우분투에서는 편집기 창을 열어 옵션을 입력함으로써 직접 JAVA환경을 설정할 수도 있지만 여기서는 그냥 간단하게 sudo R CMD javareconf
입력으로 마무리 한다.
네번째 코드인 sudo apt install r-cran-rjava
는 cran을 통해 우분투 시스템 상에 rJava를 설치하는 것이다. 인터넷에는 이 과정을 생략하고 바로 R 스크립트 창에서 install.packages("rJava")
를 실행하면 된다고 하지만 내 경우에 sudo apt install r-cran-rjava
를 생략하면 다음 과정에 오류가 났다.
install.packages("rJava")
자바를 설정하는 마지막 과정으로 R스크립트 상에서 rJava를 설치하기 위한 install.packages("rJava")
를 실행한다.
2) WSL 한글 언어 로케일 설정
다음으로 WSL의 한글 언어팩 설치 및 로케일에 대한 설정을 해야 한다. 이 과정이 없으면 c("UTF-8", "CP949", "EUC-KR")
관련 기본 인코딩 문제가 발생하며 KoNLP 설치가 불가능하다.
다음의 코드를 우분투 터미널에 실행시켜 언어팩을 설치하고 로케일 설정을 변경한다.
sudo apt-get install language-pack-ko
sudo locale-gen ko_KR.UTF-8
한글 언어팩 설치가 완료되면 우분투 터미널에 sudo nano /etc/profile
의 코드를 실행시켜 편집창의 마지막 행에 export LANG=ko_KR.UTF-8
을 추가한다.
sudo nano /etc/profile
export LANG=ko_KR.UTF-8
위의 작업에 이어 우분투 터미널에 sudo nano /etc/default/locale
을 실행시켜 편집창의 마지막 행에 LANG="en_US.UTF-8"
과 LANG="ko_KR.UTF-8"
의 두 줄을 추가한다.
sudo nano /etc/default/locale
LANG="en_US.UTF-8"
LANG="ko_KR.UTF-8"
마지막으로 한글 글꼴을 설치한다. 글꼴이 없으면 나중에 워드클라우드 등의 그래픽작업에서 한글 글꼴이 깨지는 경우가 발생한다. 은글꼴, 백묵글꼴, 나눔글꼴, 구글폰트 등 우분투에서 통상적으로 사용되는 글꼴을 설치한다.
sudo apt-get install fonts-unfonts-core fonts-unfonts-extra fonts-baekmuk fonts-nanum fonts-nanum-coding fonts-nanum-extra fonts-noto-cjk
3) 의존성 문제 해결을 위한 기타 라이브러리 및 R패키지 설치
사용하다 보면 The previous R session was abnormally terminated due to an unexpected crash
의 문구와 함께 R이 갑자기 중단되는 경우가 생긴다. 원인을 찾아보면 SSL오류라거나 의존성 있는 R패키지가 제대로 설치되지 않았다거나 하는 등 문제도 다양하고 해결책도 다양하다. 그냥 다음의 코드를 우분투 터미널에 실행시켜 한꺼번에 해결하자.
sudo apt install libcurl4-openssl-dev libssl-dev libxslt1-dev libxml2-dev
sudo apt install r-cran-rcpp r-cran-inline r-cran-rsqlite r-cran-devtools
sudo apt install gfortran curl
4) 웹페이지 스크래핑 중, R세션이 갑자기 중단되는 문제
R패키지인 rvest를 이용하여 특정 웹의 html페이지를 R로 불러오는 과정에서 The previous R session was abnormally terminated due to an unexpected crash
의 문구와 함께 R이 갑자기 중단되는 경우가 발생했다. 원인은 잘 모르지만 또다른 R패키지 RCurl, curl을 설치하면 이상없이 작동한다.
install.packages(c("RCurl", "curl"))
5) blogdown 운영시 블로그 페이지가 깨지는 문제
윈도우에서 blogdown을 실행시켰을 때는 겪지 못한 문제인데 우분투 R에서 블로그의 새로운 글을 작성하고 ‘blogdown:::serve_site()‘로 사이트를 생성하면 블로그 페이지가 전부 깨지는 문제가 발생했다.
검색하니 블로그 페이지의 주소가 제대로 생성되지 않기 때문이라고 한다. 설정파일인 config.toml에 relativeurls = true
의 옵션을 추가한다.
4. 해결하지 못한 문제
마찬가지로 blogdown에서 블로그를 빌드할 때 생기는 문제이다. 이 블로그의 경우, 블로그 대문에 배경화면이 되는 이미지 파일을 static 폴더에 두었는데, 우분투 상에서 ‘blogdown:::serve_site()‘를 실행하면 배경화면이 나타나지 않는다. static 폴더에 접근이 안되서 생기는 문제라고는 하는데 아직까지 해결책은 찾지 못했다. 이 문제는 차차 해결할 예정이다.