문제 해결
Kotlin/Wasm은 알파 단계입니다. 언제든지 변경될 수 있습니다. 프로덕션 환경 이전 단계에서 사용해 주세요. YouTrack을 통해 의견을 주시면 감사하겠습니다.
Kotlin/Wasm은 WebAssembly 내에서 개선 사항과 새로운 기능을 도입하기 위해 가비지 컬렉션 및 예외 처리와 같은 새로운 WebAssembly 제안에 의존합니다.
하지만 이러한 기능이 제대로 작동하도록 하려면 새로운 제안을 지원하는 환경이 필요합니다. 경우에 따라서는 해당 제안과 호환되도록 환경을 설정해야 할 수도 있습니다.
브라우저 버전
Kotlin/Wasm으로 빌드된 애플리케이션을 브라우저에서 실행하려면 새로운 WebAssembly 가비지 컬렉션 (WasmGC) 기능을 지원하는 브라우저 버전이 필요합니다. 브라우저 버전이 새로운 WasmGC를 기본적으로 지원하는지 또는 환경을 변경해야 하는지 확인하세요.
크롬
버전 119 이상:
기본적으로 작동합니다.
이전 버전의 경우:
이전 브라우저에서 애플리케이션을 실행하려면 Kotlin 버전 1.9.20 이전 버전이 필요합니다.
- 브라우저에서
chrome://flags/#enable-webassembly-garbage-collection
으로 이동하세요. - WebAssembly Garbage Collection을 활성화하세요.
- 브라우저를 다시 시작하세요.
- 브라우저에서
크로미움 기반
Edge, Brave, Opera, Samsung Internet과 같은 크로미움 기반 브라우저를 포함합니다.
버전 119 이상:
기본적으로 작동합니다.
이전 버전의 경우:
이전 브라우저에서 애플리케이션을 실행하려면 Kotlin 버전 1.9.20 이전 버전이 필요합니다.
애플리케이션을
--js-flags=--experimental-wasm-gc
명령줄 인자로 실행하세요.
파이어폭스
버전 120 이상:
기본적으로 작동합니다.
버전 119:
- 브라우저에서
about:config
로 이동하세요. javascript.options.wasm_gc
옵션을 활성화하세요.- 페이지를 새로고침하세요.
- 브라우저에서
사파리/WebKit
버전 18.2 이상:
기본적으로 작동합니다.
이전 버전의 경우:
지원되지 않습니다.
Safari 18.2는 iOS 18.2, iPadOS 18.2, visionOS 2.2, macOS 15.2, macOS Sonoma, macOS Ventura에서 사용할 수 있습니다. iOS 및 iPadOS에서는 Safari 18.2가 운영 체제와 함께 번들로 제공됩니다. 사용하려면 기기를 버전 18.2 이상으로 업데이트하세요.
자세한 내용은 Safari 릴리스 노트를 참조하세요.
Wasm 제안 지원
Kotlin/Wasm 개선 사항은 WebAssembly 제안을 기반으로 합니다. 여기에서는 WebAssembly의 가비지 컬렉션 및 (레거시) 예외 처리 제안에 대한 지원 세부 정보를 확인할 수 있습니다.
가비지 컬렉션 제안
Kotlin 1.9.20부터 Kotlin 툴체인은 Wasm 가비지 컬렉션 (WasmGC) 제안의 최신 버전을 사용합니다.
이러한 이유로, Wasm 프로젝트를 최신 Kotlin 버전으로 업데이트할 것을 강력히 권장합니다. 또한 Wasm 환경과 함께 최신 버전의 브라우저를 사용할 것을 권장합니다.
예외 처리 제안
Kotlin 툴체인은 기본적으로 레거시 예외 처리 제안을 사용하며, 이는 생성된 Wasm 바이너리를 더 넓은 범위의 환경에서 실행할 수 있도록 합니다.
Kotlin 2.0.0부터 Kotlin/Wasm 내에 Wasm 예외 처리 제안의 새로운 버전에 대한 지원이 도입되었습니다.
이 업데이트는 새로운 예외 처리 제안이 Kotlin 요구 사항과 일치하도록 보장하며, 해당 제안의 최신 버전만 지원하는 가상 머신에서 Kotlin/Wasm을 사용할 수 있도록 합니다.
새로운 예외 처리 제안은 -Xwasm-use-new-exception-proposal
컴파일러 옵션을 사용하여 활성화됩니다. 기본적으로 비활성화되어 있습니다.
Kotlin/Wasm 예제를 통해 프로젝트 설정, 종속성 사용 및 기타 작업에 대해 자세히 알아보세요.
기본 임포트 사용
JavaScript로 Kotlin/Wasm 코드 임포트하기는 명명된 내보내기(named exports) 방식으로 전환되었으며, 기본 내보내기(default exports) 방식에서는 벗어났습니다.
기본 임포트를 계속 사용하려면 새로운 JavaScript 래퍼 모듈을 생성하세요. 다음 스니펫으로 .mjs
파일을 생성하세요:
// Specifies the path to the main .mjs file
import * as moduleExports from "./wasm-test.mjs";
export { moduleExports as default };
새로운 .mjs
파일을 resources
폴더에 배치하면 빌드 프로세스 중에 자동으로 주 .mjs
파일 옆에 배치됩니다.
.mjs
파일을 사용자 지정 위치에 둘 수도 있습니다. 이 경우 수동으로 주 .mjs
파일 옆으로 이동하거나 임포트 문(import statement)의 경로를 해당 위치와 일치하도록 조정해야 합니다.
Kotlin/Wasm 컴파일 속도 저하
Kotlin/Wasm 프로젝트 작업 시 컴파일 시간이 느려질 수 있습니다. 이는 Kotlin/Wasm 툴체인이 변경 사항이 있을 때마다 전체 코드베이스를 재컴파일하기 때문입니다.
이 문제를 완화하기 위해 Kotlin/Wasm 타겟은 증분 컴파일(incremental compilation)을 지원하며, 이는 마지막 컴파일 이후 변경된 파일만 컴파일러가 다시 컴파일할 수 있도록 합니다.
증분 컴파일을 사용하면 컴파일 시간을 단축할 수 있습니다. 현재로서는 개발 속도를 두 배로 높여주며, 향후 릴리스에서 추가 개선이 예정되어 있습니다.
현재 설정에서는 Wasm 타겟의 증분 컴파일이 기본적으로 비활성화되어 있습니다. 활성화하려면 프로젝트의 local.properties
또는 gradle.properties
파일에 다음 줄을 추가하세요:
kotlin.incremental.wasm=true
Kotlin/Wasm 증분 컴파일을 사용해 보고 피드백을 공유해 주세요. 여러분의 의견은 이 기능을 더 빨리 안정화하고 기본적으로 활성화하는 데 도움이 됩니다.