>> Rserve  -   바이너리 R 서버 란? 

일단 TCP/IP서버다. 이 서버는 다른 언어들이(C, Java , php등등) R을 설치하거나 R함수에 대한 링크 없이도, R의 기능들을 사용할수 있도록 하는 프로그램이다.  모든 연결들은 분리된 작업환경(workspace)와 작업폴더를 가진다. 클라이언트측 구현은 C/C++, JAVA, PHP같은 언어들로 구현되어 있다. Rserve는 원격접속, 인증, 파일전송을 지원한다. 통계적 모델이나 시각화 도면(plots)들을 위한 R뒷단(backend)측을 접목하는 것이 주된 사용목적이다. (참고 : https://rforge.net/Rserve/index.html ; Rserve 사이트)

아 그리고 Rserve는 R에서 한번 켜 놓으면, R이 죽어도 데몬 프로그램으로 살아 남는다. 

기능들

- 빠름 ; R의 초기화가 필요없기 때문

- 바이너리 전송 ; 전송 프로토콕은 R 객체를 R텍스트 결과(output)가 아니라, 바이너리 데이터로 전송한다.

- 자동 타입 변환 ; 대부분의 R 데이터 타입들은 고유한 데이터 타입으로 변경된다. 예를 들면 rnorm(10)의 결과는 C/Java 에서 double[10]으로 변환된다. 또한 Java 클라이언트는 RBool, RList같은 R의 새로운 타입을 위한 클래스를 제공한다. 

- 지속성 ; 각각의 연결은 자신만의 namespace (C++개념) 와 작업 디렉토리를 가지고 있다. 당신이 만든 각 객체들은 연결이 종료될때까지 유지된다. 클라이언트는 결과값들을 즉각적으로 가져오거나 만들 필요가 없다. - 클라이언트에 대한 독립성 ; 클라이언트들이 R에 연결된것이 아니기 때문에 RSJava 등등에서 발생하는 쓰레드 문제(issue)가 없다. 

- 안전성 ; Rserve는 서버측 검증을(challenge) 가진 암호화된 사용자/비밀번호 인증을 지원함으로써, 기본적인 안전성을 제공한다. Rserve는 local 연결만 받아들이도록 설정이 가능하다. 

- 파일 전송 ; Rserve 프로토콜은 클라이언트와 서버간에 파일전송이 가능하도록 한다. 이런 식으로 Rserve는 plot 이미지를 생성하는 등의 작업을 위한 원거리 서버로써 사용이 가능합니다. 

- 설정가능 ; 설정들을 조정하기 위해서 파일제공.  사용자인증, 원거리 접근, 파일 전송같은 특성들의 사용여부를 결정할수 있는 설정파일이 있음. 

없는 기능

- Callback 기능: 응용프로그램에서 TCP/IP와 R소켓으로 구현가능하나 Rserve에 포함되어 있지는 않음.

- Rserve 는 R에대한 telnet 앞단(front-end)이 아니다. 출력된 결과는 전송되지 않는다. Rserve는 빠른 속도를 위해서 바이너리 프로토콜을 쓴다.

- Rserve는 연결간에 thread safe 하다.(쓰레드 안정성이 있다 = 여러 thread가 동시에 사용되어도 안전하다). 그러나 eval 메소드들은 thread safe 하지 않다. 이것은 eval들이 병렬 호출이 아니라는 보장이 없으면, 다양한 쓰레드들이 같은 연결을 사용하지 않아야만 한다.  


>> JRI  

(Java --> R) JRI는 Java /R간의 인터페이스이다.(JRI: Java R Interface) R이 자바 응용프로그램에서 단일 쓰래드로 돌아가도록 한다. 기본적으로 R의 동적 라이브러리를 Java에 넣고, R의 기능들에 Java API를 제공한다. R함수를 단순히 부르는 것 뿐만아리나 동적 interpreter환경(REPL)을 완전히 구현하는 것도 제공한다. 

중요한 점은 JRI는 지금은 rJava의 일부분이라는 것이다. 만약 당신이 그냥 JRI를 사용하고 싶다면 그냥 rJava binary를 설치하는 것으로 충분하다. 이제는 더이상 JRI 단독으로 더 좋은 버전이 출시(release)되지 않는다. JRI는 오직 rJava의 일부분으로서만 출시된다. rJava가 포함된 JRI를 설치하기(locate) 위해서는, R에서 다음의 명령어를 입력하면 된다. system.file("jri", package="rJava")

 만약 당신이 서버/클라이언트 개념이 없는 Java 응용프로그램에서 R을 사용하는 방법을 찾는다면, JRI를 한번 살펴보는게 좋을 것이다. JRI는 R을 자바에 직접 링크하기 위해서 JNI을 사용한다. 

어떤 의미로는 JRI은 rJava의 반대이기도 하고, 혼합될 수도 있다. ( 예를 들면, rJava를 통한 JVM에 반응하는 JRI에서, R코드를 실행 시킬수도 있다. (R에서 rJava로 java코드 사용해 다시 Java속에서 R코드를 사용할 수 있다는 의미로 이해함)) JGR(Java GUI for R) 프로젝트는 R을 위한 Java GUI를 완벽하게 제공하기 위해서, JRI와 rJava의 완전한 사용을 만들고 있다.     

JRI는 고유한(Native) 코드를 사용하지만, 윈도우, 맥, 선, 리눅스등, 자바가 가능한 모든 플랫폼을 지원한다. 
(참고 : https://rforge.net/JRI/)

대부분의 함수들에 대한 설명문서(documents)는 다음 링크에 잇다. ( https://rforge.net/org/docs/ )

JNI는? 

(Java Native Interface) JNI는 프로그래밍 프레임워크이다. 자바 가상머신에서 돌아가는 자바 코드가 다른 고유한 응용프로그램이나 라이브러리들(C,C++, 어셀블리로 짜인)을 호출하거나 또는 이들로부터 호출될수 있는 것이다. 

쉽게 말하면 자바와 다른 언어를 연동하는 솔루션임

JNI는 다른 언어로 작성된 코드를 자바에서 호출할 수 있도록 만들어진 규약이다. 현재는 C/C++에 대한 호출만을 정확하게 지원한다. 어떻게 보면 JNI는 자바가 만들어진 철학과는 반대되는 개념이다.

JNI 의 목적과 특징들

JNI는 이미 다른 언어로 쓰여진 응용프로그램들이 자바 응용프로그램들에 접근가능하도록 해준다. 많은 표준(standard) 라이브러리 클래스들은 사용자나 개발자들에게 기능들을 제공하기 위해서 JNI에 의지하고 있습니다. 예를 들면 file I/O 나 음향 능력등이 있습니다. 표준(standard) 라이브러리 안에 있는, 성능과 플랫폼에 민감한 API 실행(implementations)들은 모든 자바 응용프로그램들이 안전하고 플랫폼 독립적인 방법으로 이런 기능들에 접근하도록 합니다. 

(참고 : http://sinuk.egloos.com/2676307,    http://en.wikipedia.org/wiki/Java_Native_Interface) 

>> rJava 란? 

(R --> JavarJava는 R에서 Java로 이어진 간단한 인터페이스이다. 이것은 .C/.Call의 C인터페이스와 비교하면 비슷하다.  rJava는 (JNI를 통해서) R과 Java사이에 낮은 수준(low-level)의 연결을 제공해준다. 이것은 객체만들기, 메쏘드 호출하기, R로부터 자바 객체들의 필드 접근하기를 제공한다.  

어떤 의미에서 rJava의 반대개념으로 반대방향의 연결을 제공하는 JRI이 있다. (Java에서 불려지는 R을 의미함.) 이것들은 분리된 개체로써 사용될수도 있지만, 최근 JRI는 rJava 패키지의 일부로써 제공된다. 근래에 rJava는 JGR(Java GUI for R), iPlots(자바로된 통계함수), JavaGD(Java Graphics Device)의 일부로써 사용된다. 
(참고 : 
https://rforge.net/rJava/ )

도움이 되셨나요?^^

+ Recent posts