9P by xguru 15일전 | favorite | 댓글과 토론
  • TeaVM은 Java 개발자가 JavaScript 개발 스택의 복잡함 없이 웹 애플리케이션을 개발하도록 돕는 도구
  • Ahead-of-time 컴파일러로 Java 바이트코드를 JavaScript 및 WebAssembly로 변환해 브라우저에서 실행되도록 만듦
  • GWT와 유사하지만, 소스 코드 대신 바이트코드(class 파일)를 사용하므로 Kotlin과 Scala도 지원함
  • Maven 아키타입이나 Gradle 플러그인을 통해 새 프로젝트를 쉽게 설정할 수 있음
  • npm, Webpack, Babel과 같은 복잡한 설정이 필요 없으며 TeaVM이 모든 작업을 자동으로 처리
  • 빠른 컴파일 속도를 제공하며, 결과로 나오는 JavaScript는 가볍고 빠르게 실행
  • 모바일 기기에서도 빠른 시작 시간과 실행 성능을 보여줌

TeaVM의 목적

  • 웹 프론트엔드 개발을 주요 목표로 함
  • 기존 Java 또는 Kotlin 코드베이스 전체를 JavaScript로 변환하는 용도가 아님
  • Java는 브라우저에서 효율적으로 실행되도록 설계되지 않았고, Java API 중 일부(리플렉션, 리소스, 클래스 로더, JNI 등)는 효율적으로 구현하기 어려우므로 사용을 제한함
  • TeaVM이 필요한 경우
    • Java 개발자로서 웹 프론트엔드를 처음부터 개발하려는 경우
    • Java 기반 백엔드를 사용 중이며 프론트엔드 코드와 긴밀히 통합하려는 경우
    • 일부 백엔드 코드를 프론트엔드에서 재사용하려는 경우
    • TeaVM의 제약에 맞게 코드를 재작성할 준비가 되어 있는 경우

TeaVM의 강점

  • 원래 코드 구조를 재구성해 수동으로 작성한 것과 유사한 JavaScript를 생성함
  • 고급 최적화 도구가 다음과 같은 작업을 수행:
    • 죽은 코드 제거로 매우 작은 JavaScript 생성
    • 가상 호출을 정적 함수 호출로 변환해 성능 최적화
    • 하나의 변수로 여러 로컬 변수를 재사용해 메모리 효율 극대화
    • 메서드 이름을 가능한 짧게 최적화 (UglifyJS는 보통 이런 최적화를 하지 않음)
  • 스레드 지원: JavaScript는 스레드 API를 제공하지 않지만, TeaVM은 그린 스레드를 구현함
  • 빠른 컴파일 속도
  • 소스 맵과 IDEA 플러그인을 통해 IDE에서 바로 디버깅 가능
  • JavaScript와의 상호운용성(interop) API 제공

TeaVM을 사용해야 하는 이유

  • JavaScript 개발자가 만족스러운 환경을 가지고 있다면 TeaVM은 필요하지 않음
  • 그러나 Java, Kotlin, Scala 개발자에게는 큰 이점이 있음:
    • JavaScript 학습에 소요되는 시간과 비용 절감
    • 단일 개발 생태계 활용: 빌드 도구(Maven, Jenkins), 코드 품질 도구(SonarQube) 등을 재사용 가능
    • 백엔드와 프론트엔드 사이의 컨텍스트 스위치를 최소화
  • TeaVM은 백엔드 개발 환경과 동일한 경험을 프론트엔드에서도 제공함

TeaVM 0.11.0 릴리스: WebAssembly GC 지원

  • TeaVM의 새로운 0.11.0 버전WebAssembly GC를 지원함
  • 이로 인해 성능이 향상되었으며, TeaVM 애플리케이션이 ECMAScript로부터 더욱 독립적으로 동작할 수 있게 됨