- 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로부터 더욱 독립적으로 동작할 수 있게 됨