3P by xguru 2일전 | favorite | 댓글 1개
  • 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 참고

Java+Groovy 그 치명적인 Memory leak
JVM 위에서 스크립트를 실행하는 경우 특정 조건에서 memory leak이 발생하는 사례를 봤었는데 jruby는 어떤가 궁금하네요