클라이언트 플러그인
많은 애플리케이션은 로깅, 직렬화, 인증과 같이 핵심 애플리케이션 로직의 일부가 아닌 공통 기능들을 필요로 합니다. Ktor에서 이러한 기능은 클라이언트 _플러그인(plugins)_에 의해 제공됩니다.
플러그인 의존성 추가
일부 플러그인은 추가 의존성이 필요합니다. 예를 들어, 로깅 플러그인을 사용하려면 빌드 스크립트에 ktor-client-logging 아티팩트를 추가해야 합니다:
각 플러그인의 문서에는 필요한 의존성이 명시되어 있습니다.
플러그인 설치
플러그인을 설치하려면 클라이언트 설정 블록 내부의 install() 함수에 해당 플러그인을 전달합니다.
예를 들어, Logging 플러그인을 설치하는 방법은 다음과 같습니다:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
val client = HttpClient(CIO) {
install(Logging)
}플러그인 설치 또는 교체
경우에 따라 플러그인이 이미 설치되어 있을 수 있습니다. 예를 들어, 공유된 클라이언트 설정 코드에 의해 설치된 경우입니다. 이러한 경우에는 installOrReplace() 함수를 사용하여 설정을 교체할 수 있습니다:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
val client = HttpClient(CIO) {
installOrReplace(ContentNegotiation) {
// ...
}
}이 함수는 플러그인이 없는 경우 새로 설치하고, 이미 설치되어 있는 경우 기존 설정을 교체합니다.
플러그인 설정
대부분의 플러그인은 install 블록 내부에서 설정할 수 있는 옵션들을 제공합니다.
예를 들어, Logging 플러그인을 사용하면 로거(logger), 로깅 레벨, 그리고 로그 메시지 필터링 조건을 지정할 수 있습니다:
package com.example
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import kotlinx.coroutines.runBlocking
fun main() {
runBlocking {
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 }
}
}
val response1: HttpResponse = client.get("https://ktor.io/")
val response2: HttpResponse = client.get("https://jetbrains.com/")
}
}커스텀 플러그인 만들기
기존 플러그인이 요구 사항을 충족하지 않는 경우, 자신만의 커스텀 클라이언트 플러그인을 만들 수 있습니다. 커스텀 플러그인을 사용하면 요청과 응답을 가로채고(intercept) 재사용 가능한 동작을 구현할 수 있습니다.
더 자세히 알아보려면 커스텀 클라이언트 플러그인(Custom client plugins)을 참조하세요.
