타임아웃
코드 예시: client-timeout
[HttpTimeout](https://api.ktor.io/ktor-client/ktor-client-core/io.ktor.client.plugins/-http-timeout) 플러그인을 사용하면 다음 타임아웃을 구성할 수 있습니다:
- 요청 타임아웃 — HTTP 호출을 처리하는 데 필요한 시간: 요청을 보내는 시점부터 응답을 받는 시점까지.
- 연결 타임아웃 — 클라이언트가 서버와 연결을 설정해야 하는 시간.
- 소켓 타임아웃 — 서버와 데이터를 교환할 때 두 데이터 패킷 간의 최대 비활성 시간.
이러한 타임아웃은 모든 요청에 대해 또는 특정 요청에 대해서만 지정할 수 있습니다.
의존성 추가
HttpTimeout은 [ktor-client-core](client-dependencies.md) 아티팩트만 필요하며, 별도의 의존성이 필요하지 않습니다.
HttpTimeout 설치
HttpTimeout을 설치하려면, [클라이언트 구성 블록](client-create-and-configure.md#configure-client) 내의 install 함수에 전달하세요:
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.*
//...
val client = HttpClient(CIO) {
install(HttpTimeout)
}타임아웃 구성
타임아웃을 구성하려면 해당 속성을 사용할 수 있습니다:
[requestTimeoutMillis](https://api.ktor.io/ktor-client/ktor-client-core/io.ktor.client.plugins/-http-timeout-config/request-timeout-millis.html)는 요청을 보내는 시점부터 응답을 받는 시점까지 전체 HTTP 호출에 대한 타임아웃을 지정합니다.[connectTimeoutMillis](https://api.ktor.io/ktor-client/ktor-client-core/io.ktor.client.plugins/-http-timeout-config/connect-timeout-millis.html)는 서버와 연결을 설정하는 데 필요한 타임아웃을 지정합니다.[socketTimeoutMillis](https://api.ktor.io/ktor-client/ktor-client-core/io.ktor.client.plugins/-http-timeout-config/socket-timeout-millis.html)는 서버와 데이터를 교환할 때 두 데이터 패킷 간의 최대 비활성 시간을 위한 타임아웃을 지정합니다.
install 블록 내에서 모든 요청에 대한 타임아웃을 지정할 수 있습니다. 아래 코드 샘플은 requestTimeoutMillis를 사용하여 요청 타임아웃을 설정하는 방법을 보여줍니다:
val client = HttpClient(CIO) {
install(HttpTimeout) {
requestTimeoutMillis = 1000
}
}특정 요청에 대해서만 타임아웃을 설정해야 하는 경우, [HttpRequestBuilder.timeout](https://api.ktor.io/ktor-client/ktor-client-core/io.ktor.client.plugins/timeout.html) 속성을 사용하세요:
val response: HttpResponse = client.get("http://0.0.0.0:8080/path1") {
timeout {
requestTimeoutMillis = 3000
}
}특정 요청에 지정된 타임아웃이 install 블록의 전역 타임아웃을 재정의한다는 점에 유의하세요.
타임아웃이 발생하면 Ktor는 HttpRequestTimeoutException, ConnectTimeoutException, 또는 SocketTimeoutException을 발생시킵니다.
제한사항
HttpTimeout은 특정 [엔진](client-engines.md)에 대해 몇 가지 제한사항이 있습니다. 아래 표는 해당 엔진에서 지원되는 타임아웃을 보여줍니다:
| 엔진 | 요청 타임아웃 | 연결 타임아웃 | 소켓 타임아웃 |
|---|---|---|---|
[Darwin](client-engines.md#darwin) | ✅️ | ✖️ | ✅️ |
[JavaScript](client-engines.md#js) | ✅ | ✖️ | ✖️ |
[Curl](client-engines.md#curl) | ✅ | ✅️ | ✖️ |
[MockEngine](client-testing.md) | ✅ | ✖️ | ✅ |
