Android (안드로이드)

[Android] HTTP 통신 라이브러리 - Volley / 예제 / 사용법

Oscar:) 2024. 1. 23. 15:51

 

 

이번 포스팅에서는 HTTP 통신 라이브러리 중

Volley에 대해 알아보자.

 

 

 


 

Volley란? 

 

 

공식 문서 ↓

 

 

Volley 개요  |  Android 개발자  |  Android Developers

Volley 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Volley는 Android 앱의 네트워킹을 더 쉽고, 무엇보다도 더 빠르게 하는 HTTP 라이브러리입니다. Volley는

developer.android.com

 

 

공식 깃허브 ↓

 

 

GitHub - google/volley

Contribute to google/volley development by creating an account on GitHub.

github.com

 


 

 

구글에서 만든 라이브러리이며 2013년도에 출시되었다.

 

공식 문서에서는 Volley를 다음과 같이 요약한다.

 

'안드로이드 앱을 위한 네트워킹을 더 쉽고 빠르게 만드는 HTTP 라이브러리'

 

 

 

RequestQueue에 Request를 추가시키는 방식으로 작동한다.

전형적인 Queue 방식이라 볼 수 있다.

 

또한 기본적으로 비동기 처리 방식을 지원한다.

 

 


 

사용해보기

 

 

✅ 의존성 추가

 

build.gradle(모듈 수준)에 다음 의존성을 추가해준다.

 

implementation 'com.android.volley:volley:1.2.1'

 

1.2.1 버전 이후로 최신 버전은 딱히 나오지 않을 것 같다.

(추후 업로드 하겠지만, Retrofit에 밀려났다)

 

 


 

✅ 기본 문법

 

기본적인 문법은 다음과 같다.

중요 부분마다 주석을 작성해 놓았으니 확인하기 바란다.

 

// 1) RequestQueue 초기화
RequestQueue queue = Volley.newRequestQueue(this);

// 2) Request 초기화
StringRequest stringRequest = new StringRequest(
    'HTTP Method',
    '요청 보낼 URL',
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            
            // 응답 성공 시 처리할 작업
            
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            
            // 응답 실패 시 처리할 작업
            
        }
});

// 3) RequestQueue에 Request 추가
queue.add(stringRequest);

 

 

1) 먼저 RequestQueue를 초기화 해준다.

Volley.newRequestQueue() 메서드의 인수에는 Context를 넣어주면 된다.

 

 

2) 그리고 RequestQueue에 추가해줄 Request를 생성해준다.

Volley의 기본 요청 유형은 다음 3가지를 제공한다.

 

- 문자열 : StringRequest
- 이미지 : ImageRequest
- JSON : JsonArrayRequest / JsonObjectRequest

 

 

위 예제에서는 StringRequest를 사용하여 요청을 보내서

String 타입의 Response를 받는다.

 

첫 번째 인수에는 HTTP Method를 넣어주고

두 번째 인수에는 요청을 보낼 URL을 넣어준다.

세 번째 인수에는 응답을 받고 처리하는 Listener를 넣어주고,

네 번째 인수에는 응답을 성공적으로 받지 못했을 시 처리하는 Listener를 넣는다.

 

 

3) RequestQueue에 Requset를 추가해준다.

 

 


 

✅ 사용해 보자

 

서버에 간단한 php 파일을 만들고,

해당 URL로 요청을 보내서 응답을 확인해 보겠다.

 

위 문법에서 사용한 예제를 그대로 사용한다.

 

String url = "http://1.23.456.78/API_Test.php";

RequestQueue queue = Volley.newRequestQueue(this);

StringRequest stringRequest = new StringRequest(
    Request.Method.GET,
    url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            
            Log.d(TAG, response);
            
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            
            Log.d(TAG, error);
            
        }
});

queue.add(stringRequest);

 

문법 코드에서 Request 객체의 생성자 인수만 변경했다.

 

HTTP Method는 GET을 사용했고,

URL은 본인 서버에 있는 php파일 경로를 String으로 넣어주었다.

 

그리고 응답 성공·실패 시 로그를 찍어놓았다.

 

 

해당 php 파일은 다음과 같다.

 

단순히 요청·응답이 성공하면 위와 같은 문자열이 로그에 출력될 것이다.

 

 

결과는 다음과 같다.

 

응답이 잘 도착하였다.

 

 


 

✅ 요청 파라미터 추가하기

 

위에서는 GET 메서드로 요청 파라미터 없이 단순 요청만 보냈다.

이제 요청 파라미터를 추가하는 방법을 알아보자.

 

 

String url = "http://1.23.456.78/API_Test.php";

RequestQueue queue = Volley.newRequestQueue(this);

StringRequest stringRequest = new StringRequest(
    Request.Method.POST,
    url,
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            
            Log.d(TAG, response);
            
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            
            Log.d(TAG, error);
            
        }
})
// getParams() 메서드 오버라이딩
{
        @Override
        public Map<String,String> getParams() throws AuthFailureError {
        
            // HashMap을 이용하여 파라미터 만들기
            Map<String, String> params = new HashMap<>();
            params.put("name", "Oscar");
            params.put("age", "29살");
            
            return params;
            
        }
};

queue.add(stringRequest);

 

 

HTTP Method는 POST로 변경했고,

Request 초기화 마지막 부분에 getParams() 메서드를 추가해줬다.

 

HashMap을 이용하여 String 데이터를 담아 요청했다.

 

 

 

그리고 수정된 php 파일은 다음과 같다.

 

 

POST 데이터를 받아서 출력하는 것 뿐이다.

 

 

결과는 다음과 같다.

 

 

응답이 잘 도착했다.

 

 


 

✅ JSON 데이터 응답 받기

 

 

대부분의 API 응답은 JSON 형식으로 날아온다.

 

JSON으로 출력하도록 php 파일을 수정해준다.

 

 

 

 

 

Request 객체의 onResponse() 부분만 보겠다.

 

@Override
public void onResponse(String response) {
    try {
    
        JSONObject jsonObject = new JSONObject(response);
        
        String name = jsonObject.getString("name");
        String age = jsonObject.getString("age");
        
        Log.d(TAG, name + "는 " + age + "입니다.");
        
    } catch (JSONException e) {
        throw new RuntimeException(e);
    }
}

 

여기서는 Response를 String으로 받았기 때문에

응답 받은 response를 JSONObject로 파싱하면 된다.

 

JSON 형태에 따라 JSONArray를 사용해야 할 수도 있다.

 

 

결과는 다음과 같다.

 

 

 

 

 


 

 

 

 

Volley 라이브러리에 대해 간단히 알아보았다.

 

 

여담)

Volley는 구글에서 개발하고 출시하였다.
그리고 안드로이드도 구글에서 출시하고 유지·관리 중이다.

하지만 재미있는 점은, 안드로이드 공식문서에서는
Http 통신을 할 때 Volley가 아닌 Retrofit을 권장한다.

자기 회사에서 만든 기술을 자기 회사에 적용하지 않는다는 이야기다.
즉, Volley는 Retrofit에게 밀려났다고 볼 수 있다.


그리하여 이제 Volley가 자주 사용되지는 않는다.
종종 Volley가 Deprecated 되지 않았냐며 이야기하는 사람들도 있다.

 

 

그래도 나름 사용하기 간편하다고 느낀다.

 

 

 

 

다음 포스팅에서는 OkHttp 라이브러리에 대해 알아보겠다.