https://medium.com/@oguzhanaslann/ktor-for-android-development-6ae5a7b2a3ff
일반적으로 http 통신을 할 떄는 retrofit, volley 등의 api 을 이용해서 통신을 구현해 왔는데, 이번에 이글을 읽어 보면서 ktor 이라는 개발 방법이 있다는 것을 알게 되었다. 예제는 kotlin 으로 되어 있기 때문에 kotlin 을 배우기 시작하는 나에게는 도움이 될 것 같아 옮겨와 본다.
- 번역글 -
Android 개발에는 Retrofit , Volley , AndroidAsync 와 같은 서버에서 데이터를 보내거나 가져오는 여러 라이브러리가 있습니다 . 2018년 11월 19일(1.0.0 버전 릴리스 날짜)부터 Ktor도 있습니다. Ktor는 서버에서 요청하고 응답을 받을 수 있는 라이브러리입니다.
좋은 점은 Ktor가 네이티브 라이브러리라는 점입니다. 즉, Kotlin으로 코드를 작성할 수 있을 때마다 사용할 수 있습니다. 이 기능은 Ktor를 크로스 플랫폼 프로젝트에 좋은 옵션으로 만듭니다. 예를 들어 Kotlin Multiplatform Mobile(KMM) 프로젝트 에서 널리 사용됩니다 . Ktor를 사용하여 서버 측 코드와 클라이언트 측 코드를 모두 작성할 수 있습니다. Android 개발에서 우리는 주로 "클라이언트"이기 때문에 이 블로그에서는 Ktor의 클라이언트 측 이야기를 하려고 합니다.
시작하기 전에 Ktor는 대부분의 시간에 kotlin의 해당 기능을 사용하므로 Kotlin DSL 에 익숙해야 합니다.
프로젝트에서 Ktor를 사용하려면 애플리케이션 수준 build.gradle파일 에 이 종속성을 추가하세요.
implementation “io.ktor:ktor-client-core:<version>”
클라이언트 인스턴스를 생성할 수 있습니다.
val client = HttpClient()
이제 우리가 사용하는 서버에 요청할 수 있습니다. 익숙한 요청은 GET, POST, PUT, DELETE, HEAD, OPTION또는 PATCH입니다.
val client = HttpClient()
val response: HttpResponse = client.request("YOUR_URL") {
method = HttpMethod.Get // you can use others as well
}
더 쉬운 방법을 사용하려면 Ktor에 기본 HTTP 메서드에 대한 확장 기능이 내장되어 있습니다.
val client = HttpClient()
val response: HttpResponse = client.get("YOUR URL")
// the functions for post-put etc. are also exists
그러나 클라이언트 인스턴스를 사용하여 응답을 받거나 지금 요청하려고 하면 오류가 발생할 수 있습니다. 아직 엔진이 없기 때문입니다. Ktor용 엔진은 어떻게 든 Ktor 클라이언트용 플러그인과 같으며 클라이언트는 엔진을 사용하여 우리가 정의한 프로세스를 실행합니다. 고객을 위한 엔진이 많이 있습니다. 따라서 사용 사례에 따라 둘 중 하나를 변경하는 것은 사용자에게 달려 있습니다.
CIO — (코루틴 기반 엔진)
CIO는 우리의 사랑스러운 친구 코루틴을 기반으로 합니다. 이것은 JVM 및 Android 애플리케이션에 적합합니다. 또한 기본 kotlin을 기반으로 하기 때문에 일반적으로 KMM(및 기타 크로스 플랫폼) 프로젝트에 적합합니다.
implementation "io.ktor:ktor-client-cio:<version>"
안드로이드 엔진
Ktor의 공식 다큐멘터리에는 다음과 같이 나와 있습니다.
연결된 구성 AndroidEngineConfig 와의 추가 종속성 없이 UrlConnection 기반 백엔드 구현을 사용하는 HttpClientEngineFactory .
Android용 애플리케이션을 개발하는 경우 이 엔진을 선택할 수 있습니다.
implementation "io.ktor:ktor-client-android:<version>"
지금까지 이러한 엔진은 우리의 경우에 대해 알 수 있을 만큼 충분해야 하지만 내가 말했듯이 엔진이 많이 있습니다. 예를 들어 Javascript , IOS 용 엔진이 있으며 Apache 와 같은 다른 JVM 엔진도 있습니다 . 그들에 대해 더 알고 싶다면 공식 문서 를 읽으십시오 .
그렇다면 엔진을 Ktor 클라이언트에 어떻게 전달합니까? 너무 쉽기 때문에 HttpClient의 생성자에 전달하기만 하면 됩니다.
val client = HttpClient(CIO)
// engine can be others as well.(but you need to add their dependencies)
또한 매개변수 없이 인스턴스를 생성하려고 하면 HttpClient컴파일러에서 경고를 표시하지 않는 것을 볼 수 있습니다. 이는 클라이언트 클래스가 build.gradle 파일에 정의된 기본 엔진을 사용하기 때문입니다. 이 기능은 KMM 프로젝트에서 사용되며 대부분 다른 다중 플랫폼 응용 프로그램에서 사용할 수 있습니다. 프로젝트의 IOS 및 Android 부분 모두 자체 엔진을 사용할 수 있습니다. (여기에 그것에 대한 샘플 프로젝트 가 있습니다). 하지만 반드시 해야 하는 것은 아닙니다. 다른 방법을 사용할 수 있습니다.
여기까지는 원시 형식으로 서버에서 요청하고 응답을 받을 수 있지만 아시다시피 원시 데이터를 처리하는 대부분의 시간은 시간이 많이 걸리고 복잡하므로 일반적으로 seriliazer를 사용하여 변환을 수행합니다. 우리를. 직렬 변환기는 Android Are Gson, Jackson 및 Kotlinx에서 사용할 수 있습니다.
val client = HttpClient() {
install(JsonFeature) {
serializer = GsonSerializer()
// for kotlinx-serialization KotlinxSerializer()
// for Jackson JacksonSerializer()
}
}
@Serializablekotlinx 직렬화를 위해 클래스를 보내거나 받는 클래스에 주석 을 사용해야 합니다 . 이를 사용하여 직렬 변환기는 원시 데이터를 모델 클래스로 또는 그 반대로 변환하는 방법을 알고 있습니다.
import kotlinx.serialization.Serializable
@Serializable
data class SomeModelClass(...)
전반적으로 Ktor는 Android 네트워킹과 관련하여 좋은 라이브러리 중 하나입니다. 대부분 Kotlin DSL을 사용하므로 사용하기 쉽습니다. 도서관에 대해 조금 낯설게 느껴질 수 있지만 시간이 지나면 분명히 익숙해질 것입니다. 나는 당신이 지금 당신의 프로젝트에서 사용자 Ktor에게 충분한 정보를 가지고 있다고 믿습니다. 사용 사례에 따라 선택하여 사용할 수 있습니다.
--- 번역 글 끝 ---
작성자님이 적어 놓은 영문을 옮겨 정리를 하면서 배움의 의지(?)를 다시 불살라 본다.
작성자님의 페이지에는 github 와 연결된 소스 예제도 있으니 살펴 보는 노력을 게을리 하지 마시길...
다시 한번 작성자님에게 감사를 드리면... 오늘도 한가지의 배움을 실천...
'모바일 앱(안드로이드)' 카테고리의 다른 글
안드로이드 앱 만들기 : admob 에서 온 메일 ... (2) | 2022.02.16 |
---|---|
안드로이드 앱 만들기 in-App Review 인앱리뷰 요청해 본다. (3) | 2022.02.13 |
안드로이드 앱 만들기 : workmanager kotlin api (번역) (0) | 2022.02.08 |
안드로이드 앱 만들기 : 구글 인앱 결제 오류 대처 (3) | 2022.02.02 |
안드로이드 앱 만들기 : image blur (이미지 흐리게) 처리 하기 (2) | 2022.01.25 |