반응형
gRPC 서비스를 만드는 중 gradle build 후에 상속받아야 할 ProductInfoGrpc가 생성이 안되는 경우가 있었습니다.
처음 만든 경우에는 생성이 되었고 2번째 만들 때는 Controller를 하나 만들어서 연결시키려고 했는데 거기서는 생성이 안되었습니다. 그래서 상속을 받을 수 있는 케이스가 발생했습니다.
상속이 가능했던 코드를 복사해서 변경할 부분만 변경한 후 2개의 프로젝트를 만들어서 테스트 해보려고 합니다.
// main/proto/ProductInfo.proto
syntax = "proto3";
package grpc_test_01;
service ProductInfo {
rpc addProduct(Product) returns (ProductID);
rpc getProduct(ProductID) returns (Product);
}
message Product {
string id = 1;
string name = 2;
string description = 3;
float price = 4;
}
message ProductID {
string value = 1;
}
// build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.4'
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '21'
}
apply plugin: 'java'
apply plugin: 'com.google.protobuf'
repositories {
mavenCentral()
}
// 의존성 추가 3번째 grpc부터
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'javax.annotation:javax.annotation-api:1.3.2'
implementation 'io.grpc:grpc-netty:1.56.1'
implementation 'io.grpc:grpc-protobuf:1.56.1'
implementation 'io.grpc:grpc-stub:1.56.1'
implementation 'com.google.protobuf:protobuf-javalite:3.22.2'
}
// insert
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.9.2'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.56.1'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
sourceSets {
main {
java {
srcDirs 'build/generated/source/proto/main/grpc'
srcDirs 'build/generated/source/proto/main/java'
}
}
}
jar {
manifest {
attributes "Main-Class": "grpc_test_01.ProductInfoServer"
}
from {
configurations.compileClasspath.collect{ it.isDirectory() ? it : zipTree(it)}
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
apply plugin: 'application'
startScripts.enabled = false
// insert end
test {
useJUnitPlatform()
}
기본 디펜던시 세팅은 Lombok, Spring Web, Mustache, Spring Security, OAuth2 Client, Spring Data JPA를 해주고 테스트 했습니다.
1차 시도 성공!
1차 시도 시에 테스트 코드에서 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 에러가 떴었는데 이건 DB 설정을 안해서 발생한 오류였습니다. 이건 지금 중요한게 아니므로 패스!
상속 받을 때 Grpc 파일은 proto 파일 명과 같았습니다.
2차 시도 성공!
proto 파일 명은 테스트로 BoardInfo로 만들었는데 생성된건 ProductInfoGrpc였습니다. 그래서 어떤 이름을 그걸로 했나 하고 찾아보니
proto 파일 생성 시 service 이름으로 생성이 되는거였습니다.
오늘도 하나 배우고 가네요.
반응형
'programming > Trouble Shooting' 카테고리의 다른 글
[MySql] mysql 접속이 안된다?? Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (0) | 2024.01.15 |
---|---|
Network closed for unknown reason (1) | 2023.12.28 |
[MongoDB] MongoServerError: bad auth : authentication failed (0) | 2023.06.28 |
게시글 등록 시 오류 발생 "/api/v1/posts"},"status":403, (0) | 2022.04.26 |
yaml 구문 오류 did not find expected '-' indicator while.. (0) | 2022.04.25 |