# JRuby 와 JBang : Ruby와 Java의 강력한 조합

> Clean Markdown view of GeekNews topic #18437. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18437](https://news.hada.io/topic?id=18437)
- GeekNews Markdown: [https://news.hada.io/topic/18437.md](https://news.hada.io/topic/18437.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2024-12-26T09:46:01+09:00
- Updated: 2024-12-26T09:46:01+09:00
- Original source: [rockyj-blogs.web.app](https://rockyj-blogs.web.app/2024/12/22/jruby-jbang.html)
- Points: 4
- Comments: 1

## Summary

JRuby는 Ruby의 생산성과 JVM의 성능을 결합한 기술이며, JBang은 간단한 의존성 관리와 실행환경을 제공합니다. 두 도구를 결합하여 Ruby와 Java 라이브러리를 통합 활용 가능하며 생산성과 성능 모두를 충족 가능합니다. 이를 위해 Docker 기반 환경 설정을 통해 Amazon Corretto(JDK) 기반의 Docker 이미지를 사용하여 JRuby와 JBang을 설치하고, Javalin을 활용하여 REST API를 구축하며 JWT 인증과 SQLite DB 통합을 통해 CRUD API를 구현합니다. 성능 테스트 결과, Apache Benchmark 도구로 1500개 요청 중 95%가 10ms 이내에 처리되었으며, 최신 Javalin 버전과 Virtual Threads를 사용하여 높은 성능을 제공합니다.

## Topic Body

- 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](https://github.com/rocky-jaiswal/jbang-jruby-javalin) 참고

## Comments



### Comment 32697

- Author: clickin
- Created: 2024-12-26T09:58:23+09:00
- Points: 1

[Java+Groovy 그 치명적인 Memory leak](https://brunch.co.kr/@heracul/9)  
JVM 위에서 스크립트를 실행하는 경우 특정 조건에서 memory leak이 발생하는 사례를 봤었는데 jruby는 어떤가 궁금하네요
