Volley의 Apache HTTP client 라이브러리 참조 제거

Volley는 2013년 구글에서 공개한 안드로이드 네트워크 라이브러리다. 구글 플레이 스토어 팀에서 개발/적용 후 공개한 것이 Volley의 시작으로 알려져 있다. 지금은 인기가 예전만 못하지만, 공개 당시에는 가장 좋은 네트워크 라이브러리 중 하나였다. Volley에 대한 자세한 소개는 공식 트레이닝 사이트(한글)를 참조하자.

공식 Apache HTTP client 라이브러리(이하, 라이브러리)는 자바 진영의 대표적인 HTTP 라이브러리로, 수많은 개발자를 네트워크와 관련된 혼란에서 구제했다. 안드로이드도 이 라이브러리를 이식해주어, 안드로이드 앱 개발자들에게 추가적인 학습 없이도 네트워크 관련 기능을 쉽게 쓰도록 해주었다.

다만, 지금와서 보면 원래 라이브러리의 어느 버전을 이식한 것인지 불분명하고 원래 라이브러리는 오래 전에 Apache HttpComponents로 이름까지 바뀌었다. 배터리와 데이터 사용량 등에 민감하고 네트워크 상황이 빈번히 바뀌는 모바일 환경의 특징도 충분히 반영하지 못한 것 같다. 정확한 이유는 찾지 못했으나 개인적으로 폭발적인 안드로이드 성장세에 최대한 빨리 HTTP 관련 라이브러리 지원을 하고자 했던 당시 상황이 영향을 준 것 같다. 이와 관련하여, 안드로이드의 HTTP 라이브러리 비교분석 글을 읽어보면 좋다.

앞서 언급한 이유인지 모르지만, 안드로이드는 M(6.0)과 P(9.0) 두 차례에 걸쳐 이 라이브러리 지원 종료를 예고했다. 지원 제거가 곧 사용 불가를 의미하는 것은 아니어서, M 이상은 build.gradleP 이상은 AndroidManifest.xml 에 명시적 선언을 하면 여전히 사용할 수 있다. 하지만, 안드로이드는 기능적으로 개선된 HTTPUrlConnection 사용을 권장한다.

이런 안드로이드의 정책에 맞춰 Volley도 minSdkVersion이 9 이상이면 v1.1.0부터 라이브러리를 참조하지 않는다. 참조할  필요가 없으니 명시적 선언도 제거할 수 있다. Volley를 사용하고 있다면 최신버전을 사용하고 라이브러리 참조도 제거해보자.

그 밖에

  • Volley는 장기적으로 조건부 참조 코드도 제거할 것이라 한다. Volley 라이브러리 업데이트가 예전만큼 활발하지 않아 언제 반영될지는 알 수 없지만 말이다.

참조

Volley와 Stetho로 네트워크 디버깅

Stetho는 2015년 페이스북에서 공개한 안드로이드 디버깅 도구다. 크롬 브라우저에 내장된 개발자 도구인 DevTools를 활용해 안드로이드 앱의 네트워크, 데이터베이스, 프리퍼런스, 레이아웃 등을 디버깅 할 수 있다. 더 자세한 기능 소개는 공식 페이지를 참조하자.

네트워크 라이브러리와 연계 동작하는 라이브러리들은 보통 Volley를 지원한다. 하지만, Stetho의 네트워크 디버깅 기능은 앱이 OkHttp나 안드로이드의 HttpUrlConnection를 써야 쓸 수 있다. 환경이 맞다면 좋겠지만, 이미 개발된 앱의 네트워크 라이브러리를 Stetho 쓰자고 바꾸기는 어렵다. 같은 고민인지, 아래처럼 Volly의 RequestQueue 객체 생성 시에 OkHttp 라이브러리의 특정 클래스 객체만 활용하는 우회법을 제안하는 글이 많다.

OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());
mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new OkHttpStack(client));

물론 네트워크 라이브러리를 바꾸는 것에 비해 수정은 적지만, 쓰지 않아도 되는 라이브러리를 추가하는건 여전하다. 이 같은 고민을 한다면 포기하기 전에 여기를 살펴보자. Stetho의 UrlConnectionManager를 활용하는 기능이 포함된 StethoVolleyHurlStack 클래스를 제공하여, OkHttp를 사용하지 않고도 Stetho의 네트워크 디버깅을 사용하도록 도와준다.

RequestQueue queue = Volley.newRequestQueue(this, new StethoVolleyHurlStack());

2020년 1월 테스트로는 잘 되지만, 1년 넘게 commit이 없고 pull-request도 처리 안하는 것으로 미루어 보아 유지보수가 중단된 것 같다.

그 밖에

  • 데이터베이스, 프리퍼런스, 레이아웃 디버깅과 같은 다른 기능들은 위와 같은 수정 없이 Stetho 라이브러리 적용만으로 쓸 수 있다.

참고