반응형
2022.01.20 - [architecture/micro service] - [gRPC] what is gRPC?
이전 글에서 gRPC에 대한 개념을 간략히 살펴보았다. 이번 글에서는 간단히 구현해본다.
목표: java11 / gradle 7.3.3 multi project / springboot 2.6.2 / grpc server & client 개발
위 블로그는 서버 프로젝트 / 클라이언트 프로젝트 / interface용 jar 를 만드는 프로젝트를 각각 구성하였다면, 여기서는 그래들 멀티 프로젝트로 구성한다.
깃허브 주소: https://github.com/haileyjhbang/grpc-test.git
프로젝트 구조는 아래와 같다.
각 소스 내용물은 위 깃허브에서 확인가능하며 특이사항은 아래와 같다.
- 공통 사항은 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
proto java guide: https://developers.google.com/protocol-buffers/docs/javatutorial
gradle multiproject setting: https://clack2933.tistory.com/15
728x90
반응형
'개발 > spring' 카테고리의 다른 글
[actuator] git info를 health에 포함하기 (0) | 2022.01.28 |
---|---|
[jpa] OSIV란; spring.jpa.open-in-view (0) | 2022.01.27 |
[jpa] 영속성 컨텍스트 in spring (0) | 2022.01.27 |
[jpa] one-indexed pageable (0) | 2022.01.27 |
[swagger] in springboot2.6.2 and springdoc (0) | 2022.01.26 |