[java] 자바에서 gRPC 서버를 구현하는 방법은 어떤 것이 있는가?

gRPC는 프로토콜 버퍼를 기반으로 한 원격 프로시저 호출(RPC) 프레임워크로, 자바로 gRPC 서버를 구현하는 방법에 대해 알아보겠습니다.

  1. 의존성 추가하기 gRPC를 사용하기 위해서는 먼저 프로젝트에 gRPC 관련 의존성을 추가해야 합니다. Maven 프로젝트의 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다:

    <dependencies>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty</artifactId>
            <version>1.40.1</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.40.1</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.40.1</version>
        </dependency>
    </dependencies>
    
  2. gRPC 서비스 정의하기 protobuf 파일로 gRPC 서비스를 정의해야 합니다. *.proto 파일을 생성하고, 서비스 및 메서드를 정의합니다. 예를 들어, HelloService.proto 파일에 다음과 같이 정의할 수 있습니다:

    syntax = "proto3";
    
    package com.example.grpc;
    
    service HelloService {
        rpc SayHello (HelloRequest) returns (HelloResponse) {}
    }
    
    message HelloRequest {
        string name = 1;
    }
    
    message HelloResponse {
        string message = 1;
    }
    
  3. 서버 구현하기 gRPC 서버를 구현하기 위해 자바 클래스를 작성해야 합니다. 이 클래스는 gRPC 서비스의 인터페이스를 구현하고, 메서드를 오버라이드해야 합니다. 예를 들어, HelloServiceServer 클래스를 다음과 같이 작성할 수 있습니다:

    package com.example.grpc;
    
    import io.grpc.stub.StreamObserver;
    
    public class HelloServiceServer extends HelloServiceGrpc.HelloServiceImplBase {
        @Override
        public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) {
            String name = request.getName();
            String message = "Hello, " + name + "!";
    
            HelloResponse response = HelloResponse.newBuilder()
                .setMessage(message)
                .build();
    
            responseObserver.onNext(response);
            responseObserver.onCompleted();
        }
    }
    
  4. 서버 시작하기 gRPC 서버를 실행하기 위해 메인 클래스를 작성해야 합니다. 예를 들어, HelloServer 클래스를 다음과 같이 작성할 수 있습니다:

    package com.example.grpc;
    
    import io.grpc.Server;
    import io.grpc.ServerBuilder;
    
    import java.io.IOException;
    
    public class HelloServer {
        private static final int PORT = 50051;
    
        public static void main(String[] args) throws IOException, InterruptedException {
            Server server = ServerBuilder.forPort(PORT)
                .addService(new HelloServiceServer())
                .build();
    
            server.start();
            System.out.println("Server started on port " + PORT);
    
            server.awaitTermination();
        }
    }
    
  5. 서버 실행하기 HelloServer 클래스를 실행하여 gRPC 서버를 시작할 수 있습니다. 서버가 시작되고 클라이언트 요청을 처리할 준비가 되면, “Server started on port 50051” 메시지가 출력됩니다.

이제 자바에서 gRPC 서버를 구현하는 방법에 대해 알게되었습니다. gRPC를 사용하면 효율적이고 안정적인 원격 프로시저 호출을 구현할 수 있습니다. gRPC 공식 문서에서 더 많은 정보를 찾을 수 있으니 참고하시기 바랍니다.

참고 문서: