07-02 03:26
Notice
Recent Posts
Recent Comments
07-02 03:26
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

pear

[android]okhttp & Retrofit 본문

android

[android]okhttp & Retrofit

pearlab 2023. 8. 10. 14:42

 

Okhttp

HTTP 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 라이브러리 입니다.

 

Retrofit

Okhttp를 사용하여 rest server와 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 라이브러리 입니다.

 

Type-Safe

Response에 대한 Type을 정의 할수 있음

 async-thread-safe

network 동작에 대한 

 

 

편리한 interface 제공

HTTP Method interface

Builder interface

DTO(Data Transfer Object)

- 이름과 같이 계층 간 데이터 교환을 위해 사용하는 객체다.

*여기서 말하는 계층이란, View - Controller - Service - DAO와 같은 각 계층을 말한다.

- VO와 혼용되어 쓰이나, 이는 보통 DTO를 지칭하는 말이다.

- 데이터를 담을 private 변수와 그 변수를 조작할 수 있는 Getter, Setter 메소드로 구성되어 있다.

POJO(Plain Old Java Object)

- 특정 인터페이스나 클래스를 상속하지 않고, 순수하게 Getter, Setter로만 구성된(어디에도 종속되지 않은) 자바 객체를 말한다.

- 다른 곳에 종속되지 않는다는 것은 해당 클래스를 사용하기 위해 어떤 프레임워크나 외부 환경이 필요없다는 것이다.

- 즉, Spring MVC를 걷어내도 POJO들은 정상적으로 동작되어야 한다.

- POJO와 설정 정보(Configuration metadata)를 Spring IoC Container에 주입시키면 Bean으로 등록, 사용이 가능하다.

 

 

"Retrofit"은 주로 안드로이드 앱 개발에서 사용되는 오픈 소스 라이브러리로, 웹 서비스를 사용하는 앱에서 서버와의 통신을 쉽게 처리하기 위해 설계되었습니다. Retrofit은 네트워크 요청을 만들고 응답을 처리하는 과정을 단순화하며, HTTP 요청과 응답을 자바 인터페이스로 변환해줍니다.

Retrofit의 주요 특징과 동작 방식은 다음과 같습니다:

간편한 인터페이스 정의: Retrofit은 앱에서 사용할 API 엔드포인트와 각 엔드포인트에 대한 HTTP 요청 메소드(GET, POST, PUT, DELETE 등)를 자바 인터페이스로 정의할 수 있게 해줍니다. 이 인터페이스에서 필요한 파라미터와 리턴 타입을 정의하면 됩니다.

주석을 통한 설정: 요청에 필요한 다양한 설정(헤더, 쿼리 매개변수 등)은 주석을 사용하여 인터페이스의 메소드에 지정할 수 있습니다.

요청 생성 및 처리: 인터페이스 메소드를 호출하면 Retrofit은 이를 기반으로 실제 HTTP 요청을 생성하고 서버로 전송합니다. 또한 비동기적으로 요청을 보내고 응답을 받아 처리할 수 있는 메커니즘을 제공합니다.

강력한 변환기(Converter): Retrofit은 서버 응답을 자바 객체로 변환해주는 Converter를 지원합니다. 이를 사용하면 JSON, XML 등의 응답을 객체로 변환하거나, 객체를 요청 본문 데이터로 변환할 수 있습니다.

OkHttp와 통합: Retrofit은 OkHttp 라이브러리와 함께 사용될 때 가장 효과적으로 동작합니다. OkHttp는 네트워크 요청의 성능과 안정성을 향상시켜주는 라이브러리로, Retrofit과 함께 사용하면 더욱 효과적인 네트워크 통신을 구현할 수 있습니다.

간단한 예시로 Retrofit을 사용하여 GET 요청을 보내는 코드를 살펴보겠습니다:

public interface ApiService {
    @GET("posts/{id}")
    Call<Post> getPost(@Path("id") int postId);
}

// ...

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

ApiService apiService = retrofit.create(ApiService.class);

Call<Post> call = apiService.getPost(1);
call.enqueue(new Callback<Post>() {
    @Override
    public void onResponse(Call<Post> call, Response<Post> response) {
        if (response.isSuccessful()) {
            Post post = response.body();
            // 처리 로직
        } else {
            // 에러 처리
        }
    }

    @Override
    public void onFailure(Call<Post> call, Throwable t) {
        // 네트워크 에러 처리
    }
});