Framework/gRPC

grpcurl

잔망루피 2023. 3. 24. 21:23
반응형

grpcurl

  • gRPC 서버와 통신할 수 있는 command-line tool
  • gRPC 서버에 있는 RPC 메소드를 호출하는 것이 목적
  • secure/TLS 서버, plain-text 서버를 지원
  • Docker, 로컬에서 설치할 수 있다.
grpcurl [flags] [address] [list|describe] [symbol]

address는 다음과 같은 사항에서만 쓰이는 선택 옵션이다.

  1. list 또는 describe를 사용할 때
  2. protoset 또는 proto flag가 주어질 때

list

  • symbol은 fully-qualified service name
  • symbol이 주어졌다면, 해당 서비스의 모든 메서드를 출력
  • symbol이 주어지지 않았다면, 모든 노출된 서비스가 출력되거나 protoset에 모든 서비스를 정의한다.

 

describe

  • symbol은 fully-qualified service, enum, or message name.
  • symbol이 주어지지 않았으면, 모든 서비스를 출력

 

address

  • "host:port"과 같은 형식
    • host는 IP 주소 또는 호스트명
    • port는 숫자 포트번호 또는 서비스명
  • IPv6 주소는 "[2001:db8::1]"와 같이 []로 감싼다.

 

flags

내가 자주 사용하는 것 정리

  • -d string
    • 요청 본문 데이터
  • -help
    • grpcurl 사용 방법 출력
  • -plaintext
    • 서버에 연결할 때 plain-text HTTP/2 사용(no TLS)
  • -version
    • 현재 버전 출력

 

📌 알아야하는 것

  • 어플리케이션 내에서 gRPC 서버를 생성하고 연결한다.
    • 기본 포트는 9090

아래 코드들을 추가해주고 👇 참고함

https://github.com/yidongnan/grpc-spring-boot-starter/tree/master/examples/local-grpc-server/src/main/java/net/devh/boot/grpc/examples/local/server

 

GitHub - yidongnan/grpc-spring-boot-starter: Spring Boot starter module for gRPC framework.

Spring Boot starter module for gRPC framework. Contribute to yidongnan/grpc-spring-boot-starter development by creating an account on GitHub.

github.com

 

@Configuration(proxyBeanMethods = false)
public class GlobalInterceptorConfiguration {

    @GrpcGlobalServerInterceptor
    LogGrpcInterceptor logServerInterceptor() {
        return new LogGrpcInterceptor();
    }
}

 

public class LogGrpcInterceptor implements ServerInterceptor {

    private static final Logger log = LoggerFactory.getLogger(LogGrpcInterceptor.class);

    @Override
    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> serverCall, Metadata metadata,
                                                                 ServerCallHandler<ReqT, RespT> serverCallHandler) {
        log.info(serverCall.getMethodDescriptor().getFullMethodName());
        return serverCallHandler.startCall(serverCall, metadata);
    }
}

 

 

🐋 grpcurl을 Docker에서 설치

docker를 실행할 때 Mac 또는 Windows는 localhost 대신에 host.docker.internal을 사용한다.

 

 

🟥 로컬에 grpcurl 설치

https://github.com/fullstorydev/grpcurl/releases

 

Releases · fullstorydev/grpcurl

Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers - fullstorydev/grpcurl

github.com

👆 grpcurl_1.8.7_windows_x86_64.zip로 다운받았다.

각자 OS에 따라서 설치하면 된다.

환경변수 설정도 했다. Path에 grpcurl_1.8.7_windows_x86_64 폴더 경로를 추가

 

 

위에서도 말했지만, gRPC 서버와 tomcat 서버는 별개다!!!

gRPC 서버를 정의해주고 포트 번호는 기본이 9090이다.

통신 성공

 

 

 

참고 👇

https://github.com/fullstorydev/grpcurl

 

GitHub - fullstorydev/grpcurl: Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers

Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers - GitHub - fullstorydev/grpcurl: Like cURL, but for gRPC: Command-line tool for interacting with gRPC servers

github.com

 

https://godd.tistory.com/90

 

[gRPC] grpcurl 설치 (for Windows)

Rest 테스트를 위한 커맨드용 Client로 cURL 이 있듯이, gRPC 테스트를 위한 툴은 grpcurl 이 있다. 1. 아래 Tool 다운 받아서 압축 해제 gRPC용 Client Tool https://github.com/fullstorydev/grpcurl/releases/download/v1.8.1/grpcu

godd.tistory.com

 

https://caddy.community/t/tls-first-record-does-not-look-like-a-tls-handshake/9736

 

https://docs.docker.com/desktop/networking/

 

Explore networking features

 

docs.docker.com

 

반응형

'Framework > gRPC' 카테고리의 다른 글

[Error] NotSslRecordException & Http2Exception  (0) 2023.04.17
gRPC  (1) 2023.03.15