ETC/기타

Volley와 Retrofit

안녕하세요 씨앤텍 시스템즈입니다.

 

이번 포스트는 Android Studio의 HTTP 통신 라이브러리인 Volley와 Retrofit에 대해 정리해보았습니다.

 

 


[ Volley ]

Volley는 구글 IO 2013에서 공개한 Android 앱의 네트워킹을 더 쉽고 더 빠르게 만드는 HTTP 통신 라이브러리입니다.

다른 안드로이드용 HTTP 클라이언트 라이브러리가 제공하는 기능을 제공하면서도 용량이 작고 빠른 실행속도를 자랑합니다.

스레딩, 동기화, 병렬처리를 쉽게 할 수 있는 인터페이스를 제공하여 개발자가 비즈니스 로직을 만드는 데 집중할 수 있도록 합니다.

 


 

Volley에는 총 9가지의 기능이 있습니다.

 

  • 요청작업큐 + Thread pool을 이용한 동시 요청 지원
  • 요청별 우선 순위
    예를들어, 목록조회와 이미지 다운로드를 할 때 목록조회가 우선순위가 높게 설정합니다. 다음 페이지의 목록 조회를 요청하면 이전 페이지의 이미지 로딩이 끝나지 않아도 기다리지 않고 수행합니다.
  • Transparent cache
    요청하는 쪽에서 Cache 적용 여부를 의식하지 않아도 괜찮습니다.
  • 요청 취소
    특정 요청, 해당 Context의 요청을 모두 취소할 수 있고, 취소할 규칙도 지정 가능합니다.
  • 이미지 로딩툴, NetworkImageView라는 View 제공
  • 진저브레드 (Android 2.3) 이전의 HttpURLConnection의 버그 문제 해결
    진저브레드 이상에서만 java.net.HttoURLConnection을 쓴 로직이 들어가 있습니다.
  • retry, backoff policy 지원, 확장 기능
  • SPDY 지원
    SPDY(스피디)는 웹 콘텐츠를 전송할 목적으로 구글이 개발한 비표준 개방형 네트워크 프로토콜입니다.
  • JSON, XML, Image, protobuffer 등 다양한 Response 형식을 처리하도록 확장 가능

 


 

Volley의 사용 방법에 대해 알아보겠습니다.

 

1. Android Studio 의 build.gradle의 dependencies에 Volley를 추가합니다.

그림1. 라이브러리 추가

 

2. Android Studio의 AndroidManifest.xml에 uses-permission을 추가합니다.

그림2. 권한 추가

 

3. 액티비티에 요청한 후 결과값을 띄우기 위한 페이지에 요청을 처리할 버튼과 값을 보여줄 텍스트뷰를 생성합니다.

요청한 결과값의 길이에 상관없이 볼 수 있도록 ScrollView로 TextView를 감싸줍니다.

그림3. 레이아웃 정의

 

4. 클래스 파일에 RequestQueue를 설정합니다.

4.1 클래스 파일에 TextView, Button, RequestQueue를 선언합니다.

그림4. 요소 정의

4.2 onCreate에 액티비티에서 정의한 ID를 가져오고, 버튼에는 리스너를 설정합니다.

그림5. 리스너 설정

4.3 리스너를 정의합니다.

그림6. 리스너 정의

4.4 통신 메소드를 생성합니다.

간단하게 google과 통신하도록 하겠습니다.

메소드 정의는 https://developer.android.com/training/volley/simple#java를 참고했습니다.

 

그림7. 통신 메소드 생성

5. 앱을 실행하면 google의 요청에대한 응답을 받을 수 있습니다.

그림8. Volley 통신

 

 


[Retrofit]

RetrofitSquare사에서 제공하는 HTTP REST API구현을 위한 오픈소스 라이브러리입니다. REST API를 구현한 상태이므로 간단하게 GET, POST, PUT, DELETE 등을 전달하면 서버에서 처리 후 XML, JSON 등으로 응답을 제공받을 수 있는 형태입니다.
 대표적으로 RDBMS
에서 요청이 오면 처리하는 CRUD 기능 요청을 할 수 있게 제공합니다.

 


Retrofit에는 4가지 기능이 있습니다.

 

  • 네트워크 통신 연결/해제에 대해 체계적인 관리
  • 각종 에러처리를 원활하고 쉽게 함
  • 데이터를 가져와 각종 파싱 라이브러리를 통해 원하는 요구에 맞게 사용 가능
  • 서버로 연결된 후 요청을 데이터 포맷에 맞춰 요청하고, 데이터를 파싱하여 응답을 받을 수 있음

 


Retrofit의 사용방법에 대해 알아보겠습니다.

Retrofit은 Gradle과 .jar를 모두 제공하고 있고, 아래의 방법은 AndroidStudio에서 Gradle을 통해 라이브러리를 사용하는 방법입니다.

 

간단하게 통신하기 위해 GitHub의 Contributors를 통해 살펴보겠습니다.

Retrofit을 만든 Square사의 Contributors는

https://api.github.com/repos/square/retrofit/contributors 에서 JSON형식으로 반환됩니다.

그림9. github api 리턴값

수 많은 정보들 가운데 로그인 정보와 contributions에 대한 정보를 가져오도록 하겠습니다.

 

1. AndroidStudio의 build.gradle에 라이브러리를 추가합니다.

그림10. 라이브러리 추가

2. Android Studio의 AndroidManifest.xml에 uses-permission을 추가합니다.

그림2. 권한 추가

3. 액티비티에 요청한 후 결과값을 띄우기 위한 페이지에 요청을 처리할 버튼과 값을 보여줄 텍스트뷰를 생성합니다.

요청한 결과값의 길이에 상관없이 볼 수 있도록 ScrollView로 TextView를 감싸줍니다.

그림11. 레이아웃 정의

4. 클래스 파일에 Retrofit Builder 설정과 Retrofit 객체를 생성합니다.

4.1 login과 contributions의 필드에 해당하는 정보를 받아올 객체인 Contributor을 생성합니다.

그림12. Contributor 객체 생성

4.2 GitHubAPI 라는 인터페이스를 정의합니다.

GET/POST/DELETE/PUT 메소드 들을 인터페이스에 구현하여 사용할 수 있습니다.

그림13. REST API 인터페이스 생성

api.github.com/repos/square/retrofit/contributors 는 JSON Array를 리턴하기 때문에 List를 사용해 결과값을 받아줍니다.

 

4.3  클래스 파일에 TextView, Button, Retrofit, BASE_URL(https://api.github.com) 을 선언합니다.

그림14. 요소 정의

4.4 리스너를 정의하고, Retrofit Builder를 생성합니다.

JSON으로 들어오는 형식을 GsonConverterFactory를 통해 변환합니다.

변환하지 않으면 우리가 원하는 login과 contributions를 가져올 수 없기때문에 해 주어야 합니다.

그림15. retrofit Builder 생성
그림16. 리스너 정의

4.5 앞서 생성했던 GitHubAPI를 사용하기 위한 메소드를 정의합니다.

GitHubAPI 인터페이스를 생성하고, 인터페이스에 구현한 메소드인 contributors에 param 값을 넘기는 요청을 만들어줍니다.

성공했을 때, 실패했을 때를 각각 정의하고, 성공했을 때에는 받아온 리스트를 반복문을 통해 TextView에 추가합니다.

그림17. API 메소드 정의

 

5. 앱을 실행하면 요청한 URL에 대한 응답을 받을 수 있습니다.

그림18. Retrofit 통신

 


Volley와 Retrofit의 사용방법에 대해 알아보았습니다.

Volley도 Retrofit도 모두 괜찮은 라이브러리 이지만 Retrofit이 더 자주 쓰이는 이유는 속도차이가 크기 때문이라고 볼 수 있습니다.

 

One Discussion

Dashboard
(7 requests)

25 Discussions

Volley

560ms

2,202ms

4,275ms

Retrofit

312ms

889ms

1,059ms

많은 요청을 수행하게 될 때 Retrofit의 속도가 훨씬 빠르기 때문에 더 많이 사용하게 되고, 실행한 사진을 봐도 Retrofit이 더 빠르게 통신합니다.

빠른 속도와 간단하게 REST API를 정의할 수 있어 Volley보다는 Retrofit을 사용하는 것 같습니다.


지금까지 Volley와 Retrofit에 대해 알아보았습니다.

 

감사합니다.

 

 

 

728x90

'ETC > 기타' 카테고리의 다른 글

이미지로딩 라이브러리  (0) 2019.10.22