gRPC는 어떤 환경에서도 실행할 수 있는 최신 오픈소스의 고성능 RPC 프레임워크입니다. 부하 분산, 추적, 상태 확인 및 인증을 위한 플러그형 지원을 통해 데이터 센터 내부 및 데이터 센터 간에 서비스를 효율적으로 연결할 수 있습니다. 또한 라스트 마일(Last Mile)의 분산 컴퓨팅에서 기기, 모바일 애플리케이션 및 브라우저를 백엔드 서비스에 연결하는 데도 적용할 수 있습니다. 개발자는 gRPC 공식 웹사이트에서 문서를 찾고 오픈소스 커뮤니티의 지원을 받을 수 있습니다. 이 가이드에서는 gRPC를 사용하여 Android 앱을 빌드하는 솔루션을 소개합니다.
grpc.io는 gRPC 프로젝트의 공식 웹사이트입니다. gRPC의 작동 방식에 관한 자세한 내용은 gRPC란 무엇인가요? 및 gRPC 개념을 참조하세요. Android 앱에서 gRPC를 사용하는 방법은 gRPC Android 자바 빠른 시작의 Hello World 예를 참조하세요. 또한 GitHub에서 몇 가지 다른 gRPC Android 예도 찾아볼 수 있습니다.
기능
- 프로시저 호출로 간편성 제고
- gRPC는 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)를 직렬화/역직렬화 방법으로 사용합니다. 텍스트 기반 형식(예: JSON)과 비교했을 때 Protobuf는 마샬링 속도 및 코드 크기 측면에서 더 효율적인 데이터 교환을 제공하므로 모바일 환경에서 사용하기에 더 적합합니다. 또한 Protobuf의 간결한 메시지/서비스 정의 구문을 사용하면 앱의 데이터 모델 및 애플리케이션 프로토콜을 훨씬 더 쉽게 정의할 수 있습니다.
사용 개요
gRPC 기초 - Android 자바 가이드에 따라 Android 앱에 gRPC를 사용하려면 다음 네 단계가 필요합니다.
- 프로토콜 버퍼로 RPC 서비스를 정의하고 gRPC 클라이언트 인터페이스를 생성합니다.
- 클라이언트와 서버 간 RPC 호출을 위한 매체 역할을 하는 채널을 빌드합니다.
- 클라이언트 측에서 RPC 호출을 시작하기 위한 진입점으로 클라이언트 스터브를 만듭니다.
- 로컬 프로시저 호출을 실행할 때와 같이 원격 서버를 RPC 호출합니다.
시연을 위해 제공된 예에서 바이트는 일반 텍스트로 전송됩니다. 그러나 앱은 프로덕션 환경에서 항상 네트워크 데이터를 암호화해야 합니다. gRPC는 SSL/TLS 암호화 지원은 물론 인증을 위한 OAuth 토큰(Google 서비스의 OAuth2) 교환을 제공합니다. 자세한 내용은 Android의 TLS 및 OAuth2 사용을 참조하세요.
전송
gRPC는 Android 클라이언트를 위한 두 가지 전송 구현 옵션인 OkHttp 및 Cronet을 제공합니다.
전송 선택(고급)
- OkHttp
- OkHttp는 모바일에서 사용하도록 설계된 경량 네트워킹 스택입니다. Android 환경에서 실행하기 위한 gRPC의 기본 전송입니다. OkHttp를 앱의 gRPC 전송으로 사용하려면
AndroidChannelBuilder
로 채널을 구성하세요. 이 빌더는OkHttpChannelBuilder
를 래핑하고 Android OS에 네트워크 모니터를 등록하여 네트워크 변경에 신속하게 대응합니다. 사용 예는 gRPC-Java AndroidChannelBuilder에서 찾아볼 수 있습니다.
- Cronet(실험용)
- Cronet은 모바일용 라이브러리로 패키징된 Chromium의 네트워킹 스택입니다. 최신 QUIC 프로토콜로 강력한 네트워킹 지원을 제공하므로 신뢰할 수 없는 네트워크 환경에서 특히 효과적입니다. Cronet에 관한 자세한 내용은 Cronet을 사용하여 네트워크 작업 실행을 참조하세요.
Cronet을 앱의 gRPC 전송으로 사용하려면
CronetChannelBuilder
로 채널을 구성하세요. 사용 예는 gRPC-자바 Cronet 전송에 나와 있습니다.
일반적으로 말하면 최신 SDK 버전을 타겟팅하는 앱은 Cronet을 사용하는 것이 좋습니다. Cronet은 더 강력한 네트워크 스택을 제공하기 때문입니다. Cronet 사용의 단점은 APK 크기가 증가한다는 점입니다. 바이너리 Cronet 종속성을 추가하면 OkHttp의 ~100KB와 대비해서 >1MB의 앱 크기가 증가되기 때문입니다. GMSCore v.10부터 Google Play 서비스에서 최신 버전의 Cronet을 로드할 수 있습니다. 최신 GMSCore가 설치되지 않은 기기는 여전히 OkHttp 사용을 선호할 수 있지만 APK 크기는 더 이상 문제가 되지 않을 수 있습니다.