Kotlin

Ktor 1.3이 릴리스되었습니다! 설문조사도 참여해주세요

Ktor 1.3이 최근에 출시되었습니다. 이 블로그 글에서는 그 자세한 내용을 공유해 드리겠습니다.

13release-01

Ktor는 서버 엔진과 유연한 비동기 HTTP 클라이언트, 두 부분으로 구성됩니다. 현재 릴리스는 주로 HTTP 클라이언트에 중점을 둡니다. 이 릴리스의 전체 변경 로그는 여기에서 확인할 수 있습니다.

클라이언트는 JVM, JS, Android, iOS를 지원하는 멀티플랫폼 라이브러리이며 현재 크로스 플랫폼 모바일 애플리케이션에서 종종 사용됩니다. 다음 릴리스의 주요 목표는 서버 엔진도 멀티플랫폼으로 만드는 것입니다.

그외 작업하려는 다른 부분은 다음과 같습니다.

  • kotlinx.serialization 라이브러리와의 통합 개선
  • Kotlin/Native에서 CIO(코루틴 기반 I/O 클라이언트 엔진)를 지원하여 HttpClient에서 사용되는 기본 멀티플랫폼 엔진으로 만들기

현재 Ktor(서버 또는 HttpClient)을 사용 중이거나 예전에 사용해 본 적이 있으시다면 다음 설문조사에 참여해 주세요.

설문조사 참여하기

여러분의 경험을 공유해 주시면 정말 감사하겠습니다!

지금부터 Ktor 1.3 릴리스에서 제공하는 기능을 자세히 살펴보겠습니다.

HttpClient

HttpStatement 도입

이전 Ktor 버전에서는 HttpResponse를 명시적으로 닫아야 했습니다. 그러나 이 때문에 혼란이 발생하는 경우가 다소 있었습니다. 심지어 간단한 예제에서도 누군가가 HttpResponse를 닫는 것을 잊어버려 메모리 누수가 발생하는 사례가 많이 발견되었습니다. 이러한 상황을 개선하기 위해 Ktor 1.3에는 비호환 변경이 도입되었습니다. HttpResponse는 더 이상 Closeable 인터페이스를 구현하지 않습니다. 따라서 1.3.0 Ktor 릴리스는 이전 버전 Ktor 1.2.X와 호환되지 않습니다.

HttpResponse는 기본적으로 메모리 내에 있으므로 이제 닫을 필요가 없습니다.

스트리밍 또는 대규모 응답을 처리해야 하는 경우 새 HttpStatement 클래스를 사용해 보세요. HttpStatement는 사용자가 명시적으로 execute 메소드를 호출할 때까지 네트워크 요청을 수행하지 않습니다.

예를 들어 데이터를 청크로 읽을 수 있습니다.

프록시 구성

HttpClient는 프록시에 대한 실험적인 지원을 추가합니다. 프록시에서 요청을 보내야 하는 경우 해당 매개변수에서 주소를 구성할 수 있습니다.

플랫폼 제한으로 인해 JVM 및 Native 대상(WatchOS 제외)에서만 지원되며 JavaScript에서는 지원되지 않습니다. 다양한 플랫폼에 맞게 구성하는 방법에 관한 자세한 내용은 여기를 참조하세요.

iOS 엔진에서 NSURLSession 사용

이제 iOS 엔진에서 NSURLSession을 구성하는 방법을 제공합니다.

NSURLSession은 iOS에서 HTTP/HTTPS 프로토콜과 상호 작용하는 기본 API이므로 이제 모든 iOS 관련 설정을 NSURLSession으로 조정할 수 있습니다.

JSON 작업 개선

다음 변경 사항은 HttpClient와 서버에서 모두 지원되며 현재 실험 상태입니다.

JSON에서 컬렉션 직렬화 간소화

이전 Ktor 버전에서는 컬렉션을 직렬화하려면 보조 유형을 등록해야 했습니다. 이제 JsonFeature가 추가 구성 없이 컬렉션 유형을 처리하여 이 프로세스가 간소화되었습니다. setMapper, setListMapper, register 등의 모든 관련 함수도 지원 중단됩니다.

JsonFeature에서 더 이상 List<User>를 등록할 필요가 없습니다.

이는 서버에서 JSON으로 작업할 때도 동일하게 적용되며, 콘텐츠를 수신할 때 예상되는 제네릭 인수로 컬렉션 유형을 지정할 수 있습니다.

kotlinx.serialization DSL

이제 Ktor는 kotlinx.serialization DSL을 사용하여 JSON 본문을 구성하는 방법을 지원합니다.

클라이언트에서 사용하려면 JsonFeature를 설치하고 ktor-client-serialization 종속 요소를 추가하세요. 서버에서는 SerializationConverter를 사용하세요.

마이그레이션 단계

Ktor 애플리케이션을 새 버전으로 마이그레이션하려면 다음을 수행해야 합니다.

  • HttpResponse의 모든 사용 위치를 업데이트합니다. 간단히 close 호출을 제거하고 필요한 경우 HttpStatement를 사용하면 됩니다.

  • import 문을 업데이트합니다. kotlinx.io 종속 요소가 제거되었으므로 다음 방법으로 import 문을 교체해야 합니다.
    • import kotlinx.io. -> import io.ktor.utils.io.
    • import kotlinx.coroutines.io. -> import io.ktor.utils.io.

단, 1.2.x와 바이너리 호환성이 없으므로 외부 Ktor 기능을 사용하는 경우 최신 버전에 맞게 다시 컴파일해야 합니다. 또한 5.4.1 버전 이후의 Gradle 메타데이터를 사용하고 있는지 확인하세요.

긴 글 읽어주셔서 감사드리며 설문조사 참여도 부탁드립니다!

설문조사 참여하기

본문은 Sergey MashkovKtor 1.3 Release를 번역한 글입니다.

image description

Discover more