Ktor는 Kotlin을 위한 비동기 웹 프레임워크이다. 주로 HTTP 클라이언트와 서버를 구축하는 데 사용되며, Ktor를 사용하면 RESTful API를 호출하거나 서버 사이드 애플리케이션을 쉽게 만들 수 있다.
class ApiClient { // Ktor 클라이언트를 설정하고 요청을 보내는 부분
private val client = HttpClient(Android) {
// JSON 직렬화 및 역직렬화 플러그인 설치
install(ContentNegotiation) {
json() // 기본 JSON 설정
}
...
}
// 비동기적으로 데이터를 가져오는 함수
suspend fun fetchData(url: String): String {
return try {
// URL로 GET 요청을 보내고 응답을 받음
val response: HttpResponse = client.get(url)
// 응답 본문을 문자열로 반환
response.bodyAsText()
} catch (e: Exception) {
"Error: ${e.message}"
}
}
}
fun main() { // ApiClient를 사용하여 API 요청을 보내고 응답을 처리
val apiClient = ApiClient()
// Coroutine scope를 사용하여 비동기 작업 수행
CoroutineScope(Dispatchers.IO).launch {
val url = "https://api.example.com/data" // 요청 URL
val response = apiClient.fetchData(url) // fetchData 함수를 호출하여 데이터 가져오기
}
}
// JSON 직렬화/역직렬화를 위한 데이터 클래스
@Serializable
data class ApiResponse(val data: String)
// JSON 응답을 ApiResponse 객체로 변환하는 함수
suspend fun fetchData(url: String): ApiResponse {
return try {
// URL로 GET 요청을 보내고 응답을 문자열로 받음
val response: String = client.get(url)
// 응답 문자열을 ApiResponse 객체로 변환
Json.decodeFromString<ApiResponse>(response)
} catch (e: Exception) {
ApiResponse("Error: ${e.message}")
}
}
Ktor와 Retrofit은 둘 다 HTTP 클라이언트 라이브러리지만 특정 상황에 따라 사용 사례가 다르다.
- Ktor: 비동기 처리가 중요하고, 높은 수준의 커스터마이징이 필요하거나 서버와 클라이언트 양쪽에서 HTTP 작업을 수행하는 경우에 적합하다.
- Retrofit: RESTful API 호출을 간편하게 처리하고, 표준화된 방법으로 JSON 응답을 파싱하는 것이 중요한 경우에 적합하다.
Ktor, Retrofit 라이브러리에서 OkHttp의 역할
- Ktor
- OkHttp를 선택적으로 사용한다.
- Ktor는 기본적으로 자체 HTTP 클라이언트를 가지고 있지만, OkHttp를 클라이언트로 사용할 수도 있다.
- Ktor의 HTTP 클라이언트는 OkHttp 외에도 다른 클라이언트를 지원하며, 필요에 따라 OkHttp를 설정할 수 있다.
- Retrofit
- 기본적으로 OkHttp를 사용한다.
- Retrofit은 기본적으로 OkHttp를 사용하여 HTTP 요청을 처리한다.
- OkHttp는 고성능의 HTTP 클라이언트로, Retrofit의 HTTP 요청 및 응답을 처리하는 데 필요한 핵심 기능을 제공한다.
- Retrofit은 OkHttp를 기본 클라이언트로 사용하므로, OkHttp의 기능을 활용하여 요청에 대한 세부적인 설정이나 커스터마이징이 가능하다.