Spring Boot에서 GRPC 사용하기 (2) - GRPC Server, GRPC Client 만들기

Dinnertimes·2024년 8월 5일
0

Spring Boot

목록 보기
3/3
post-thumbnail

이전 포스팅을 반드시 보고와주세요!!
https://velog.io/@dinnertime/Spring-Boot%EC%97%90%EC%84%9C-GRPC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-1-GRPC-proto-interface%EB%A7%8C%EB%93%A4%EA%B8%B0

개발환경은 vscode 입니다.

빌드도구는 Maven을 사용합니다.

1. GRPC Server

1-1. 프로젝트 생성하기

vscode > F1 > Spring Create 검색 > Create a Maven Project 선택

  • groupid, artifact id등 필요한 설정을 마치면 프로젝트가 생성됩니다.

1-2. Dependency 추가하기

  • grpc-server-spring-boot-starter dependency를 추가합니다.
<dependency>
	<groupId>net.devh</groupId>
	<artifactId>grpc-server-spring-boot-starter</artifactId>
	<version>3.1.0.RELEASE</version>
</dependency>
  • 이전 포스팅에서 생성한 grpc interface jar 파일을 원하는 폴더에 위치시킵니다. ( 해당 예시에서는 /lib/*에 위치 )
  • 아래와 같이 grpc interface dependency를 추가합니다.
<!-- Local Repository 설정 -->
<repositories>
	<repository>
	<id>local-repository</id>
	<name>local repository</name>
	<url>file://${project.basedir}/lib</url>
	</repository>
</repositories>

<!-- Local dependency 추가 -->
<dependencies>
	<!-- 기존 dependencies... -->
	<dependency>
		<groupId>grpc</groupId>
		<artifactId>grpc-interface</artifactId>
		<version>1.0.0</version>
	</dependency>
</dependencies>

1-3. GRPC Service 구현하기

  • 원하는 위치에 Service 파일을 만들어 아래와 같이 작성해줍니다.
import example.proto.Example.HelloRequest;
import example.proto.Example.HelloResponse;
import example.proto.ExampleProtoServiceGrpc.ExampleProtoServiceImplBase;
import io.grpc.stub.StreamObserver;
import net.devh.boot.grpc.server.service.GrpcService;

@GrpcService
// {proto에 설정된 package}.{proto에 설정된 서비스}Grpc.{proto에 설정된 서비스}ImplBase를 extends
public class GrpcExampleService extends ExampleProtoServiceImplBase {

  // 자동완성 기능으로 Override해줍니다.
  @Override
  public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) {
    // ... 원하는 코드 작성
    // 아래는 예시 코드
    HelloResponse reply = HelloResponse.newBuilder()
        .setMessage("Hello " + request.getName())
        .build();
    responseObserver.onNext(reply);
    responseObserver.onCompleted();
  }
}

1-4. GRPC Server 설정

application.properties에 아래와 같이 grpc port 설정하기

grpc.server.port=9090


2. GRPC Client

2-1. 프로젝트 생성하기

GRPC Server 처럼 프로젝트를 생성합니다.

  • 테스트를 위해 Spring Web 을 추가합니다.

2-2. Dependency 추가하기

  • grpc-server-spring-boot-starter dependency를 추가합니다.
<dependency>
	<groupId>net.devh</groupId>
	<artifactId>grpc-client-spring-boot-starter</artifactId>
	<version>3.1.0.RELEASE</version>
</dependency>
  • grpc interface를 GRPC Server와 같이 추가합니다.

2-3. GRPC Service 구현하기

  • 원하는 위치에 Service파일을 만들어 아래와 같이 구현합니다.
import org.springframework.stereotype.Service;

import example.proto.Example.HelloRequest;
import example.proto.ExampleProtoServiceGrpc.ExampleProtoServiceBlockingStub;
import net.devh.boot.grpc.client.inject.GrpcClient;

@Service
public class GrpcExampleService {

  // @GrpcClient("{client 이름 - properties에서 설정할때 사용}")
  @GrpcClient("grpcExample")
  // {proto에 설정된 package}.{proto에 설정된 서비스}Grpc.{proto에 설정된 서비스}BlockingStub
  private ExampleProtoServiceBlockingStub exampleProtoServiceBlockingStub;

  public String runExample(String name) {
    HelloRequest request = HelloRequest.newBuilder().setName(name).build();
    return exampleProtoServiceBlockingStub.sayHello(request).getMessage();
  }
}

2-4. 테스트용 controller 구현하기

  • grpc 통신을 테스트할 RestController를 구현합니다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/")
public class GrpcTestController {

  // GrpcClient를 구현한 service inject
  private final GrpcExampleService grpcExampleService;

  public GrpcTestController(GrpcExampleService grpcExampleService) {
    this.grpcExampleService = grpcExampleService;
  }

  @GetMapping("{name}")
  public String getMethodName(@PathVariable String name) {
    return grpcExampleService.runExample(name);
  }

}

2-5. GRPC Client 설정

application.properties에 아래와 같이 설정해줍니다.

## web server port
server.port=8080

## 호출할 grpc server 주소
## grpc.client.{grpcClientName}.address=static://{host}:{port}
grpc.client.grpcExample.address=static://127.0.0.1:9090
grpc.client.grpcExample.negotiation-type=plaintext

3. 테스트

GRPC Server와 GRPC Client를 모두 실행하여 정상동작하는지 확인!!

profile
저녁시간처럼 기다려지는 이야기

0개의 댓글