R 웹 어플리케이션 개발에 대한 연구

R Analytics

“RSS(R StatServer)란 R의 RServe 라이브러리를 이용해서 Java/JSP 기반의 웹 어플리케이션 구축을 위해서 개발한 서버 환경이다.”

유충현
2020-02-26

들어가기

그 시절은 국내에서 R을 사용하는 R 유저가 많지 않을 때 였다. S-PLUS로 데이터분석 프로젝트를 수행하던 시절, MathSoft라는 회사에서 Linux/UNIX에서는 S-PLUS Analytic Server, MS-Windows에서는 StatServer라는 이름의 상용 웹 어플리케이션을 판매하던 시절이었다. S-PLUS라는 통계 소프트웨어(R의 Commercial Version)를 연동하여 웹 어플리케이션을 개발하는 기능을 구현한 제품이었다. 지금의 R Shiny Server 정도로 이해하면 된다. 2006년이던가? 야심차게 R과 연동하는 웹 어플리케이션 서버를 개발했었다. 그리고 최근에 네이버 블로그와 몇 개의 백업 디렉토리에서 그 흔적을 발견하였고, 아련한 추억을 되새기는 차원에서 정리해 보았다. 그 당시에 썼던 글을 있는 그대로 인용해 본다.

2007-6-20

R Web의 현재 모습

작년말부터 R과 Rserve, Mysql(DBMS), Tomcat(웹서버)를 이용해서 Web에서 R을 이용한 어플리케이션을 개발하기 위한 프로그램을 만드는 작업을 시작했었다.

그러나 국내의 IT(엄밀히 말하면 프로그램 개발)업에 종사하면서 업무 외 시간을 이용해서 개인적으로 어떤 일을 하는 것은 정말로 힘들다. 모 회사의 프로젝트를 몇개월 진행하면서 휴일및 공휴일 밤시간대를 포기해야했다. 그러니 처음 기획했던 계획은 답보에 그쳤다. 이제 다시 꺼내서 다듬으려 하니 몇 달의 공백이 크게 느껴진다.

현재까지 만들어진 통계모델 (통계량, 그래프, 집계테이블을 조합한 분석 모델)을 설계하는 관리자 화면이다.

완성도가 높은 프로그램이 완성되면, 상업적인 목적을 배제한 학교등에는 공개할 생각에 있다. 아님 R을 이용한 사업을 구상해 볼 수도 있겠다.

오랜만에 실행시켜 보니 몇개의 버그가 눈에 띈다.

R Web의 스크린샷

Figure 1: R Web의 스크린샷

2007-08-31

RSS 프로젝트

RSS라고 명명했다. R StatServer의 약자이다.

사실 처음 시도한 지는 2년도 더 된다. 지금은 기능을 보강하고, 좀더 완성된 모습의 도구를 만들고 있는 중이다.

R을 이용하여서 웹어플리케이션을 만드는 시도는 이전부터 많은 시도가 있었다. 그러고 이 RSS도 그 중에 하나이다.

언젠가는 멋진 놈이 탄생하리라 생각한다. ^^

RSS 소개

RSS(R StatServer)란 R의 RServe 라이브러리를 이용해서 Java/JSP 기반의 웹 어플리케이션 구축을 위해서 개발한 서버 환경이다.

통계학이 실사구시(實事求是)의 학문이고 궁극적인 목표가 이용후생(利用厚生)이라 생각한다. 이미 교육 현장에서는 R이 통계 이론의 탐구를 위한 훌륭한 교육 도구로 자리를 잡았다고 생각한다. 하지만 산업 전반에서의 통계적 방법론을 구현할 수 있는 도구로서의 R의 모습은 아직 성숙되지 못한 감이 없지 않다.

그것은 기업에서 원하는 Desktop 분석 도구로서의 R이 아니라 응용 프로그램을 구축(System Integration)할 수 있는 수단의 부재도 한 몫 한다고 생각한다. 이런 고민에서 출발해서 RSS(R StatServer)를 개발하게 되었다.

웹 어플리케이션을 기반으로 한 이유는 기업의 응용 프로그램이 웹 기반에서 동작하는 것이 표준이 될 정도로 대중화되었기 때문이다. 그리고 핵심 기술은 JSP에서 동작하는 R custom tag library이다.

RSS(R StatServer)는 플랫폼 독립적으로 설계되기었기 때문에 MS Windows와 UNIX, LINUX에서도 동작이 된다. 본 시스템은 Windows XP에서 R 2.4.X, R 2.5.X, Tomcat 5.5, Tomcat 6.0, Oracle 9i(MySQL 5.X, MySQL 6.X)에서 개발하고 테스트 되었다. 개발 도구는 JDK(Java Development Kit) 1.4.X, 1.5.X를 이용하였다.

RSS 구조

RSS은 기업에서의 어플리케이션을 개발하기 위한 라이센스를 획득하기 위해서 GPL(General Public License)을 따르는 라이브러를 수정없이 사용하였다.

핵심 엔진은 R System이며, R과 인터페이스하기 위한 RServe와 DBMS와 인터페이스하기 위한 RODBC, 그리고 결과를 HTML의 Table tag로 만들기 위한 XML Packages, Tree 객체를 그리기 위한 tree Packages가 사용되었다. Tree를 적용하기 위한 그래픽 포맷은 SVG (Scalable Vector Graphics )를 사용하였다.

RSS의 개념적인 구조는 다음의 그림과 같다.

RSS 구조도

Figure 2: RSS 구조도

R Tag Library 소개

R Tag Library란 R에서 R의 RServe 라이브러리를 이용해서 Java/JSP 기반의 웹 어플리케이션 구축을 위해서 개발한 라이브러리이다.

이 라이브러리는 플랫폼 독립적으로 운영되기 때문에 MS Windows와 UNIX, LINUX에서도 동작이 된다.

현재 개발한 Tag는 다음과 같은 6개의 Tag이다.

Tag 종류

Figure 3: Tag 종류

몇 가지 예제 화면

몇 가지 예제 화면을 예시한다.

R:script Tag 예제

Figure 4: R:script Tag 예제

R:graph Tag 예제

Figure 5: R:graph Tag 예제

R:tree Tag 예제

Figure 6: R:tree Tag 예제

2007-11-10 추계학술논문 발표회

2007년 한국통계학회에서 진행한 추계학술논문 발표회에서 발표하였다.

발표 세션 정보

Figure 7: 발표 세션 정보

논문의 초록이다.
발표 논문 초록

Figure 8: 발표 논문 초록

다음은 발표 슬라이드에서의 개요 부분이다.

발표 슬라이드는 여기에 링크되어 있다.

아쉽게도 논문의 본문을 찾을 수 없었다. 인쇄된 논문집이 있었는데, 몇번 이사를 하면서 분실한 것 같다.

2009년 어느 시점의 AIS

어느 순간 이름이 RSS에서 AIS로 바뀌어 있었다.

AIS의 개념

Analytic Intelligence Server(AIS)는 통계 프로그램 언어인 R 기반의 솔루션으로 Predictive Model, Multi-Dimension Analysis, Visualization 등의 통계적 자료분석의 방법론을 웹 어플리케이션에 구현할 수 있는 통계분석 서버입니다.

AIS의 개념

Figure 9: AIS의 개념

AIS 시스템 구성도

RSS에 R:Lattice 태그가 추가되어서 8개의 Tag를 지원하고 있다.

AIS의 시스템 구성도

Figure 10: AIS의 시스템 구성도

AIS 주요 내용

AIS의 주요 내용

Figure 11: AIS의 주요 내용

AIS 구현 방법

AIS의 구현 방법

Figure 12: AIS의 구현 방법

에필로그

그 당시에는 나름 global Product에서 AIS를 따라올 제품이 없었다. 아쉬운 점은 R 패키지로 구성되는 서버임에도 CRAN에 올려 오픈소스화 하지 못한 점과, 지속적으로 업그레이드하지 않고 사장시켰다는 점이다.

주인을 잘못 만나 빛을 제대로 보지 못한 AIS에게 미안함이 드는 밤이다. 나름 Linux/UNIX에서는 S-PLUS Analytic Server에 견줄만 했는데…

“아 그렇게 열성적인 적도 있었구나!” 다시한번 발자취를 뒤돌아보는 기회였다.

Citation

For attribution, please cite this work as

유충현 (2020, Feb. 26). Dataholic: R 웹 어플리케이션 개발에 대한 연구. Retrieved from https://choonghyunryu.github.io/posts/2020-02-26-R_web_application/

BibTeX citation

@misc{유충현2020r,
  author = {유충현, },
  title = {Dataholic: R 웹 어플리케이션 개발에 대한 연구},
  url = {https://choonghyunryu.github.io/posts/2020-02-26-R_web_application/},
  year = {2020}
}