성장기록지
네트워크 통신 라이브러리 사용 고찰 (HttpUrlConnection, OkHttp, retrofit) 본문
부스트캠프 미션이나 프로젝트를 진행하며 네트워크 통신에는
retrofit과 Okhttp를 같이 쓰는게 거의 정석처럼 사용되어졌다.
이번 프로젝트를 계기로 기술 사용에 대한 근거를 세워보고자 한다.
1. HttpURLConnection
안드로이드 초창기에는 자바로 만들어진 HttpURLConnection이 네트워크 요청의 표준이었다고 한다.
하지만 현재 시점에선 다음과 같은 문제들이 있다.
비동기 처리
- HttpURLConnection은 기본적으로 동기 방식으로 동작한다.
- 즉, 네트워크 요청이 완료될 때까지 메인 스레드가 차단(blocking)된다.
실제로 부스트캠프를 하며 httpUrlConnection을 사용해 보았을 때,
별도의 비동기 처리를 해주지 않으면 NetworkOnMainThreadException이 발생하였다.
예외 처리
- HTTP 요청이 실패했을 때(예: 4xx, 5xx 상태 코드)에도 예외를 던지지 않는다!.
- 따라서 직접 responseCode에 따라 처리를 해줘야 되는 큰 번거로움이 있다.
데이터 직렬화/역직렬화
- JSON 또는 XML 데이터를 수동으로 파싱해야 한다.
- Gson 같은 직렬화 라이브러리를 의존성 추가하고,추가적으로 설정하고, 코드 작성도 해야한다.
- 이러한 과정들이 많이 번거롭게 여겨진다.
작성중
2. OkHttp의 등장: 강력한 HTTP 클라이언트
OkHttp는 Square에서 개발한 고성능 HTTP 클라이언트로, HttpURLConnection의 한계를 극복하기 위해 설계되었습니다.
OkHttp의 주요 장점
- 효율적인 연결 관리: 연결 풀링(Connection Pooling)을 통해 동일한 서버에 대한 연결을 재사용하여 성능을 최적화합니다.
- HTTP/2 지원: 최신 웹 프로토콜을 지원하여 더 빠르고 효율적인 네트워크 통신이 가능합니다.
- 비동기 요청 지원: 콜백 기반의 비동기 요청 처리로 UI 스레드를 차단하지 않습니다.
- 커스터마이징 가능: Interceptor를 사용하여 요청 및 응답을 가로채고 수정할 수 있습니다.
OkHttp는 이러한 기능 덕분에 네트워크 통신에서 가장 강력한 HTTP 클라이언트로 자리 잡았습니다. 하지만 OkHttp만으로는 API 요청을 처리하는 데 많은 코드가 필요합니다. 여기서 Retrofit이 등장합니다.
3. Retrofit: REST API를 위한 최적의 라이브러리
Retrofit은 RESTful API 통신을 간편하게 처리할 수 있도록 설계된 고수준 네트워크 라이브러리입니다.
Retrofit의 주요 특징
- 인터페이스 기반 요청 정의: API 요청을 함수로 정의하여 가독성을 높이고 유지보수를 쉽게 합니다.
- 데이터 직렬화/역직렬화: Gson, Moshi, Kotlin Serialization 등을 사용하여 요청 및 응답 데이터를 자동으로 변환합니다.
- 코루틴 지원: Kotlin 코루틴과의 완벽한 통합으로 간단하고 안전한 비동기 처리가 가능합니다.
- 확장성: OkHttp와 결합하여 Interceptor, 로그, 인증 등을 손쉽게 추가할 수 있습니다.
4. Retrofit과 OkHttp의 시너지
Retrofit은 네트워크 요청을 간단하게 만드는 고수준의 추상화 도구지만, 실제 HTTP 통신은 OkHttp에 의존합니다. 즉, Retrofit은 요청을 관리하고 데이터를 변환하는 역할을, OkHttp는 네트워크 연결과 통신을 담당하는 역할을 합니다.
Retrofit과 OkHttp를 함께 사용하는 이유
- 역할 분리: Retrofit은 API 요청을 정의하고 데이터를 직렬화/역직렬화하는 데 중점을 두고, OkHttp는 실제 네트워크 작업을 처리합니다.
- 최신 기술 활용: OkHttp의 HTTP/2, 연결 풀링 등의 최신 네트워크 기술을 Retrofit에서 그대로 활용할 수 있습니다.
- Interceptor를 통한 확장성: OkHttp의 Interceptor를 활용하여 로그, 인증, 헤더 추가 등을 쉽게 구현할 수 있습니다.
- 비동기 작업의 간소화: Retrofit은 OkHttp의 비동기 기능을 활용하며, Kotlin 코루틴과 결합하면 더욱 간단한 비동기 처리가 가능합니다.
5. 결론
Retrofit과 OkHttp는 서로의 부족한 점을 보완하며 완벽한 네트워크 통신 솔루션을 제공합니다. Retrofit의 간결한 API 설계와 OkHttp의 강력한 네트워크 기능이 결합되어, 안드로이드 개발자가 REST API를 더욱 효율적이고 쉽게 다룰 수 있습니다.
현대 안드로이드 앱 개발에서는 이 두 라이브러리를 함께 사용하는 것이 사실상 표준으로 자리 잡았으며, 앞으로도 그 인기는 계속될 것입니다.
'개인 프로젝트' 카테고리의 다른 글
ShapeableImageView로 이미지 뷰 radius 적용 (w.내부 구현) (0) | 2025.01.12 |
---|---|
개인 프로젝트) 디자인 키트 구매, 활용 api 정하기 (mockup api, 네이버 쇼핑 api) (0) | 2025.01.05 |
개인 프로젝트) 주제와 기술적 도전 기획 (0) | 2025.01.03 |