개발자 삽살개
레트로핏2(retrofit2)를 사용해보자. 본문
안드로이드 레트로핏2는 Square사에서 만든 HTTP 통신 라이브러리로, HTTP REST API와 통신하기 위해 사용된다.
안드로이드 앱에서 서버로 HTTP 요청을 보내고, 서버로부터 받은 HTTP 응답을 처리하는 것이 주된 역할이다.
레트로핏은 요청과 응답의 데이터 변환을 위해 Gson등과 함께 사용할 수 있다.
레트로핏2 사용하기.
1. 레트로핏2 라이브러리 추가하기
안드로이드 프로젝트의 Gradle 파일에 다음 코드를 추가하여 레트로핏2 라이브러리를 추가한다.
implementation 'com.squareup.retrofit2:retrofit:X.X.X'
2. DTO 정의
DTO(Data Transfer Object)란?
DTO는 서버로부터 받은 데이터를 저장하기 위한 클래스다.
이 클래스는 서버에서 제공하는 데이터와 일치하는 필드를 가지고 있어야 한다.
예를 들어, 서버에서 제공하는 데이터의 구조가 다음과 같다고 가정해보자.
{
"id": 1,
"title": "첫 글 작성했습니다.",
"text": "행복한 하루입니다."
}
이것을 DTO클래스로 만들어보자.
public class Post {
private int id;
private String title;
private String text;
public int getId() {
return id;
}
public String getTitle() {
return title;
}
public String getText() {
return text;
}
}
DTO 클래스를 작성한 후에는, 이 클래스를 사용하여 서버로부터 받은 데이터를 저장할 수 있다.
3. API 인터페이스 생성하기
레트로핏2를 사용하기 위해서는 서버와 통신할 API 인터페이스를 생성해야 한다.
이 인터페이스를 작성하는 이유는 서버와 통신할 메서드를 정의하기 위함이다.
(자바로 작성한 코드이다.)
예를들어 다음과 같이 get 요청을 해야한다고 가정해보자.
https://11.222.333.444:80/api/verify?phoneNumber=0100000&homeCode=seoul
interface ApiCheckVerify {
@GET("/api/verify")
fun requestAuthMsg(
@Query("phoneNumber") phoneNumber:String,
@Query("homeCode") homeCode:String) : Call<Result>
}
코드를 분석하면 이런의미다.
@GET("/api/verify") : GET 요청임을 알리고, 경로(path)지정
@Query("phoneNumber")
@Query("hashCode")
: URI에 사용될 쿼리 파라미터다. 반드시 서버에서 요구하는 이름과 같게 적어야한다.
+ 2번에서 작성한 DTO를 변환 타입으로 지정해서 사용하면 아래와 같이 작성이 가능하다.
public interface ApiService {
@GET("/posts")
Call<List<Post>> getPosts();
}
API 인터페이스는 서버로부터 포스트 목록을 가져오는 API를 호출하고, 반환 타입으로 List<Post>를 지정했다.
요청 주소는 "/posts"이며, 반환 타입으로 Call<List<Post>>을 사용하고 있다.
이는 서버에서 제공하는 데이터를 List<Post> 형태로 받아올 것을 의미한다.
이와 같이 DTO 클래스를 작성하고, API 인터페이스에서 반환 타입으로 지정하여 사용하면, Retrofit2를 사용하여 서버로부터 응답을 받아 처리할 수 있다.
4.레트로핏 객체 생성하기
레트로핏2를 사용하기 위해서는 Retrofit 객체를 생성해야 한다.
이 객체는 서버 URL을 설정하고, API 인터페이스와 연결하여 사용할 수 있다.
레트로핏 객체를 생성해보자.
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService apiService = retrofit.create(ApiService.class);
위 코드에서는 빌더 패턴을 사용하여 Retrofit 객체를 생성하고 있다.
1. baseUrl() 메서드를 사용하여 서버 URL을 설정
2. addConverterFactory() 메서드를 사용하여 JSON 데이터를 자바 객체로 변환하기 위해 Gson 컨버터 팩토리를 추가
3. create() 메서드를 사용하여 API 인터페이스와 연결된 ApiService 객체를 생성.
5. API 호출하기
레트로핏2를 사용하여 API를 호출하려면 ApiService 객체의 메서드를 호출하면 된다.
Call<List<Post>> call = apiService.getPosts();
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
if (response.isSuccessful()) {
List<Post> posts = response.body();
// 서버로부터 받은 포스트 목록을 처리
} else {
// 응답이 실패한 경우 처리
}
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
// 통신 실패 시 처리
}
});
먼저, ApiService 객체의 getPosts() 메서드를 호출하여 Call 객체를 반환한다.
이 Call 객체는 서버로부터 받은 응답을 처리하기 위해 사용된다.
이후, Call 객체의 enqueue() 메서드를 호출하여 비동기적으로 서버에 요청을 보낸다.
이 때, Callback 객체를 전달하여 응답을 처리한다.
Callback 객체는 onResponse() 메서드와 onFailure() 메서드를 오버라이딩하여 구현한다.
onResponse() 메서드는 서버로부터 성공적으로 응답을 받았을 때 호출되며, onFailure() 메서드는 통신 실패 시 호출된다.
onResponse() 메서드에서는 Response 객체를 통해 서버로부터 받은 응답을 처리합니다. 이 Response 객체 List<Post> 형태로 처리된다.