Skip to content

@Monitor를 사용한 Koin 내장 성능 모니터링

@Monitor 어노테이션(Koin Annotations 2.2.0부터 사용 가능)은 Koin의 공식 툴링 플랫폼인 Kotzilla Platform을 통해 Koin 컴포넌트에 대한 자동 성능 모니터링 및 트레이싱을 활성화합니다.

설정

Kotzilla SDK 의존성을 추가합니다:

kotlin
dependencies {
    implementation "io.kotzilla:kotzilla-core:latest.version"
}

최신 버전은 Kotzilla 문서에서 확인하세요.

모니터링되는 클래스를 확장 가능하게 만들도록 allOpen 플러그인을 설정합니다:

kotlin
plugins {
    id "org.jetbrains.kotlin.plugin.allopen"
}

allOpen {
    annotation("org.koin.core.annotation.Monitor")
}

Koin 설정에서 Kotzilla 분석(analytics)을 초기화합니다:

kotlin
import io.kotzilla.sdk.analytics.koin.analytics

fun initKoin() {
    startKoin {
        // Kotzilla 모니터링 활성화
        analytics()
        modules(appModule)
    }
}

기본 사용법

Koin 컴포넌트에 @Monitor 어노테이션을 추가하기만 하면 됩니다:

kotlin
@Monitor
@Single
class UserService(private val userRepository: UserRepository) {
    fun findUser(id: String): User? = userRepository.findById(id)
    
    suspend fun createUser(userData: UserData): User {
        return userRepository.save(userData)
    }
}

생성된 코드

컴파일러는 컴포넌트를 래핑하는 프록시 클래스를 자동으로 생성합니다:

kotlin
/**
 * Generated by @Monitor - Koin proxy for 'UserService'
 */
class UserServiceProxy(userRepository: UserRepository) : UserService(userRepository) {
    override fun findUser(id: String): User? { 
        return KotzillaCore.getDefaultInstance().trace("UserService.findUser") { 
            super.findUser(id) 
        } 
    }
    
    override suspend fun createUser(userData: UserData): User { 
        return KotzillaCore.getDefaultInstance().suspendTrace("UserService.createUser") { 
            super.createUser(userData) 
        } 
    }
}

Koin은 원본 클래스 대신 프록시를 자동으로 사용하며, 다음 사항들을 투명하게 캡처합니다:

  • 메소드 실행 시간
  • 호출 빈도 및 패턴
  • 오류 발생률 및 유형
  • 성능 병목 현상

ViewModels 모니터링

UI 성능을 추적하려면 ViewModel을 모니터링하세요:

kotlin
@Monitor
@KoinViewModel
class DetailViewModel(private val repository: Repository) : ViewModel() {
    fun loadData(id: String): StateFlow<Data> = repository.getData(id)
}

Kotzilla Platform 연동

모니터링 데이터는 Kotzilla Platform 워크스페이스로 자동 전송되어 다음 기능을 제공합니다:

  • 실시간 성능 대시보드: 메소드 실행 시간 및 추세 확인
  • 오류 추적: 예외 발생률 및 스택 트레이스 모니터링
  • 사용량 분석: 어떤 컴포넌트가 가장 많이 사용되는지 파악
  • 성능 알림: 성능 저하(regression) 발생 시 알림 수신

무료 Kotzilla 계정을 생성하고 kotzilla.json 파일에 API 키를 설정하세요:

json
{
  "sdkVersion": "latest.version",
  "keys": [
    {
      "appId": "your-app-id",
      "applicationPackageName": "com.example.app",
      "keyId": "your-key-id", 
      "apiKey": "your-api-key"
    }
  ]
}

요구 사항

  • @Monitor가 선언된 클래스는 반드시 open이어야 합니다 (allOpen 플러그인에 의해 자동 처리됨).
  • 런타임에 Kotzilla SDK 의존성을 사용할 수 있어야 합니다.
  • 데이터 수집을 위한 유효한 Kotzilla Platform 계정과 API 키가 필요합니다.

INFO

@Monitor 어노테이션은 모니터링되는 클래스 자체의 메소드 호출만 추적합니다. 모니터링되는 클래스에 주입된 의존성은 해당 의존성에도 @Monitor가 선언되어 있지 않으면 자동으로 모니터링되지 않습니다.

NOTE

전체 설치 지침 및 고급 설정 옵션은 Kotzilla 문서를 방문하여 확인하세요.