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>