성장기록지
네트워크 통신 라이브러리 사용 고찰 (HttpUrlConnection, OkHttp, retrofit) 본문
부스트캠프 미션이나 프로젝트를 진행하며 네트워크 통신에는
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://oscarstory.tistory.com/72
'개인 프로젝트' 카테고리의 다른 글
Flow debounce와 프로젝트 적용(검색 기능 api 호출 최적화) (0) | 2025.02.01 |
---|---|
Paging 학습 및 프로젝트 적용 (0) | 2025.01.28 |
ShapeableImageView로 이미지 뷰 radius 적용 (w.내부 구현) (0) | 2025.01.12 |
개인 프로젝트) 디자인 키트 구매, 활용 api 정하기 (mockup api, 네이버 쇼핑 api) (0) | 2025.01.05 |
개인 프로젝트) 주제와 기술적 도전 기획 (0) | 2025.01.03 |