[kotlin] 코틀린 웹 서버에서 캐싱 기능 추가하기

웹 서버에서 캐싱 기능을 추가하여 사용자 경험과 성능을 향상시킬 수 있습니다. 이번 글에서는 코틀린을 사용한 웹 서버에서 캐싱 기능을 어떻게 추가할 수 있는지 알아보겠습니다.

1. 응답 캐싱 설정

캐싱 기능을 추가하기 위해선 먼저 응답에 캐싱 헤더를 추가해야 합니다. 코틀린에서는 HttpHeaders 클래스를 사용하여 헤더를 설정할 수 있습니다.

import io.ktor.http.HttpHeaders

fun Application.module() {
    install(CachingHeaders) {
        defaults()
        val cacheControlValue = "public,max-age=3600"
        HttpCacheControl.NoStore.appendTo(this)
        append(HttpHeaders.CacheControl, cacheControlValue)
    }
}

위의 예제에서는 install() 함수를 사용하여 CachingHeaders 기능을 추가하고, defaults() 함수를 호출하여 기본 캐싱 헤더를 설정합니다. 그리고 HttpCacheControl.NoStore.appendTo() 함수를 사용하여 캐싱을 비활성화하여 캐시된 응답을 사용하지 않도록 설정합니다. 마지막으로 HttpHeaders.CacheControl 헤더에 원하는 캐싱 제어 값을 추가합니다.

2. 캐싱 제어 설정

응답 캐싱을 구체적으로 제어하기 위해선 Cache-Control 헤더를 사용합니다. max-age 디렉티브를 사용하여 캐시의 유지 시간을 설정할 수 있습니다. 아래의 예제에서는 3600초(1시간) 동안 캐시를 유지하도록 설정합니다.

val cacheControlValue = "public,max-age=3600"
append(HttpHeaders.CacheControl, cacheControlValue)

만약 캐시를 항상 사용하도록 설정하고 싶다면 no-cache 대신 public,max-age=[유지 시간] 값을 설정하면 됩니다.

3. 캐시된 응답 확인

웹 브라우저나 HTTP 클라이언트에서 캐시된 응답을 확인하려면 Cache-Control 헤더에 설정된 캐시 제어 값을 확인하면 됩니다. 만약 캐시된 응답이 있다면 원래 요청을 서버로 보내지 않고 캐시된 응답을 표시합니다.

4. 캐시 무효화

캐시된 응답을 무효화하기 위해서는 캐시 키를 변경하거나 Cache-Control 헤더에서 캐시 제어 값을 변경해야 합니다. 예를 들어, 데이터가 업데이트되었을 때 캐시를 무효화하기 위해 Cache-Control 헤더에 no-cache 값을 설정하여 캐시를 비활성화할 수 있습니다.

append(HttpHeaders.CacheControl, "no-cache")

5. 참고 자료