Skip to content

클라이언트 생성 및 구성

클라이언트 종속성을 추가한 후, HttpClient 클래스 인스턴스를 생성하고 엔진을 파라미터로 전달하여 클라이언트를 인스턴스화할 수 있습니다:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO)

이 예시에서는 CIO 엔진을 사용합니다. 엔진을 생략할 수도 있습니다:

kotlin
import io.ktor.client.*

val client = HttpClient()

이 경우, 클라이언트는 빌드 스크립트에 추가된 아티팩트에 따라 엔진을 자동으로 선택합니다. 클라이언트가 엔진을 선택하는 방법은 기본 엔진 문서 섹션에서 확인할 수 있습니다.

클라이언트 구성

기본 구성

클라이언트를 구성하려면 클라이언트 생성자에 추가 함수 파라미터를 전달할 수 있습니다. HttpClientConfig 클래스는 클라이언트 구성의 기본 클래스입니다. 예를 들어, expectSuccess 속성을 사용하여 응답 유효성 검사를 활성화할 수 있습니다:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

val client = HttpClient(CIO) {
    expectSuccess = true
}

엔진 구성

engine 함수를 사용하여 엔진을 구성할 수 있습니다:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*

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

자세한 내용은 엔진 섹션을 참조하세요.

플러그인

플러그인을 설치하려면 클라이언트 구성 블록 내부의 install 함수에 플러그인을 전달해야 합니다. 예를 들어, 로깅(Logging) 플러그인을 설치하여 HTTP 호출을 기록할 수 있습니다:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*

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

install 블록 내에서 플러그인을 구성할 수도 있습니다. 예를 들어, 로깅(Logging) 플러그인의 경우 로거, 로깅 레벨, 그리고 로그 메시지 필터링 조건을 지정할 수 있습니다:

kotlin
val client = HttpClient(CIO) {
    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.HEADERS
        filter { request ->
            request.url.host.contains("ktor.io")
        }
        sanitizeHeader { header -> header == HttpHeaders.Authorization }
    }
}

특정 플러그인은 별도의 종속성을 필요로 할 수 있다는 점에 유의하세요.

클라이언트 사용

필요한 모든 종속성을 추가하고 클라이언트를 생성한 후, 이를 사용하여 요청을 수행하고 응답을 수신할 수 있습니다.

클라이언트 닫기

HTTP 클라이언트 작업을 마친 후에는 스레드, 연결, 코루틴용 CoroutineScope와 같은 리소스를 해제해야 합니다. 이를 위해 HttpClient.close 함수를 호출하세요:

kotlin
client.close()

close 함수는 새 요청 생성을 금지하지만 현재 활성화된 요청을 종료하지는 않습니다. 모든 클라이언트 요청이 완료된 후에만 리소스가 해제됩니다.

단일 요청에 HttpClient를 사용해야 하는 경우, 코드 블록 실행 후 자동으로 close를 호출하는 use 함수를 호출하세요:

kotlin
val status = HttpClient().use { client ->
    // ...
}

HttpClient를 생성하는 것은 비용이 많이 드는 작업이므로, 여러 요청을 처리할 경우 해당 인스턴스를 재사용하는 것이 좋습니다.