Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 앱 만들기 HTTP 통신의 또 다른 이야기...

Billcorea 2022. 2. 12. 11:08
반응형

 

https://medium.com/@oguzhanaslann/ktor-for-android-development-6ae5a7b2a3ff

 

Ktor for Android development

In Android development, we have multiple libraries to send/or get data from a server such as Retrofit, Volley, AndroidAsync. Since 19…

oguzhanaslann.medium.com

 

일반적으로 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 와 연결된 소스 예제도 있으니 살펴 보는 노력을 게을리 하지 마시길... 

 

다시 한번 작성자님에게 감사를 드리면... 오늘도 한가지의 배움을 실천...

 

 

반응형