반응형
Error
gRPC 통신시 아래와 같은 에러 발생
io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method not found: com.example.grpcserver.GrpcServerService/getData
at io.grpc.Status.asRuntimeException(Status.java:539)
at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:487)
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:563)
at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:744)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:723)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
반응형
Solution
“UNIMPLEMENTED: Method not found” 오류는 gRPC 클라이언트가 서버의 해당 메서드를 찾지 못했을 때 발생함. 이 문제를 해결하려면 아래의 항목들을 확인.
1. gRPC 메서드명 일치 확인:
- 클라이언트에서 호출하려는 gRPC 메서드와 서버에서 구현한 메서드의 이름이 정확히 일치하는지 확인.
2. Proto 파일 확인:
- 서버와 클라이언트 양쪽에서 사용되는 프로토콜 버퍼 파일 (.proto)을 확인하여 메서드 이름과 일치하는지 확인
3. 서버에서 서비스 등록 확인:
- 서버에서 gRPC 서비스를 제대로 등록했는지 확인. Spring Boot에서는 @GrpcService 애노테이션을 사용하여 gRPC 서비스를 스프링 빈으로 등록해야함.
import io.grpc.BindableService;
import io.grpc.Server;
import io.grpc.ServerBuilder;
import org.lognet.springboot.grpc.GRpcService;
@GRpcService
public class MyGrpcServer extends MyServiceGrpc.MyServiceImplBase {
// 서비스 구현
}
4. 서버와 클라이언트의 버전 일치 확인:
- gRPC 라이브러리의 버전이 서버와 클라이언트 간에 일치하는지 확인
5. 연결 설정 확인:
- 클라이언트에서 서버에 연결할 때 올바른 호스트 및 포트를 사용했는지 확인
6. 빌드 및 코드 재컴파일:
- 프로토콜 버퍼 파일이 변경되었다면, 서버 및 클라이언트 코드를 다시 컴파일하여 업데이트된 메서드 사용
나의 경우 Proto 파일 버전이 맞지 않아서 메소드 명이 달라 발생한 문제였음..
Thank you!
반응형