- Retrofit 소개: Retrofit은 안드로이드에서 HTTP API를 호출하기 위한 타입 안전한 클라이언트 라이브러리로, Square에서 개발되었습니다. RESTful API를 자바 또는 코틀린 인터페이스로 변환하여 간단하게 네트워크 요청을 처리할 수 있습니다. 연구에 따르면, Retrofit은 성능이 우수하고 코드가 간결해 안드로이드 개발자들 사이에서 인기 있지만, 복잡한 API의 경우 추가 설정이 필요할 수 있습니다.
- 설치 및 설정: Gradle에 Retrofit 의존성을 추가하세요. 예:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
. 이는 최소 Java 8 또는 Android API 21을 요구하며, 컨버터(예: Gson)를 함께 사용하면 JSON 파싱이 용이합니다. - 기본 사용: API 인터페이스를 정의하고, Retrofit 인스턴스를 생성한 후 서비스를 만들어 호출합니다. GET, POST 등의 어노테이션을 사용해 요청을 지정하며, 비동기 호출을 위해 Call이나 코루틴을 활용하세요.
- 장점과 주의점: 빠른 성능과 간단한 구현이 장점이나, 에러 처리와 인증은 개발자가 직접 구현해야 합니다. 논쟁적인 부분으로는 OkHttp와의 통합이 필수적이라는 점이 있으며, 일부 개발자는 Volley나 다른 라이브러리를 선호할 수 있습니다.
Retrofit 설치 방법
Gradle 파일(build.gradle.kts
)에 다음 의존성을 추가하세요:
- Retrofit:
implementation("com.squareup.retrofit2:retrofit:2.9.0")
- Gson 컨버터:
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
- 인터넷 권한:
AndroidManifest.xml
에<uses-permission android:name="android.permission.INTERNET" />
추가.
프로젝트를 동기화한 후 Retrofit을 사용할 수 있습니다.
기본 API 호출 예시
API 인터페이스를 정의하세요:
interface ApiService {
@GET("users")
fun getUsers(): Call<List<User>>
}
Retrofit 인스턴스 생성:
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val service = retrofit.create(ApiService::class.java)
호출:
service.getUsers().enqueue(object : Callback<List<User>> {
override fun onResponse(call: Call<List<User>>, response: Response<List<User>>) {
if (response.isSuccessful) {
// 성공 처리
}
}
override fun onFailure(call: Call<List<User>>, t: Throwable) {
// 실패 처리
}
})
에러 처리
IOException 등의 예외를 try-catch로 처리하세요. ViewModel에서 코루틴을 사용하면 더 안전합니다.
Retrofit은 안드로이드 앱에서 네트워크 API를 호출하는 데 특화된 라이브러리로, Square에서 개발된 오픈소스 프로젝트입니다. 이는 HTTP 클라이언트로서 타입 안전성을 강조하며, REST API를 자바나 코틀린 인터페이스로 변환하여 사용합니다. 공식 문서에 따르면, Retrofit은 최소 Java 8+ 또는 Android API 21+를 요구하며, OkHttp를 네트워킹 레이어로 사용합니다. 이 라이브러리는 빠른 성능과 간결한 코드로 인해 안드로이드 개발 커뮤니티에서 널리 사용되지만, 복잡한 인증이나 파일 업로드 시 추가 설정이 필요할 수 있습니다. 일부 개발자들은 Volley나 Ktor 같은 대안을 고려하지만, Retrofit의 안정성과 확장성이 우수하다는 의견이 지배적입니다.
Retrofit의 주요 구성 요소
Retrofit을 사용하려면 다음 세 가지 클래스가 핵심입니다:
- API 인터페이스: HTTP 요청을 정의하는 인터페이스. 어노테이션(@GET, @POST 등)을 사용해 메서드를 지정합니다.
- Retrofit 인스턴스: Builder를 통해 baseUrl과 컨버터를 설정합니다.
- 모델 클래스: JSON 응답을 매핑하는 POJO 클래스. Gson이나 Moshi 같은 라이브러리를 사용해 직렬화합니다.
구성 요소 | 설명 | 예시 |
---|---|---|
API 인터페이스 | 요청 메서드 정의 | @GET("path") fun getData(): Call<Response> |
Retrofit Builder | 인스턴스 생성 | .baseUrl("https://api.com").build() |
모델 클래스 | 데이터 매핑 | data class User(val id: Int, val name: String) |
설치 및 의존성 추가
안드로이드 스튜디오에서 module-level build.gradle.kts
파일을 열고 dependencies 섹션에 다음을 추가합니다:
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0") // JSON 파싱을 위한 Gson 컨버터
implementation("com.squareup.retrofit2:converter-scalars:2.9.0") // 문자열 응답을 위한 옵션
OkHttp 로깅을 위해:
implementation("com.squareup.okhttp3:logging-interceptor:4.9.1")
AndroidManifest.xml에 인터넷 권한을 추가:
<uses-permission android:name="android.permission.INTERNET" />
프로젝트를 Sync Now로 동기화하세요. 이는 Retrofit 2.x 버전을 기반으로 하며, 이전 버전과의 호환성을 확인하세요.
API 인터페이스 정의
새 패키지(예: network)에 Kotlin 파일(예: ApiService.kt)을 생성합니다. baseUrl 상수를 정의하고 Retrofit 빌더를 설정:
private const val BASE_URL = "https://api.example.com/"
private val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
interface ApiService {
@GET("photos")
suspend fun getPhotos(): String // 코루틴을 위한 suspend
}
object Api {
val service: ApiService by lazy {
retrofit.create(ApiService::class.java)
}
}
HTTP 메서드 어노테이션:
- @GET: 데이터 조회
- @POST: 데이터 생성, @Body로 객체 전송
- @PUT/@DELETE: 업데이트/삭제
- @Query: 쿼리 파라미터, @Path: URL 경로 치환
- @FormUrlEncoded와 @Field: 폼 데이터 전송
- @Multipart와 @Part: 파일 업로드
Retrofit 인스턴스 생성 및 서비스 구현
싱글톤 객체를 사용해 서비스를 노출:
object MarsApi {
val retrofitService: MarsApiService by lazy {
retrofit.create(MarsApiService::class.java)
}
}
클라이언트 커스터마이징:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build()
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
네트워크 요청 만들기
ViewModel에서 코루틴을 사용해 호출:
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
class MyViewModel : ViewModel() {
private fun getData() {
viewModelScope.launch {
try {
val result = Api.service.getPhotos()
// 결과 처리
} catch (e: IOException) {
// 에러 처리
}
}
}
}
동기 호출: execute()
, 비동기: enqueue(Callback)
응답 처리 및 에러 핸들링
응답은 Response 객체로 받으며, isSuccessful로 성공 여부 확인:
override fun onResponse(call: Call<MyResponse>, response: Response<MyResponse>) {
if (response.isSuccessful) {
val body = response.body()
// UI 업데이트
} else {
// 에러 코드 처리 (response.code())
}
}
에러: onFailure에서 Throwable 처리. 코루틴에서는 try-catch 사용. 공통 에러: IOException(네트워크 오류), HttpException(서버 오류).
컨버터와 어댑터
- 컨버터: JSON(Gson), XML(Simple XML), Protobuf 등. addConverterFactory로 추가.
- 어댑터: RxJava, Coroutines 지원. 예:
addCallAdapterFactory(CoroutineCallAdapterFactory())
- 고급: 인터셉터로 인증 토큰 추가, 캐싱 설정.
모델 클래스 생성
JSON 응답에 맞춰 데이터 클래스 정의:
data class User(
val id: Int,
val name: String,
val email: String
)
@SerializedName으로 필드 매핑.
고급 기능
- 파일 업로드: @Multipart @POST, MultipartBody.Part 사용.
- 쿼리 파라미터: @QueryMap으로 맵 전송.
- 헤더: @Headers 또는 동적 @Header.
- 코루틴 통합: suspend 함수로 비동기 처리.
- Jetpack Compose 통합: ViewModel에서 상태 업데이트, UI에서 Flow나 LiveData 관찰.
예제 프로젝트
간단한 사용자 목록 API 호출 예시:
- 인터페이스: @GET("users") suspend fun getUsers(): List
- Repository: API 호출 래핑.
- ViewModel: 데이터 로드 및 UI 상태 관리.
- Activity/Fragment: 결과 표시.
HTTP 메서드 | 사용 예 | 응답 처리 |
---|---|---|
GET | 데이터 조회 | List 또는 객체 파싱 |
POST | 데이터 생성 | 생성된 ID 반환 |
PUT | 업데이트 | 성공 코드 확인 |
DELETE | 삭제 | 빈 응답 처리 |
Retrofit은 안드로이드 네트워킹의 표준으로 자리 잡았으나, Ktor나 Fuel 같은 대안도 존재합니다. 복잡한 프로젝트에서는 Hilt나 Dagger로 의존성 주입을 추천합니다. 추가로, 보안 측면에서 HTTPS 사용과 API 키 관리를 유의하세요.
Key Citations
- Introduction | Retrofit
- Get data from the internet - Android Developers
- Retrofit Android Example Tutorial - DigitalOcean
- [Android] 안드로이드 Retrofit(레트로핏) 사용법 - 경기도데이터드림 ...
- [Android] Retrofit을 쓰자 - 기본적인 사용 방법 - aaaicu - 티스토리
- [안드로이드] Retrofit2 기본 사용법2 -'GET/POST/PUT/DELETE'
- 안드로이드 retrofit 2 사용법 / 예제 , 레트로핏 2, Java - Dev Of Dark
- [Android] Retrofit 사용 예제 (Kotlin) - AndroidTeacher - 티스토리
0 댓글