gRPC는 모든 환경에서 실행할 수 있는 최신 오픈소스 고성능 RPC 프레임워크입니다. 부하 분산, 추적, 상태 점검, 인증에 대한 플러그형 지원을 통해 데이터 센터 내부 및 데이터 센터 간에 서비스를 효율적으로 연결할 수 있습니다. 또한 분산 컴퓨팅의 라스트 마일에서 기기, 모바일 애플리케이션, 브라우저를 백엔드 서비스에 연결할 수 있습니다. gRPC 공식 웹사이트에서 문서를 찾고 오픈소스 커뮤니티의 지원을 받을 수 있습니다. 이 가이드에서는 gRPC를 사용하여 Android 앱을 빌드하는 솔루션을 설명합니다.
gRPC.io는 gRPC 프로젝트의 공식 웹사이트입니다. gRPC의 작동 방식에 관한 자세한 내용은 gRPC란 무엇인가요? 및 gRPC 개념을 참조하세요. Android 앱에서 gRPC를 사용하는 방법을 알아보려면 gRPC Android 자바 빠른 시작의 Hello World 예를 참조하세요. 또한 GitHub에서 몇 가지 다른 gRPC Android 예도 찾아볼 수 있습니다.
기능
- 프로시저 호출로 간편성 제고
- RPC이기 때문에 프로그래밍 모델은 프로시저 호출입니다. 기술의 네트워킹 측면은 애플리케이션 코드에서 추상화되어 마치 일반적인 프로세스 내 함수 호출처럼 보입니다. 클라이언트-서버 상호작용은 HTTP 리소스 메서드(예: GET, PUT, POST, DELETE)의 의미 체계에 의해 제한되지 않습니다. REST API에 비해 HTTP 프로토콜 메타데이터를 처리할 필요가 없으므로 더 자연스럽게 구현할 수 있습니다.
- HTTP/2를 통한 효율적인 네트워크 전송
- 휴대기기에서 백엔드 서버로 데이터를 전송하는 작업은 리소스를 매우 많이 사용하는 프로세스일 수 있습니다. 표준 HTTP/1.1 프로토콜을 사용하면 휴대기기에서 클라우드 서비스에 자주 연결할 경우 배터리가 소모되고 지연 시간이 증가하며 다른 앱의 연결을 차단할 수 있습니다. 기본적으로 gRPC는 HTTP/2를 기반으로 실행되며 양방향 스트리밍, 흐름 제어, 헤더 압축, 단일 TCP/IP 연결을 통해 요청을 다중화하는 기능을 제공합니다. 결과적으로 gRPC는 리소스 사용량을 줄여 클라우드에서 실행 중인 앱과 서비스 간의 응답 시간을 단축하고 네트워크 사용량을 줄이며 휴대기기에서 실행되는 클라이언트의 배터리 수명을 늘릴 수 있습니다.
- 내장 스트리밍 데이터 교환 지원
- gRPC는 처음부터 HTTP/2의 전이중 양방향 스트리밍 지원을 염두에 두고 설계되었습니다. 스트리밍을 사용하면 많은 양의 정보를 업로드하거나 다운로드해야 하는 작업과 같이 요청 및 응답이 임의의 크기를 가질 수 있습니다. 스트리밍을 사용하면 클라이언트와 서버가 동시에 메시지를 읽고 쓸 수 있으며 리소스 ID를 추적하지 않고도 서로 구독할 수 있습니다. 이렇게 하면 앱을 더 유연하게 구현할 수 있습니다.
- 프로토콜 버퍼와의 원활한 통합
- gRPC는 Android에 최적화된 codegen 플러그인 (Protobuf Java Lite)과 함께 프로토콜 버퍼(Protobuf)를 직렬화/역직렬화 방법으로 사용합니다. Protobuf는 텍스트 기반 형식 (예: JSON)에 비해 마샬링 속도와 코드 크기 측면에서 더 효율적인 데이터 교환을 제공하므로 모바일 환경에서 사용하기에 더 적합합니다. 또한 Protobuf의 간결한 메시지/서비스 정의 구문을 사용하면 앱의 데이터 모델과 애플리케이션 프로토콜을 훨씬 더 쉽게 정의할 수 있습니다.
사용 개요
gRPC 기본사항 - Android 자바 가이드에 따라 Android 앱에 gRPC를 사용하려면 4단계를 거쳐야 합니다.
- 프로토콜 버퍼를 사용하여 RPC 서비스를 정의하고 gRPC 클라이언트 인터페이스를 생성합니다.
- 클라이언트와 서버 간 RPC 호출의 매체 역할을 하는 채널을 빌드합니다.
- 클라이언트 측에서 RPC 호출을 시작하기 위한 진입점으로 클라이언트 스텁을 만듭니다.
- 로컬 프러시저 호출을 수행할 때처럼 원격 서버에 RPC를 호출합니다.
시연을 위해 제공된 예에서는 바이트가 일반 텍스트로 전송됩니다. 그러나 앱은 프로덕션 단계에서 항상 네트워크 데이터를 암호화해야 합니다. gRPC는 SSL/TLS 암호화 지원뿐만 아니라 인증을 위한 OAuth 토큰 교환(Google 서비스와 OAuth2)을 제공합니다. 자세한 내용은 Android의 TLS 및 OAuth2 사용을 참고하세요.
전송
gRPC는 Android 클라이언트를 위한 두 가지 전송 구현 옵션인 OkHttp와 Cronet을 제공합니다.
전송 선택(고급)
- OkHttp
- OkHttp는 모바일에서 사용하도록 설계된 경량 네트워킹 스택입니다. Android 환경에서 실행하기 위한 gRPC의 기본 전송입니다. OkHttp를 앱의 gRPC 전송으로 사용하려면
OkHttpChannelBuilder
를 래핑하고 네트워크 모니터를 Android OS에 등록하여 네트워크 변경사항에 빠르게 응답하는AndroidChannelBuilder
로 채널을 구성합니다. 사용 예는 gRPC-Java AndroidChannelBuilder에서 찾을 수 있습니다.
- Cronet(실험용)
- Cronet은 모바일용 라이브러리로 패키징된 Chromium의 네트워킹 스택입니다. 최신 QUIC 프로토콜로 강력한 네트워킹 지원을 제공하므로 신뢰할 수 없는 네트워크 환경에서 특히 효과적입니다. Cronet에 관한 자세한 내용은 Cronet을 사용하여 네트워크 작업 실행을 참고하세요.
앱에서 Cronet을 gRPC 전송으로 사용하려면
CronetChannelBuilder
로 채널을 구성합니다. 사용 예는 gRPC-자바 Cronet 전송에 제공됩니다.
일반적으로 최신 SDK 버전을 타겟팅하는 앱은 더 강력한 네트워크 스택을 제공하는 Cronet을 사용하는 것이 좋습니다. Cronet 사용의 단점은 APK 크기가 증가한다는 것입니다. 바이너리 Cronet 종속 항목을 추가하면 앱 크기가 1MB 이상 늘어나지만 OkHttp의 경우 약 100KB가 되기 때문입니다. GMSCore v.10부터 Google Play 서비스에서 최신 Cronet 사본을 로드할 수 있습니다. 최신 GMSCore가 설치되지 않은 기기는 여전히 OkHttp 사용을 선호할 수 있지만 APK 크기는 더 이상 문제가 되지 않을 수 있습니다.