[Ktor] 1. 클라이언트, Engine

[Ktor] 1. 클라이언트, Engine

Ktor Client 가이드 요약 정리



Engine

Ktor HTTP 클라이언트는 JVM, Android, JS, Native(iOS/desktop)과 같이 다른 플랫폼에서 사용될 수 있다. 특정 플랫폼에서 네트워크 요청을 처리하기 위해 특정 engine이 필요할 수도 있다. 예를 들어, Android에서는 OkHttp를 사용하고 JVM에서는 ApacheCIO를 사용할 수 있다.

ktor-client-core 라이브러리 외에 각 플랫폼에서 사용할 engine에 대한 디펜던시는 별도로 추가해줘야 한다. Engine dependency 가이드에서 플랫폼 별 사용 가능한 engine과 디펜던시를 확인할 수 있다.

클라이언트 생성

HttpClient 인스턴스를 생성하여 클라이언트를 만든다.

engine을 파라미터로 넘기는 방식

  • 인스턴스 생성
  • val client = HttpClient(CIO)
  • [참고] HttpClient 생성자
  • fun HttpClient(engine: HttpClientEngine, block: HttpClientConfig<*>.() -> Unit): HttpClient

engine 생략 방식

engine을 생략한 경우, Default engine이 자동 선택된다.

  • 인스턴스 생성
  • val client = HttpClient(CIO)
  • [참고] HttpClient 생성자
  • fun HttpClient(block: HttpClientConfig<*>.() -> Unit = {}): HttpClient

클라이언트 Configuration

생성자에 추가 파라미터를 전달하여 설정할 수 있다. HttpClientEngineConfig 클래스가 클라이언트 속성 설정의 베이스 클래스이고, HttpClientConfig 클래스에서 확장하여 더 많은 속성 설정을 제공하고 있다.

val client = HttpClient(CIO) {
      // 이 block을 클라이언트 configuration block이라고 한다.

    expectSuccess = false
    // expectSuccess: status code가 성공이 아니면(code >= 300), HttpClient.receivePipeline 종료 옵션
}

engine의 속성은 engine 함수를 이용하여 설정한다.

val client = HttpClient(CIO) {
    engine {
        // Configure an engine
    }
}

Plugins

Logging, Authorization Serialization 등과 같은 추가 기능을 제공한다.
클라이언트 configuration block 안에서 install 함수를 이용해 플러그인을 가져온다.

val client = HttpClient(CIO) {
    install(Logging)
}

Comments