Kotlin Coroutine 실전 적용기
레거시 Java 시스템을 Kotlin으로 마이그레이션하면서 Coroutine을 도입했다.
기존 문제
- Thread Pool 고갈로 인한 타임아웃
- 동시 접속자 증가 시 응답 지연
- 리소스 사용 비효율
Coroutine 도입 후
suspend fun sendMessage(userId: Long, message: Message): Result {
return coroutineScope {
val userDeferred = async { userService.getUser(userId) }
val quotaDeferred = async { quotaService.check(userId) }
val user = userDeferred.await()
val quota = quotaDeferred.await()
if (quota.exceeded) return@coroutineScope Result.QuotaExceeded
messageQueue.send(user, message)
}
}
성능 개선
| 지표 | Before | After |
|---|---|---|
| 평균 응답시간 | 120ms | 45ms |
| P99 응답시간 | 800ms | 180ms |
| 처리량 | 8,000 RPS | 35,000 RPS |
Thread 대비 메모리 사용량이 1/10로 줄었다.