반응형

2022.01.20 - [architecture/micro service] - [gRPC] what is gRPC?

 

[gRPC] what is gRPC?

gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. RPC(Remote Procedure Call)? 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서..

bangpurin.tistory.com

이전 글에서 gRPC에 대한 개념을 간략히 살펴보았다. 이번 글에서는 간단히 구현해본다.

목표: java11 / gradle 7.3.3 multi project / springboot 2.6.2 / grpc server & client 개발

 

참고 블로그: https://velog.io/@chb1828/Spring-boot%EB%A1%9C-Grpc%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90

 

Spring boot로 Grpc를 사용해보자

오늘은 Grpc에 대해서 글을 써보려고한다. Grpc를 간단하게 설명하면 서로 다른 위치에 존재하는 공간에서 동일한 객체를 가져다 와서 사용하는 것이다.

velog.io

 

위 블로그는 서버 프로젝트 / 클라이언트 프로젝트 / interface용 jar 를 만드는 프로젝트를 각각 구성하였다면, 여기서는 그래들 멀티 프로젝트로 구성한다. 

깃허브 주소: https://github.com/haileyjhbang/grpc-test.git

 

GitHub - haileyjhbang/grpc-test

Contribute to haileyjhbang/grpc-test development by creating an account on GitHub.

github.com

프로젝트 구조는 아래와 같다.

각 소스 내용물은 위 깃허브에서 확인가능하며 특이사항은 아래와 같다.

  • 공통 사항은 common 폴더 안에 있고, server / client 프로젝트 빌드 전 common을 먼저 빌드해 common-plain.jar를 생산해야함.
  • 각 프로젝트 build.gradle 에 보면 해당 jar을 import하게 되어있음.
        - common 의 내용물은 spring/java 에 관련된 내용은 없고 단순히 proto만 빌드함
        - server / client 프로젝트에서 common 의 컴파일된 java 파일을 사용해야하기 때문에 common을 멀티 프로젝트로 구성하는 것은 불가능하다고 판단(멀티 프로젝트로 import 시 src/main 아래의 폴더를 바라보나 common에는 src/proto만 있음)
  • client stub은 blocking stub 사용, unary 방식으로 통신으로 구현
  • client의 컨트롤러에서 request param으로 name을 넘기면 서버로 전달되어 추가 작업 후 화면에 표시
  • server 프로젝트와 client 프로젝트는 별도의 각각 jar을 생산하며 서로 다른 포트로 뜨게 되어 있음
  • [GET] http://localhost:9091/test?name=jhbang 로 확인

 

여기서는 구현하면서 만났던 문제와 해결방법에 대해 기술한다.

1. 멀티 프로젝트 구성 시

Execution failed for task ':common:bootJar'.
> Error while evaluating property 'mainClass' of task ':common:bootJar'
   > Failed to calculate the value of task ':common:bootJar' property 'mainClass'.
      > Main class name has not been configured and it could not be resolved

common/build.gradle 스크립트에 아래 추가

//common 프로젝트는 proto 번환만 한다.
//실행할 메인 클래스가 없을때는 아래와 같이 한다.

bootJar.enabled = false

 

완성하고 실행하면 아래와 같이 나온다.


참고

proto3 rule: https://developers.google.com/protocol-buffers/docs/proto3

 

Language Guide (proto3)  |  Protocol Buffers  |  Google Developers

Language Guide (proto3) This guide describes how to use the protocol buffer language to structure your protocol buffer data, including .proto file syntax and how to generate data access classes from your .proto files. It covers the proto3 version of the pr

developers.google.com

 

proto java guide: https://developers.google.com/protocol-buffers/docs/javatutorial

 

Protocol Buffer Basics: Java  |  Protocol Buffers  |  Google Developers

Protocol Buffer Basics: Java This tutorial provides a basic Java programmer's introduction to working with protocol buffers. By walking through creating a simple example application, it shows you how to Define message formats in a .proto file. Use the prot

developers.google.com

 

gradle multiproject setting: https://clack2933.tistory.com/15

 

Gradle Multi Module 프로젝트

머리말 하나의 단일 모듈로는 관리에 어려움을 겪게 되었고 이문제를 해결하기 위해서 모듈을 분류하는 multi module을 공부하게 되었습니다. 프로젝트 생성 Spring Boot 2.4.xx Gradle 6.8 Intellij Java11 초

clack2933.tistory.com

 

728x90
반응형

+ Recent posts