[Android / Kotlin] Ktor

Subeen·2024년 9월 6일
0

Android

목록 보기
73/73

Ktor

Ktor는 Kotlin을 위한 비동기 웹 프레임워크이다. 주로 HTTP 클라이언트와 서버를 구축하는 데 사용되며, Ktor를 사용하면 RESTful API를 호출하거나 서버 사이드 애플리케이션을 쉽게 만들 수 있다.

Ktor 특징

  • 비동기 I/O 지원: Ktor는 코틀린의 코루틴을 활용하여 비동기 작업을 지원하며, 이로 인해 높은 성능과 효율성을 제공할 수 있다.
  • *플러그인 시스템: Ktor는 다양한 플러그인 시스템을 통해 기능을 확장할 수 있다. 예를 들어, 인증, 세션, 로깅 등 여러 기능을 플러그인 형태로 추가할 수 있다.
  • 모듈화: 서버와 클라이언트 모두 모듈화되어 있어, 필요한 부분만 선택적으로 사용할 수 있다.
  • 유연성: Ktor는 경량화된 프레임워크로, 필요한 기능만 추가하여 사용하는 방식이다.

Ktor 사용하기

  • Ktor 클라이언트 설정
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}"
        }
    }
}
  • Ktor 클라이언트 사용
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 처리
// 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}")
    }
}

Retrofit과 비교

Retrofit 특징

  • 단순하고 강력한 API: Retrofit은 REST API 호출을 간편하게 처리할 수 있도록 도와주는 라이브러리로, 어노테이션을 사용하여 API 엔드포인트를 정의하고 자동으로 요청을 생성하고 응답을 파싱한다.
  • JSON 변환 라이브러리: Retrofit은 GSON, Moshi, Kotlin.serizlization 등 다양한 JSON 변환 라이브러리를 지원하며 JSON 응답을 쉽게 파싱할 수 있다.
  • 콜백 기반: 콜백 기반의 비동기 작업을 지원하지만, 코루틴과 함께 사용할 수도 있다.

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의 기능을 활용하여 요청에 대한 세부적인 설정이나 커스터마이징이 가능하다.
profile
개발 공부 기록 🌱

0개의 댓글