@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 문서를 방문하여 확인하세요.
