[kotlin] 코틀린 웹 서버에서 컨텐츠 압축 방법

인터넷에서 데이터를 전송할 때, 크기가 큰 파일을 압축하여 전송하면 데이터 전송 속도를 향상시킬 수 있습니다. 이번 기사에서는 코틀린 웹 서버에서 컨텐츠를 압축하는 방법에 대해 알아보겠습니다.

GZIP 압축

GZIP은 가장 일반적으로 사용되는 HTTP 압축 알고리즘 중 하나입니다. 코틀린에서는 java.util.zip 패키지를 이용하여 GZIP 압축을 할 수 있습니다.

다음은 코틀린에서 GZIP 압축을 적용하는 예제 코드입니다.

import java.util.zip.GZIPOutputStream

fun compressContent(content: String): ByteArray {
    val bos = ByteArrayOutputStream()
    val gzip = GZIPOutputStream(bos)
    gzip.write(content.toByteArray())
    gzip.close()
    return bos.toByteArray()
}

fun main() {
    val content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    val compressedContent = compressContent(content)
    println("Original size: ${content.length}")
    println("Compressed size: ${compressedContent.size}")
}

위 코드는 compressContent 함수를 통해 문자열 컨텐츠를 GZIP 압축한 결과를 바이트 배열로 반환합니다. main 함수에서는 예시로 문자열 “Lorem ipsum dolor sit amet, consectetur adipiscing elit.”을 압축한 결과의 원본 크기와 압축 후 크기를 출력합니다.

웹 서버에서 컨텐츠 압축 적용

웹 서버에서 컨텐츠 압축을 적용하기 위해서는, 클라이언트가 압축을 지원하는지 확인하고, 압축을 적용하여 응답을 전송해야 합니다. 아래는 코틀린 웹 서버에서 컨텐츠 압축을 적용하는 예제 코드입니다.

import java.util.zip.GZIPOutputStream

fun compressContent(content: String): ByteArray {
    val bos = ByteArrayOutputStream()
    val gzip = GZIPOutputStream(bos)
    gzip.write(content.toByteArray())
    gzip.close()
    return bos.toByteArray()
}

fun handleRequest(request: HttpRequest): HttpResponse {
    val content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    val compressedContent = compressContent(content)

    val httpResponseHeaders = HttpHeaders().apply {
        add(HttpHeaderNames.CONTENT_ENCODING, "gzip")
        add(HttpHeaderNames.CONTENT_LENGTH, compressedContent.size)
    }

    return DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,
            Unpooled.wrappedBuffer(compressedContent), httpResponseHeaders, EmptyHttpHeaders.INSTANCE)
}

위 코드에서 compressContent 함수는 앞에서 소개한 GZIP 압축을 적용하고 있습니다. 그리고 handleRequest 함수에서는 요청을 처리하고 압축된 컨텐츠를 응답으로 전송하기 위해 필요한 HTTP 헤더를 설정합니다. 예제에서는 “gzip”을 Content-Encoding 헤더에 추가하고, 압축된 컨텐츠의 길이를 Content-Length 헤더로 설정하고 있습니다.

이제 코틀린으로 개발된 웹 서버에서 컨텐츠 압축을 적용할 수 있습니다.

참고 자료