성장기록지

네트워크 통신 라이브러리 사용 고찰 (HttpUrlConnection, OkHttp, retrofit) 본문

개인 프로젝트

네트워크 통신 라이브러리 사용 고찰 (HttpUrlConnection, OkHttp, retrofit)

pengcon 2025. 1. 15. 19:29
부스트캠프 미션이나 프로젝트를 진행하며 네트워크 통신에는
retrofit과 Okhttp를 같이 쓰는게 거의 정석처럼 사용되어졌다.
이번 프로젝트를 계기로 기술 사용에 대한 근거를 세워보고자 한다.

1. HttpURLConnection

안드로이드 초창기에는 자바로 만들어진 HttpURLConnection이 네트워크 요청의 표준이었다고 한다.

자바에서 기본적으로 제공하는 클래스이기 때문에 호환성 문제도 없고 가볍게 사용할 수 있다는 장점이 있지만,

현재 시점에선 다음과 같은 문제들이 있다.

 

비동기 처리

  • HttpURLConnection은 기본적으로 동기 방식으로 동작한다.
  • 즉, 네트워크 요청이 완료될 때까지 메인 스레드가 차단(blocking)된다.

실제로 부스트캠프를 하며 httpUrlConnection을 사용해 보았을 때,

별도의 비동기 처리를 해주지 않으면 NetworkOnMainThreadException이 발생하였다.

 

예외 처리

  • HTTP 요청이 실패했을 때(예: 4xx, 5xx 상태 코드)에도 예외를 던지지 않는다!.
  • 따라서 직접 responseCode에 따라 처리를 해줘야 되는 큰 번거로움이 있다.

데이터 직렬화/역직렬화

  • JSON 또는 XML 데이터를 수동으로 파싱해야 한다.
  • Gson 같은 직렬화 라이브러리를 의존성 추가하고,추가적으로 설정하고, 코드 작성도 해야한다.
  • 이러한 과정들이 많이 번거롭게 여겨진다.

 

 

보일러 플레이트

  • 아래와 같이 api 하나를 부르는데도 보일러코드가 굉장히 길어진다.

 

OkHttp

위와 같은 HttpURLConnection의 단점을 보완하기 위해 OkHttp가 나왔다.

Okhttp는 Square에서 개발한 HTTP 네트워크 통신을 위한 써드파티 라이브러리이다.

다음과 같은 장점이 있다.

  • 통신 요청 시에 자동으로 백그라운드 스레드에서 작업
  • HttpURLConnection 대비 간결한 코드
  • Connection pooling과 Redirection으로 접속 안정과 속도 개선
  •  Interceptor를 사용하여 요청 및 응답을 가로채고 수정할 수 있다.

 

하지만 반환한 응답을 메인 스레드로 자동으로 전달해주진 않는 등의 단점도 있다.

그래서 이를 보완하기 위해 나온 Retrofit을 한번 살펴보자.

 

 

Retrofit

Retrofit은 OkHttp를 랩핑해 단점들을 보완하여 만든 라이브러리이다.

Okhttp를 대비해서 다음과 같은 장점이 있다.

  • converter를 이용한 편리한 데이터 파싱
  • 응답 반환 시 자동으로 메인 스레드 전달 처리
  • Type Safe
  • Annotation으로 HTTP 메소드를 정의함으로서 코드의 구현 및 해석 용이

여기서 Type Safe란 Call<T> 또는 타입 안정성이 보장된 객체를 반환한다는 것을 의미한다.

 

또한 Retrofit은 성능도 뛰어나다. Volley와 AsyncTask와 비교한 표이다.

통신 속도도 빠를 뿐 만 아니라 어노테이션 기반의 가독성, 편리한 converter 사용 등으로

retrofit이 주로 사용되게 되었고, 구글도 retrofit을 공식적으로 권장하고 있다. (구글이 volley를 만들었는데도)

 

 

Retrofit과 OkHttp를 같이 쓰는 이유

 

작성 중. . . .

 

 




https://jaeyeong951.medium.com/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-http-%ED%86%B5%EC%8B%A0%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B1%B0%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B2%83-9c90f5625d3e

 

안드로이드 HTTP 라이브러리, Retrofit 분석

안드로이드 네트워크 통신 라이브러리의 발전 과정(HttpUrlConnection, OkHttp, Retrofit)과 Retrofit 라이브러리 분석

jaeyeong951.medium.com

https://velog.io/@dabin/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Android-%ED%86%B5%EC%8B%A0-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%9D%98-%EC%97%AD%EC%82%AC

 

[안드로이드] Android 통신 라이브러리의 역사

안드로이드의 스레드는 크게 2종류입니다메인스레드(UI스레드): 1개만 존재백그라운드 스레드: 여러개 존재 가능네트워크 작업, 파일업로드와다운로드, 이미지 처리, 데이터 로딩같은 일을함메

velog.io

https://oscarstory.tistory.com/72

 

[Android] HTTP 통신 라이브러리 비교 / Volley · OkHttp · Retrofit

3차례에 걸친 지난 포스팅에서 알아보았던 3가지 HTTP 통신 라이브러리를 비교하는 시간을 가져보겠다. 비교해볼 항목은 다음과 같다. - 전체적인 사용법 (구현 난이도 파악) - 백그라운드 스레드

oscarstory.tistory.com