Ktor 1.3이 릴리스되었습니다! 설문조사도 참여해주세요
Ktor 1.3이 최근에 출시되었습니다. 이 블로그 글에서는 그 자세한 내용을 공유해 드리겠습니다.
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 Mashkov의 Ktor 1.3 Release를 번역한 글입니다.