Unlimited Javascript
UJS는 웹앱이 로컬에서 코드를 실행할 수 있도록 해 주는 플랫폼입니다.
UJS를 이용하여 브라우저만으로는 돌리지 못하는 코드를 돌려 진정한 웹 앱을 구현할 수 있습니다.
로컬에서 코드를 안전하게 실행하기 위해서 환경이 통제된 Node나 가상환경을 제공하는 docker를 사용합니다. 또한 기본적인 파일 입출력을 위해서 workspace 폴더를 제공해줍니다. 편의를 위해 파일 탐색기를 여는 기능도 지원합니다.
UJS의 목적은 시스템과 웹의 경계를 무너트리고 어플리케이션을 작성 할 수 있도록 만드는것 입니다.
UJS 앱에서는 spawnDocker 또는 spawnNode를 이용해 ujs 프로세스를 생성할 수 있습니다. 옵션으로 필요한 권한을 넘겨주면 됩니다. error 이벤트는 프로세스 에러를, close 이벤트는 프로세스의 종료를 나타내는 이벤트입니다. stdout과 stderr는 각각 출력과 오류 출력 이벤트입니다. message 이벤트는 프로세스와의 통신을 위해서 사용됩니다.
execF 함수는 프로세스에 실행 명령을 내리는 가장 중요한 함수입니다. execF에서 실행되는 코드에서는 특수한 기능들을 사용할 수 있는데, dependencies, dirs, rDirs, ports와 같은 상수들을 이용해서 현재 프로그램이 갖고 있는 권한 그리고 설치되어 있는 모듈들을 알 수 있습니다.
onMessage, sendMessage를 이용해 UJS 앱과 통신할 수 있습니다. 파일 탐색기 권한이 있다면, openExplorer로 파일 탐색기를 열 수 있습니다. 허용되지 않은 폴더는 openExplorer를 통해 열거나 fs를 통해서 접근할 수 없습니다.
UJS 프로그램을 종료하면 도커 컨테이너를 포함해 실행되고 있던 모든 프로세스들이 종료 또는 삭제됩니다.