TBEL 개요
TBEL은 HMI 데이터 변환을 위해 만든 가벼운 스크립트 언어입니다. MVEL을 포크해 보안 제약과 내장 메모리 관리를 더했습니다.
TBEL은 MX On Cloud에서 고객이 쓰는 스크립트, 예를 들어 고급 알람 규칙 조건식에 쓰입니다.
도입 배경
섹션 제목: “도입 배경”TBEL 이전에 MX On Cloud는 서버 쪽 스크립트에 Nashorn(JDK에 포함된 JavaScript 엔진)을 썼습니다. Nashorn은 JDK 11에서 사용 중단되고 JDK 15에서 제거되어, 대안이 두 가지 남았습니다.
- GraalVM JavaScript — 뛰어나지만 런타임이 무겁고 라이선스 제약이 있어, 대부분의 자체 호스팅 배포에는 맞지 않습니다.
- Remote JS Executors — 메시지 큐로 스크립트를 받는 Node.js 프로세스입니다. 동작은 하지만 프로세스 간 통신 지연이 생기고 시스템 자원을 더 씁니다.
TBEL은 외부 프로세스 없이 JVM 안에서 실행되는 빠르고 안전하며 의존성이 없는 스크립트 방식을 제공하려고 만들었습니다.
TBEL과 Nashorn 비교
섹션 제목: “TBEL과 Nashorn 비교”TBEL은 일반적인 변환 스크립트에서 약 1,000배 높은 성능을 냅니다.
| 지표 | Nashorn | TBEL |
|---|---|---|
return msg.temperature > 20 1,000회 반복 | ~16 000 ms | ~12 ms |
| 스크립트당 시작 비용 | 높음(JIT 컴파일) | 무시할 수준 |
| 메모리 격리 | 약함 | 강함(실행별 메모리 한도) |
| 보안 샌드박스 | 직접 구현, 오류 가능성 높음 | 내장(클래스 접근 제한) |
TBEL과 JS Executors 비교
섹션 제목: “TBEL과 JS Executors 비교”| 항목 | Remote JS Executors | TBEL |
|---|---|---|
| 추가 프로세스 | 있음(Node.js) | 불가 |
| 네트워크·큐 오버헤드 | 가능 | 불가 |
| 언어 | 완전한 ES6+ JavaScript | MVEL 기반(Java와 비슷) |
| 사용 사례 | 완전한 JS 생태계가 필요한 복잡한 스크립트 | 일반적인 HMI 변환 |