Springに適用するgRPCライブラリの比較
Spring環境にgRPCを適用する主要な2つのライブラリを比較します。
概要
Spring環境にgRPCを適用する主要なライブラリは2つあります。
net.devh:grpc-server-spring-boot-starterorg.springframework.grpc:spring-grpc-spring-boot-starter
どちらもSpringへgRPCを統合しますが、出自、設計、サポート方式、将来性が大きく異なります。
ライブラリ比較
| 項目 | net.devh |
Spring gRPC |
|---|---|---|
| 出自 | コミュニティのサードパーティー | Spring公式プロジェクト |
| 安定性 | 長期間広く使用 | 初期段階で急速に発展 |
| 最新Spring対応 | Spring Boot 3とNative対応に制限 | Spring Boot 3、AOT、Native対応 |
| アーキテクチャー | gRPCサーバーとクライアントをラップ | Spring指向のgRPC抽象化 |
| クライアント方式 | Stub生成とアノテーション注入 | チャネルファクトリーとSpring Bean |
| 拡張性 | 従来のgRPC方式 | Springエコシステムとの連携 |
| 長期的方向性 | 安定した保守 | Spring標準になる可能性 |
背景
net.devh
- コミュニティが作成した長年利用されているサードパーティーライブラリ
- Spring Boot 1.xと2.xの時代に開始
- 多くの本番環境で使用され、成熟している
- Springチームによる開発ではない
- 保守は続くが、新機能は少ない
Spring gRPC
- Spring公式プロジェクト
- Spring Framework 6とSpring Boot 3向けに設計
- Springチームが管理
- AOT、Native Image、Observabilityと連携
アーキテクチャー
net.devh
- NettyベースのgRPCサーバーをSpring方式でラップ
@GrpcServiceと@GrpcClientを提供- Stubとチャネルを直接管理
@GrpcService
public class HelloServiceImpl extends HelloServiceGrpc.HelloServiceImplBase { ... }
@GrpcClient("myService")
private HelloServiceGrpc.HelloServiceBlockingStub stub;
Spring gRPC
- Springの概念でgRPCを再構成
- チャネル抽象化、サーバー抽象化、Bean設定を使用
- Spring AOT、GraalVM、Observabilityなどとの連携を考慮
@Service
class HelloServiceImpl : HelloServiceGrpcKt.HelloServiceCoroutineImplBase()
@Bean
fun helloStub(factory: GrpcChannelFactory) =
HelloServiceGrpcKt.HelloServiceCoroutineStub(factory.createChannel("local"))
運用上の比較
| 項目 | net.devh | Spring gRPC |
|---|---|---|
| 成熟度 | 非常に高い | 初期段階 |
| 企業での利用 | 多い | 増加中 |
| Spring Boot 3とAOT | 一部制限 | 完全対応 |
| ドキュメント | 主にGitHub wiki | Spring公式ドキュメント |
| 拡張性 | 従来のgRPC方式 | Springネイティブな拡張 |
どちらを選ぶべきか
即時の安定性が重要ならnet.devh
- 既存システムや大規模プロジェクトとの高い互換性
- 豊富なドキュメントと例
- 実績のある方式
最新のSpring技術を使うならSpring gRPC
- Spring Boot 3.xとSpring Framework 6.x向けに最適化
- Springエコシステムと密接に進化
- AOTとGraalVM Native Imageに適している
混在させない
サーバーとStubの管理方式が異なるため、同じアプリケーションで共存させないでください。
まとめ
net.devh
- サードパーティー
- 成熟して安定
- Spring Boot 1.xと2.x時代のソリューション
Spring gRPC
- Spring公式プロジェクト
- Boot 3、Spring 6、Native、Observabilityなどの現代的機能をサポート
- Springにおける標準gRPCソリューションになる可能性が高い