프로젝트 소개
OkHttp는 JVM, Android, GraalVM용 HTTP 클라이언트 라이브러리다. README에 따르면 기본적으로 효율성을 목표로 설계되었으며, HTTP/2 지원으로 같은 호스트로의 요청이 소켓을 공유하고, 커넥션 풀링으로 HTTP/2 미사용 시 지연을 줄이며, 투명 GZIP으로 다운로드 크기를 축소하고, 응답 캐싱으로 반복 요청 시 네트워크 접근을 완전히 피한다.
라이브러리는 불안정한 네트워크에서도 탄력적으로 동작하며, 일반적인 연결 문제를 silent하게 복구한다. 서비스에 여러 IP 주소가 있을 경우 첫 연결이 실패하면 대체 주소를 시도하는데, 이는 IPv4+IPv6 환경과 중복 데이터 센터 서비스에서 유용하다. TLS 1.3, ALPN, 인증서 pinning 같은 현대 TLS 기능을 지원하며, 광범위한 연결성을 위해 폴백 구성도 가능하다.
API는 플루언트 빌더와 불변 요청/응답 객체를 사용하며, 동기 블록킹 호출과 콜백 기반 비동기 호출 모두를 지원한다. README에는 URL 다운로드와 서버로 JSON 보내기 예제가 포함되어 있으며, 더 많은 예시는 레시피 페이지를 참조하도록 안내한다.
OkHttp는 RFC 9110(HTTP 세맨틱스), RFC 9111(캐싱), RFC 9112(HTTP/1.1), RFC 9113(HTTP/2), RFC 6455(WebSockets), WHATWG 서버 전송 이벤트 사양을 비롯한 현대 HTTP 규격을 따른다. 규격이 모호한 경우 현대 사용자 에이전트의 동작을 따르며, 버그가 있는 서버 우회나 유효하지 않은 시나리오에 대한 과도한 설정 가능성을 의도적으로 피한다. 예를 들어 GET에 바디 허용이나 캐시를 인터페이스로 노출해 대안 구현을 제공하는 등의 제한이 있다.
요구사항: Android 5.0+(API 레벨 21+) 및 Java 8+. Android에서는 AndroidX Startup을 사용하며, 초기화자를 매니페스트에서 비활성화하면 Application.onCreate에서 OkHttp.initialize(applicationContext)를 호출해야 한다. 고성능 I/O를 위해 Okio와 Kotlin 표준 라이브러리에 의존한다. README는 보안 문제 방지를 위해 OkHttp를 최신 상태로 유지할 것을 권장하며, 플랫폼 기본 TLS 구현을 사용하고 Java 플랫폼에서 Conscrypt가 첫 번째 보안 제공자일 경우 선택적으로 Conscrypt 지원을 언급한다. 레거시 3.12.x 브랜치는 Android 2.3+ 및 Java 7+를 지원하지만, 해당 플랫폼은 TLS 1.2가 없어 사용해서는 안 된다.
배포는 Maven Central을 통해 이루어지며, 버전 정합성을 위한 BOM(Bill of Materials), R8/ProGuard 규칙, 스냅샷 빌드가 제공된다. OkHttp는 Kotlin Multiplatform 프로젝트로 배포되므로, Maven 프로젝트에서는 okhttp-jvm과 okhttp-android 중 선택해야 하며 okhttp 아티팩트는 Maven 프로젝트에서 비어 있다. OkHttp 5.2+는 Java 9 모듈을 구현하며, README는 okhttp3, okhttp3.brotli, okhttp3.coroutines, okhttp3.dnsoverhttps, okhttp3.logging, okhttp3.sse, okhttp3.tls, okhttp3.urlconnection, mockwebserver3 및 그 JUnit 4/5 변형 등 안정된 공개 모듈을 나열한다.
MockWebServer는 HTTP, HTTPS, HTTP/2 클라이언트 테스트를 위해 포함된다. README는 주로 내부 테스트와 OkHttp 클라이언트를 사용하는 앱의 기본 테스트에 사용되며 완전한 기능의 독립형 HTTP 테스트 라이브러리는 아니고 신규 기능 개발이 활발하지 않다고 설명한다. 사용자가 MockWebServer를 벗어나 MockServer 같은 대안을 고려할 수 있음을 언급한다. GraalVM 네이티브 이미지 빌드는 okcurl 모듈을 예시로 자동으로 작동한다. 이 프로젝트는 Square, Inc.의 저작권 하에 Apache License 2.0으로 라이선스된다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.