PHpullh
학습 라이브러리/Kotlin/실패 안전 패턴 (Fail-Safe)

KOTLIN · 예외처리

실패 안전 패턴 (Fail-Safe)

실패 시에도 시스템이 안전하게 동작하도록 폴백과 기본값 전략을 설계합니다.

예외처리중급fail-safefallbackresiliencegraceful-degradation

핵심 설명

실패 시에도 시스템이 안전하게 동작하도록 폴백과 기본값 전략을 설계합니다.

Kotlin code

class ResilientService {
    private val cache = mutableMapOf<String, String>()

    // 폴백 체인
    suspend fun getData(key: String): String {
        return tryPrimary(key)
            ?: tryCache(key)
            ?: tryFallback(key)
            ?: getDefault(key)
    }

    private suspend fun tryPrimary(key: String): String? = runCatching {
        // 네트워크 호출 시뮬레이션
        if (Math.random() > 0.5) throw RuntimeException("네트워크 오류")
        "서버 데이터: $key".also { cache[key] = it }
    }.getOrNull()

    private fun tryCache(key: String): String? =
        cache[key]?.also { println("캐시 히트: $key") }

    private fun tryFallback(key: String): String? =
        runCatching { "폴백 데이터: $key" }.getOrNull()

    private fun getDefault(key: String): String =
        "기본값: $key"
}

fun main() = kotlinx.coroutines.runBlocking {
    val service = ResilientService()
    repeat(5) {
        val result = service.getData("item-$it")
        println(result)
    }
}

학습 팁

폴백 체인은 우선순위 순서로 데이터 소스를 시도합니다. 각 단계를 독립적으로 테스트할 수 있어 유지보수가 쉽습니다.

주의할 점

폴백이 자동으로 성공하면 사용자가 데이터가 오래된 것을 모를 수 있습니다. 폴백 사용 시 경고나 표시를 함께 제공하세요.

자주 묻는 질문

실패 안전 패턴 (Fail-Safe)란 무엇인가요?

실패 시에도 시스템이 안전하게 동작하도록 폴백과 기본값 전략을 설계합니다.

실패 안전 패턴 (Fail-Safe) 학습 시 주의할 점은 무엇인가요?

폴백이 자동으로 성공하면 사용자가 데이터가 오래된 것을 모를 수 있습니다. 폴백 사용 시 경고나 표시를 함께 제공하세요.