- JRuby는 Ruby의 생산성과 JVM의 성능을 결합한 기술이며, JBang은 간단한 의존성 관리와 실행 환경을 제공
- 두 도구를 결합하여 Ruby와 Java 라이브러리를 통합 활용 가능
-
JBang: Java/Kotlin/Groovy 프로그램을 간단히 실행하고 의존성을 관리할 수 있는 도구
-
JRuby: JVM 위에서 동작하는 Ruby 구현으로, Ruby 생산성과 JVM 성능을 결합
- JRuby에서 Java 라이브러리를 사용하는 데 필요한 의존성 관리(Gradle/Maven 등)는 복잡하고 어려움
- JBang을 활용해 의존성을 간단히 관리하고, JRuby 스크립트를 실행하는 방식을 실험해보기로 함
- Docker 기반 환경 설정
- Amazon Corretto(JDK) 기반의 Docker 이미지를 사용
- JRuby와 JBang을 다운로드 및 설치하여 PATH에 추가
- Dockerfile을 통해 Ruby Gem과 Java 라이브러리를 모두 포함
- 간단한 RunJRuby.java를 작성: JBang을 통해 Java 의존성을 관리하고 JRuby 스크립트를 실행
-
ProcessBuilder
로 JRuby 실행 환경 구성
- CLASSPATH 설정을 통해 Java 의존성을 JRuby에 전달
- Javalin(Java 기반 웹 프레임워크)을 JRuby와 함께 사용하여 REST API 구축
- JWT 인증 추가, SQLite DB와의 통합으로 CRUD API 구현
- Java에서는 HTTP, DB 작업 등 고성능 라이브러리 활용, Ruby에서는 비즈니스 로직 처리
- 성능 테스트 결과
- *Apache Benchmark(ab) 도구로 1500개 요청(동시 25개)의 응답 시간 측정 테스트 실행
-
결과: 95% 요청이 10ms 이내에 처리됨
- 최신 Javalin 버전과 Virtual Threads를 사용해 높은 성능 제공
- Ruby와 Java의 장점을 결합하여 생산성과 성능 모두를 충족
- GitHub Repo : jbang-jruby-javalin 참고