Ecosystem News

WebAssembly용 Kotlin, 알파 버전 출시

Read this post in other languages:

최신 Kotlin Multiplatform 타깃 플랫폼인 Kotlin/Wasm이 알파 단계로 올라섰습니다! 이 변화에서 알아야 할 사항을 간략히 요약해 드립니다.

  • JetBrains는 Kotlin/Wasm을 알파 단계로 올려 여러분이 직접 사용해 볼 수 있도록 준비했습니다. 여러분의 의견은 Kotlin을 사용한 웹 애플리케이션 구축의 미래를 만들어가는 데 도움이 됩니다!
  • 알파 릴리스의 Kotlin/Wasm은 사전 프로덕션 시나리오에서 사용할 준비를 마쳤지만 아직 작업이 진행 중인 부분이 많습니다. Kotlin/Wasm에 관한 의사 결정에서 고려하고 우선순위를 정해야 할 사항을 수집하기 위해 커뮤니티의 참여가 필요합니다.
  • Compose for Web(현재 실험적 단계)은 Kotlin/Wasm을 기반으로 합니다. 두 기술을 함께 사용하면 웹 애플리케이션을 위한 선언적 사용자 인터페이스를 100% Kotlin으로 만들 수 있습니다.

Kotlin/Wasm 시작하기

WebAssembly: 최신 Kotlin Multiplatform 타깃

WebAssembly는 브라우저와 그 이상을 대상으로 하는 언어의 표준 컴파일 타깃으로 자리잡고 있습니다. Kotlin/Wasm을 사용하면 Kotlin Multiplatform을 통해 이 새로운 타깃을 활용할 수 있습니다. Kotlin 1.8.20에서 실험적 기술로 Kotlin/Wasm을 처음 도입한 이후 이를 계속해서 개선하고 다듬어 왔습니다.

Kotlin은 자동으로 메모리 관리되는 언어이기 때문에 최근 4단계(표준화)에 도달한 가비지 컬렉션 제안을 기반으로 삼습니다. 즉, 이제 다수의 주요 브라우저에서 기본적으로 이를 사용할 수 있습니다. 예를 들어, Chrome과 Firefox의 최신 버전에서는 별다른 조정 없이 Kotlin/Wasm 애플리케이션을 실행할 수 있습니다. Safari는 현재 아직 Wasm GC를 지원하지는 않지만 JavaScriptCore에 필요한 기능 구현이 이미 진행 중입니다.

Kotlin/Wasm 시작하기

Kotlin/Wasm 커뮤니티에 참여

Kotlin/Wasm을 시작하는 쉬운 방법은 시작하기 페이지를 살펴보는 것입니다. 여기에서는 기술 개요와 Kotlin/Wasm 애플리케이션을 설정하는 방법에 대한 지침을 확인할 수 있습니다. 또한 Compose Multiplatform 등과 함께 브라우저에서 Kotlin/Wasm을 사용하는 방법을 보여주는 데모를 포함하여 Kotlin/Wasm의 다양한 측면을 보여주는 프로젝트 및 예시 프로젝트 링크도 볼 수 있습니다.

Kotlin/Wasm 알파 버전: 기술을 자세히 살펴보고 예제 프로젝트 보기

이제 Kotlin Playground에서 Kotlin/Wasm도 지원합니다. 즉, 브라우저에서 바로 첫 WebAssembly 코드 스니펫을 작성하고 Kotlin/Wasm이 제공하는 기능을 살펴볼 수 있습니다.

사용자가 첫 “Hello World” 예시를 마치고 WebAssembly의 활용 수준을 높일 수 있도록 ‘kotlinx’ 라이브러리 모음을 Kotlin/Wasm에 도입합니다. 여기에는 kotlinx-atomicfu, kotlinx.coroutines, kotlinx.serialization, kotlinx-datetimekotlinx-io가 포함됩니다.

네트워크 애플리케이션 구축을 위한 JetBrains 프레임워크인 Ktor도 WebAssembly에 제공됩니다. 다음 릴리스에서는 Ktor의 HTTP 클라이언트를 사용하여 Kotlin/Wasm 코드에서 바로 네트워크 요청을 수행할 수 있을 것입니다.

Compose Multiplatform: Kotlin/Wasm 기반

Kotlin/Wasm은 특정 UI 프레임워크에 바인딩되지 않습니다. 이는 브라우저에서 Kotlin 코드를 실행하는 일반적인 방법인 동시에, Google의 Jetpack Compose를 기반으로 하는 JetBrains의 선언적 멀티플랫폼 UI 툴킷인 Compose Multiplatform의 실험적 웹 타깃을 위한 기본 기술입니다. 웹용 Compose Multiplatform은 캔버스 기반 렌더링을 사용합니다. 즉, 다른 플랫폼에서와 동일한 레이아웃과 구성 요소를 사용할 수 있습니다. 기본적으로 Material 및 Material 3 디자인 구성 요소가 함께 제공됩니다.

Compose Multiplatform을 사용하면 Android, iOS, 데스크톱, 브라우저(Kotlin/Wasm의 강력한 기능 덕분에) 등 가장 중요한 플랫폼을 타깃으로 하는 공유 애플리케이션을 구축할 수 있습니다. 자신만의 공유 UI를 빌드하려는 경우, 이제 Kotlin/Wasm 타깃도 실험적으로 지원하는 Kotlin Multiplatform 웹 마법사를 사용하여 프로젝트를 생성할 수 있습니다.

성능

WebAssembly는 처음부터 언어에 대한 컴파일 타깃으로 설계되었기 때문에 Kotlin 컴파일러가 소스 코드를 성능 기준에 맞는 WebAssembly 바이트코드로 변환할 수 있습니다. JetBrains는 Kotlin/Wasm의 런타임 성능을 보장하기 위해 정기적으로 벤치마크를 실행합니다. Kotlin/Wasm은 아직 알파 버전이므로 성능 개선을 위한 팀 작업이 계속되고 있지만 아시다시피 Kotlin/Wasm은 이미 거의 모든 매크로 벤치마크에서 Kotlin/JS보다 성능이 뛰어납니다.

마찬가지로, Kotlin/Wasm에서 실행되는 Compose Multiplatform은 이미 JVM에서 동일한 애플리케이션을 실행하는 것과 비슷한 실행 속도를 나타내며 유망한 성능 특성을 보여줍니다.

AnimatedVisibility: Wasm은 JS 구현 시간의 0.5배 소요
LazyGrid: Wasm은 JS 구현 시간의 0.5배 소요
VisualEffects: Wasm은 JS 구현 시간의 0.5배 소요

이러한 벤치마크 결과는 최신 버전의 Google Chrome에서 테스트한 결과이지만 테스트한 다른 브라우저에서도 비슷한 결과가 관찰되었습니다.

진행 중인 작업

알파 단계의 기술로서 Kotlin/Wasm은 빠르게 발전하고 있으며 개선과 기능 강화를 위한 팀의 노력도 한창이므로 아직 작업이 진행 중인 부분이 많습니다.

현재, Kotlin/Wasm의 디버그 지원이 제한적이며 앞으로 기능을 개선하기 위해 노력하고 있습니다. 또한 웹을 타기팅할 때 번들 크기가 중요한 요소라는 점을 알기에, 특히 Compose Multiplatform 프로젝트의 경우 컴파일러에서 생성된 출력을 더욱 최적화하려고 합니다.

WebAssembly가 계속 발전함에 따라 스택 전환, 스레딩 등 새로운 제안이 들어오는 대로 도입할 생각입니다. 또한, Kotlin에 WebAssembly 구성 요소 모델에 대한 지원을 도입하기 위해 노력하고 있습니다. 이를 통해 상호 운용 가능한 Wasm 라이브러리 및 애플리케이션을 구축할 수 있게 될 것입니다. 그뿐 아니라 WebAssembly 시스템 인터페이스인 WASI에 대한 지원을 포함하여 Kotlin/Wasm을 브라우저 외부 개발을 위한 탁월한 타깃으로 만들기 위한 작업도 진행 중입니다. WebAssembly 커뮤니티 그룹의 일원으로서 JetBrains는 WebAssembly VM 공급업체와 적극적으로 협력하여 Kotlin/Wasm을 실행하는 위치에 관계없이 훌륭한 경험을 제공할 수 있도록 하기 위해 노력하고 있습니다.

JetBrains의 목표는 여러분에게 뛰어난 개발자 경험을 제공하고 성능과 번들 크기 측면에서 요구 사항이 충족되도록 하는 것입니다. 이러한 작업이 진전을 이루면 업데이트를 제공하고 더 많은 정보를 공유하겠습니다!

커뮤니티에 가입하여 업데이트를 받고 피드백을 공유하세요!

Kotlin/Wasm 커뮤니티에 참여하기

Kotlin/Wasm에 관심이 있는 팀 및 다른 개발자들과 소통하고 싶다면 Kotlin Slack 토론에 참여해 보세요(여기에서 초대 받기). #webassembly 채널에서 Kotlin과 WebAssembly에 관한 모든 토론을 찾을 수 있습니다.

Kotlin/Wasm은 이제 알파 버전이며, 여러분들의 요구 사항에 따라 기술을 계속해서 발전시키고자 합니다. 문제를 보고하거나, 누락된 API에 관해서 알려주시거나, 원하는 기능을 요청하면 저희에게 큰 도움이 됩니다. 이러한 내용을 알려주실 때에는 YouTrack의 Kotlin 프로젝트에 이슈를 추가하면 됩니다.

JetBrains는 즐거운 마음으로 Kotlin의 다음 단계를 준비하고 있으며 Kotlin/Wasm이 얼마나 멋진 결과물을 만들어낼지 기대됩니다!

Kotlin/Wasm이 실제 어떻게 사용되는지 확인하세요!

2023년 12월 12일 화요일, Kotlin/Wasm 팀장인 Zalim Bashorov가 공식 Kotlin YouTube 채널에서 Kotlin 및 WebAssembly: Unleashing Cross-Platform Power(크로스 플랫폼의 강력한 성능 활용)라는 제목의 라이브 세션을 진행했습니다. 앞으로의 소식도 놓치지 않고 시청하려면 가입하여 알림을 받으세요.

기타 참고 자료

게시물 원문 작성자

Jessie Cho

Sebastian Aigner

image description

Discover more