πŸ“Œ 2024λ…„ μ΅œμ‹  νŠΈλ Œλ“œμ— λ§žλŠ” μ•ˆλ“œλ‘œμ΄λ“œ 톡신 기술

μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ λ„€νŠΈμ›Œν¬ 톡신을 κ΅¬ν˜„ν•˜λŠ” 방법은 μ§€μ†μ μœΌλ‘œ λ°œμ „ν•˜κ³  있으며, μ΅œμ‹  νŠΈλ Œλ“œλŠ” 비동기 처리, λ³΄μ•ˆ κ°•ν™”, μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μ€‘μ‹¬μœΌλ‘œ 이루어지고 μžˆμŠ΅λ‹ˆλ‹€.

πŸš€ μ΅œμ‹  μ•ˆλ“œλ‘œμ΄λ“œ λ„€νŠΈμ›Œν¬ 톡신 기술 λͺ©λ‘

기술 μ„€λͺ… μ΅œμ‹  νŠΈλ Œλ“œ
Retrofit 2 REST APIμ™€μ˜ 톡신을 μ‰½κ²Œ λ„μ™€μ£ΌλŠ” HTTP ν΄λΌμ΄μ–ΈνŠΈ μ—¬μ „νžˆ κ°€μž₯ 널리 μ‚¬μš©λ¨
OkHttp 5 Retrofit λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λ©°, 더 κ°•λ ₯ν•œ HTTP κΈ°λŠ₯ 제곡 HTTP/3 지원, WebSocket κ°œμ„ 
Ktor Kotlinμ—μ„œ μ‚¬μš©ν•˜κΈ° 쒋은 λ„€νŠΈμ›Œν¬ ν”„λ ˆμž„μ›Œν¬ Coroutine 기반, λ©€ν‹°ν”Œλž«νΌ 지원
Volley κ°„λ‹¨ν•œ λ„€νŠΈμ›Œν¬ μš”μ²­μ„ μœ„ν•œ 라이브러리 μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€ μ—†μŒ (ꡬ글 곡식 지원 μœ μ§€)
GraphQL (Apollo) REST보닀 효율적인 데이터 μš”μ²­μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 기술 Facebook, GitHub λ“± λŒ€ν˜• μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš© 증가
WebSockets & Socket.IO μ‹€μ‹œκ°„ μ–‘λ°©ν–₯ 톡신 (예: μ±„νŒ…, μ•Œλ¦Ό) WebSocket μ‚¬μš© 증가
gRPC Google이 κ°œλ°œν•œ κ³ μ„±λŠ₯ RPC ν”„λ ˆμž„μ›Œν¬ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 톡신 증가

πŸ”Ή 1️⃣ Retrofit 2 + OkHttp 5 (κ°€μž₯ 널리 μ‚¬μš©)

Retrofit은 REST API 기반 μ•± κ°œλ°œμ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” HTTP ν΄λΌμ΄μ–ΈνŠΈμž…λ‹ˆλ‹€.

Retrofit λ‚΄λΆ€μ—μ„œ OkHttpλ₯Ό μ‚¬μš©ν•˜λ©°, μ΅œμ‹  OkHttp 5λŠ” HTTP/3 지원 및 μ„±λŠ₯ μ΅œμ ν™”κ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

βœ… Retrofit μ΅œμ‹  μ‚¬μš© 예제

kotlin
λ³΅μ‚¬νŽΈμ§‘
val client = OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY })
    .build()

val retrofit = Retrofit.Builder()
    .baseUrl("<https://jsonplaceholder.typicode.com/>")
    .client(client)
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val apiService = retrofit.create(ApiService::class.java)

βœ… μ΅œμ‹  κΈ°λŠ₯


πŸ”Ή 2️⃣ Ktor (Coroutine 기반 μ΅œμ‹  λ„€νŠΈμ›Œν¬ ν”„λ ˆμž„μ›Œν¬)

KtorλŠ” Kotlin λ©€ν‹°ν”Œλž«νΌμ„ μ§€μ›ν•˜λŠ” μ΅œμ‹  λ„€νŠΈμ›Œν¬ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.

Coroutine κΈ°λ°˜μ΄λ―€λ‘œ 비동기 μ²˜λ¦¬μ— μ΅œμ ν™”λ˜μ–΄ 있으며, Retrofit보닀 더 가볍고 λΉ λ₯Έ μ‹€ν–‰ 속도λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

βœ… Ktor μ΅œμ‹  μ‚¬μš© 예제

kotlin
λ³΅μ‚¬νŽΈμ§‘
val client = HttpClient {
    install(ContentNegotiation) {
        json(Json { ignoreUnknownKeys = true })
    }
}

suspend fun getPosts(): List<Post> {
    return client.get("<https://jsonplaceholder.typicode.com/posts>").body()
}