Kotlin 데몬
Kotlin 데몬
Kotlin 데몬(Kotlin daemon)은 빌드 시스템이 컴파일러와 그 환경을 컴파일할 준비가 된 상태로 유지해서 빌드 시간을 개선하는 데 사용할 수 있는 백그라운드 프로세스예요. 이 방식은 컴파일할 때마다 새 Java Virtual Machine(JVM) 인스턴스를 시작하고 컴파일러를 다시 초기화하는 것을 피할 수 있어서, 증분 빌드(incremental build)나 자주 발생하는 작은 변경에서 빌드 시간을 줄여줘요.
출처: Kotlin daemon
본문
일부 빌드 시스템에는 Gradle 데몬이나 Maven 데몬처럼 시작 비용을 줄이는 데 도움이 되는 자체 데몬이 있어요. Kotlin 데몬을 사용하면 시작 비용을 줄이면서도 빌드 시스템 프로세스를 컴파일러로부터 완전히 격리할 수 있어요. 이 분리는 런타임에 시스템 설정이 바뀔 수 있는 동적인 환경에서 유용해요.
Kotlin 데몬은 사용자에게 직접 보이는 인터페이스가 없지만, 빌드 시스템이나 빌드 도구 API를 통해 사용할 수 있어요.
Kotlin 데몬 설정
Gradle이나 Maven용 Kotlin 데몬의 일부 설정을 지정하는 방법이 있어요.
메모리 관리
Kotlin 데몬은 클라이언트와 분리되어 각자의 메모리 공간을 갖는 별도 프로세스예요. 기본적으로 Kotlin 데몬은 시작하는 JVM 프로세스의 힙 크기(-Xmx)를 물려받으려고 해요.
-Xmx나 -XX:MaxMetaspaceSize 같은 특정 메모리 한도를 설정하려면 다음 속성을 사용하면 돼요.
kotlin.daemon.jvmargs=-Xmx1500m
더 자세한 내용은 kotlin.daemon.jvmargs 속성을 참고하세요.
<kotlin.compiler.daemon.jvmArgs>-Xmx1500m</kotlin.compiler.daemon.jvmArgs>
수명(Lifetime)
Kotlin 데몬에는 두 가지 흔한 수명 전략이 있어요.
- 부착 데몬(Attached daemon): 클라이언트 프로세스가 종료된 직후나 데몬을 한동안 사용하지 않으면 데몬을 종료해요. 클라이언트가 오래 실행되는 경우 사용해요.
- 분리 데몬(Detached daemon): 후속 요청을 기다리기 위해 데몬을 더 오래 살려둬요. 클라이언트가 짧게 실행되는 경우 사용해요.
수명 전략을 설정하려면 다음 옵션을 사용할 수 있어요.
| 옵션 | 설명 | 기본값 |
|---|---|---|
autoshutdownIdleSeconds |
클라이언트가 아직 연결되어 있을 때 마지막 컴파일 후 데몬이 얼마나 오래 유지될지 | 2시간 |
autoshutdownUnusedSeconds |
사용되지 않을 때 새로 시작된 데몬이 첫 클라이언트를 기다렸다가 종료하기까지 걸리는 시간 | 1분 |
shutdownDelayMilliseconds |
모든 클라이언트가 연결을 끊은 후 데몬이 종료를 기다리는 시간 | 1초 |
부착 데몬 수명 전략을 설정하려면 autoshutdownIdleSeconds를 높은 값으로, shutdownDelayMilliseconds를 낮은 값으로 설정해요.
gradle.properties 파일에 다음을 추가하세요.
org.gradle.jvmargs=-Dkotlin.daemon.jvm.options=autoshutdownIdleSeconds=7200,shutdownDelayMilliseconds=1000
다음 명령을 사용하세요.
mvn package -Dkotlin.daemon.options=autoshutdownIdleSeconds=7200,shutdownDelayMilliseconds=1000
분리 데몬 수명 전략을 설정하려면 shutdownDelayMilliseconds를 높은 값으로 설정해요.
gradle.properties 파일에 다음을 추가하세요.
org.gradle.jvmargs=-Dkotlin.daemon.jvm.options=shutdownDelayMilliseconds=7200
pom.xml 파일에 다음 속성을 추가하세요.
<kotlin.compiler.daemon.shutdownDelayMs>7200</kotlin.compiler.daemon.shutdownDelayMs>