안드로이드 앱 개발에서는 서버와 데이터를 주고받는 작업은 필수적이에요. 서버에서 데이터를 가져와 화면에 표시하거나, 사용자가 입력한 데이터를 서버로 전송하는 과정이 바로 네트워크 통신이에요. 이런 작업을 간단하고 효율적으로 처리할 수 있도록 도와주는 도구가 Retrofit과 OkHttp입니다. 이번 글에서는 이 두 도구의 특징과 설정 방법, 그리고 데이터를 가져오고 보내는 예제를 자세히 설명할게요.
1. Retrofit과 OkHttp란 무엇인가요?
Retrofit이란?
Retrofit은 서버와 데이터를 주고받는 작업을 쉽게 만들어주는 도구예요. 특히 RESTful API와 잘 맞아, API의 주소와 필요한 데이터를 간단히 정의하면 요청과 응답을 손쉽게 처리할 수 있어요.
Retrofit의 주요 특징
- 간단한 요청 처리: API 요청을 정의하는 인터페이스만 작성하면 복잡한 코드를 작성하지 않아도 돼요.
- 자동 데이터 변환: 서버에서 받은 JSON 데이터를 자동으로 Kotlin 객체로 변환해 줘요(Gson 등 라이브러리 활용).
- OkHttp와 결합 가능: 요청 로그를 확인하거나 네트워크 성능을 최적화하는 작업도 쉽게 추가할 수 있어요.
OkHttp란?
OkHttp는 네트워크 요청(데이터 가져오기/보내기)을 처리하는 저수준 라이브러리예요. Retrofit은 OkHttp를 내부적으로 사용해 요청을 보내고 응답을 받아요.
OkHttp의 주요 특징
- 요청/응답 로그 확인: 네트워크 요청과 응답 데이터를 로그로 출력해 디버깅을 도와줘요.
- 효율적인 네트워크 관리: 커넥션 풀을 통해 네트워크 연결을 효율적으로 관리해 앱 성능을 높여줘요.
- 최신 기술 지원: 최신 HTTP/2 프로토콜과 WebSocket 같은 기술도 사용할 수 있어요.
2. Retrofit과 OkHttp 설정하기
1) 인터넷 권한 추가
Retrofit과 OkHttp를 사용하려면 앱이 인터넷에 접근할 수 있어야 해요. 이를 위해 앱의 설정 파일인 AndroidManifest.xml
에 인터넷 권한을 추가해야 해요. 인터넷 권한이 없으면 네트워크 요청이 실패하고 앱이 정상적으로 동작하지 않아요.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- 앱이 인터넷에 접근할 수 있도록 설정 -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<!-- 기타 설정 -->
</application>
</manifest>
2) Gradle 의존성 추가
Retrofit과 OkHttp를 사용하려면 프로젝트에서 이 라이브러리들을 사용할 수 있도록 의존성을 추가해야 해요. build.gradle
파일에 아래 코드를 넣고 Sync를 실행하세요.
implementation "com.squareup.retrofit2:retrofit:2.11.0"
implementation "com.squareup.retrofit2:converter-gson:2.11.0"
implementation "com.squareup.okhttp3:logging-interceptor:4.12.0"
3) Retrofit 인스턴스 생성
R Retrofit 인스턴스를 생성하여 네트워크 요청을 처리할 준비를 해요. OkHttpClient를 추가하면 요청과 응답 로그를 기록할 수 있어요.
object RetrofitInstance {
private val client = OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
.build()
private val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/") // API 기본 URL
.addConverterFactory(GsonConverterFactory.create()) // JSON 데이터를 객체로 변환
.client(client)
.build()
fun <T> create(service: Class<T>): T = retrofit.create(service)
}
4) API 요청 정의
Retrofit에서는 API 요청을 인터페이스로 정의해요. 각 요청은 URL의 엔드포인트와 HTTP 메서드(GET, POST 등)로 구성돼요.
interface ApiService {
@GET("posts") // GET 요청
suspend fun getPosts(): List<Post>
@POST("posts") // POST 요청
suspend fun createPost(@Body post: Post): Response<Post>
}
3. JSON 응답 처리하기
서버에서 데이터를 가져오면 JSON 형식으로 전달돼요.
JSON 응답 예시
[
{
"id": 1,
"title": "Retrofit 배우기",
"body": "JSON 데이터를 처리하는 방법을 배워봅니다.",
"userId": 101
},
{
"id": 2,
"title": "OkHttp 활용하기",
"body": "요청과 응답 로그를 확인하는 방법을 알아봅니다.",
"userId": 102
}
]
데이터 클래스 정의
이 JSON 데이터를 Kotlin 객체로 변환하려면 데이터 클래스를 정의해야 해요. JSON 키 이름과 클래스 변수 이름이 같아야 변환이 제대로 돼요.
data class Post(
val id: Int,
val title: String,
val body: String,
val userId: Int
)
4. 데이터를 가져오기 (GET 요청)
Retrofit과 OkHttp를 사용해 서버에서 데이터를 가져오는 코드는 다음과 같아요.
@Composable
fun PostListScreen() {
val api = RetrofitInstance.create(ApiService::class.java)
val posts = remember { mutableStateOf<List<Post>>(emptyList()) }
LaunchedEffect(Unit) {
try {
posts.value = api.getPosts() // 서버에서 데이터를 가져옵니다
} catch (e: Exception) {
Log.e("PostListScreen", "데이터 가져오기 실패", e)
}
}
LazyColumn {
items(posts.value) { post ->
Text("제목: ${post.title}")
Text("내용: ${post.body}")
}
}
}
5. 데이터를 보내기 (POST 요청)
서버에 데이터를 보낼 때 JSON 형식을 사용해야 해요. 아래 데이터를 전송한다고 가정해볼게요.
{
"title": "Compose 배우기",
"body": "네트워크 요청을 처리하는 방법을 알아봅니다.",
"userId": 201
}
데이터 클래스
data class NewPost(
val title: String,
val body: String,
val userId: Int
)
POST 요청 코드
@Composable
fun CreatePostScreen() {
val api = RetrofitInstance.create(ApiService::class.java)
val newPost = NewPost(
title = "Compose 배우기",
body = "네트워크 요청을 처리하는 방법을 알아봅니다.",
userId = 201
)
Button(onClick = {
LaunchedEffect(Unit) {
try {
val response = api.createPost(newPost) // 데이터를 서버에 보냅니다
if (response.isSuccessful) {
Log.d("CreatePostScreen", "게시글 생성 성공: ${response.body()}")
}
} catch (e: Exception) {
Log.e("CreatePostScreen", "게시글 생성 실패", e)
}
}
}) {
Text("게시글 생성하기")
}
}
참고자료
Retrofit
A type-safe HTTP client for Android and Java
square.github.io
Overview - OkHttp
OkHttp HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP efficiently makes your stuff load faster and saves bandwidth. OkHttp is an HTTP client that’s efficient by default: HTTP/2 support allows all requests to
square.github.io
'Android' 카테고리의 다른 글
[Android] TrustedTime API: 앱에서 신뢰할 수 있는 시간 관리 방법 (0) | 2025.02.19 |
---|---|
[Android] Instagram Story 인스타그램 스토리 공유기능 (0) | 2024.03.27 |
[Android] 갤러리에서 사진 가져오기 (0) | 2024.03.23 |
[Android] 카메라 앱으로 사진 촬영 (0) | 2024.03.22 |