이 글의 원문은 여기서 확인 가능하며 블로그 리뷰에는 김태호(Google)님이 참여해주셨습니다.
Kotlin에서 가벼운 컴파일러 플러그인을 빌드하기 위한 새로운 도구인 KSP(Kotlin Symbol Processing)가 이제 안정화되었습니다! KSP는 KAPT(Kotlin Annotation Processing Tool)와 비슷한 기능을 제공하지만, 최대 2배 더 빠르고, Kotlin 언어 구문에 직접 액세스할 수 있으며, 멀티플랫폼 타겟을 지원 합니다.
지난 몇 달 동안 KSP는 총 32차례의 릴리스를 거쳤으며, 이 과정에서 Android 팀은 개발자 커뮤니티에서 발견한 162개 이상의 버그를 수정했습니다. KSP를 채택을 기다리고 계셨다면, 지금 바로 확인해 보세요.
KSP를 만든 이유
Android 팀은 앱을 작성하면서 어려운 점이 무엇인지 정기적으로 개발자의 의견을 수렴하고 있습니다. 반복적으로 발생하는 주요 문제 중 하나는 빌드 속도입니다. 수년에 걸쳐 Android 빌드 도구를 꾸준히 개선해온 끝에, 이제 기쁘게도 KSP를 통해 또 하나의 개선 사항을 더하게 되었습니다. KSP는 Kotlin의 차세대 주석 처리 도구로, Kotlin 개발자의 빌드 속도를 크게 높여주고 KAPT와는 달리 Kotlin/Native 및 Kotlin/JS를 위한 지원을 제공합니다.
"Room에 KSP에 추가함으로써 컴파일 속도를 올릴 수 있었습니다. 이 뿐만 아니라, 제네릭의 null 허용 여부와 같이 KAPT로는 불가능했던 것들이 가능해지면서 Room이 Kotlin 코드를 더 잘 이해할 수 있게 되었습니다. 이를 통해 Kotlin 코드 생성과 같은 새로운 가능성이 열렸으므로, 결국 Room이 앞으로 더 나은 Kotlin 사용자 경험을 갖추게 될 것입니다." - Yigit Boyar, Android 소프트웨어 엔지니어
KSP가 더 빠른 이유는?
KAPT(Kotlin Annotation Processing Tool)는 Java의 주석 처리 인프라와 호환되며, 대부분의 Java의 어노테이션 프로세서가 Kotlin에서 즉시 작동하게끔 합니다. 이를 위해, KAPT는 Kotlin 코드를 Java 어노테이션 프로세서가 처리할 수 있도록 Java 스텁으로 컴파일합니다. 하지만 이런 스텁을 만들려면 상당한 대가를 치러야 하는데, 컴파일러가 프로그램의 모든 기호를 여러 번 확인해야 하기 때문입니다. (한 번은 스텁을 만들기 위한 확인, 또 한 번은 실제 컴파일 수행을 위한 재확인)
KSP는 Kotlin 컴파일러 플러그인으로서 작동하기에 스텁 생성 모델과 다르며, Java 어노테이션 프로세서에 의존하지 않고 Kotlin에서 직접 소스 프로그램과 리소스를 읽고 분석할 수 있도록 해줍니다. 따라서 빌드 속도가 크게 높아질 뿐 아니라(Room의 Kotlin 테스트 앱의 경우 최대 2배 더 빠름), Kotlin/Native 및 Kotlin/JS와 같은 비 Android 및 비 JVM 환경에 KSP를 사용할 수 있습니다.
시작 방법
KSP를 사용하려면 우선 GitHub에서 KSP 플레이그라운드 프로젝트를 다운로드하세요. 이 프로젝트를 통해 주석 프로세서와 앱/라이브러리로서 KSP를 사용하는 법을 배울 수 있습니다.
앱 개발자라면 지원되는 라이브러리 목록과 KAPT에서 KSP로 모듈을 옮기는 데 필요한 빠른 시작 가이드를 확인해보세요.
KSP와 함께 Moshi 또는 Room 사용
프로젝트에서 Moshi 또는 Room을 사용하는 경우, 모듈의 빌드 파일을 빠르게 수정하면 바로 KSP를 사용해 볼 수 있습니다. 예를 들어, Gradle 모듈에서 Room의 KSP 버전을 사용하려면 KAPT 플러그인을 KSP로 교체하고 KSP 종속 항목을 바꾸기만 하면 됩니다.
apply plugin: 'com.google.devtools.ksp'
dependencies {
...
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
ksp "androidx.room:room-compiler:$room_version"
}
자세한 내용은 Room 출시 노트를 확인하세요.
결론
KSP 1.0 릴리스를 통해 KAPT 기반 라이브러리에서 마이그레이션할 때 Kotlin 프로젝트의 빌드 시간이 개선되었다는 점을 확인하실 수 있습니다. 오늘 바로 사용할 수 있으며, 성능 면에서 상당히 개선된 여러 가지 Android 전용 라이브러리도 함께 업데이트되었습니다.