전 포스팅에서 개념에 대해 알아봤다.
이번에는 .proto 파일을 정의하고 코드를 생성하는 방법을 알아보자.
난이도가 낮으니 소개한 대로만 크게 어려움은 없을 듯싶다.
준비물
자바 1.8, 메이븐, 이클립스
이클립스에 메이븐 프로젝트 만들기
별거 없다. grpcDemo 키워드 입력해서 빠르게 만들자.
메이븐이니까 pom.xml을 잘 설정해야 된다. 딱히 어려운 건 없다.
아래 스크립트를 채운다.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<jersey.version>2.16</jersey.version>
</properties>
<build>
<defaultGoal>clean generate-sources compile install</defaultGoal>
<finalName>shop</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<inherited>true</inherited>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>com.github.os72</groupId>
<artifactId>protoc-jar-maven-plugin</artifactId>
<version>3.11.4</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<includeMavenTypes>direct</includeMavenTypes>
<inputDirectories>
<include>src/main/resources</include>
</inputDirectories>
<outputTargets>
<outputTarget>
<type>java</type>
<outputDirectory>src/main/java</outputDirectory>
</outputTarget>
<outputTarget>
<type>grpc-java</type>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.15.0</pluginArtifact>
<outputDirectory>src/main/java</outputDirectory>
</outputTarget>
</outputTargets>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.15.1</version>
</dependency>
</dependencies>
pom.xml 스크립트에 보면 40 줄 근처에 inputDirectories 엘레멘트에 src/main/resources 라고 디렉터리 경로가 지정되어 있다. 이곳에 있는 .proto 파일 즉, 정의된 파일(IDL)로 프로그래밍 소스코드가 생성이 된다.
코드는 outputTarget 엘레멘트에 지정된 src/main/java 디렉터리에 생성된다는 뜻이다.
그럼 곧바로 src/main/resources/ 이곳에 hello.proto 파일을 생성한다.
src/main/resources/hello.proto 생성.
hello.proto 파일의 내용. 이런 파일을 IDL 이라고 한다.
// The greeting service definition.
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.grpc";
option java_outer_classname = "HelloWorldProto";
package helloworld;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
아래 메뉴에서 Update Project...를 클릭하면 메이븐 스크립트가 실행되면서 hello.proto에 정의된 코드들이 생성된다.
자동으로 통신할 수 있는 코드들이 생성됐다.
이 소스들을 갖고 서비스와 클라이언트를 만들게 된다.
다음 포스팅에서 실제로 데이터가 오고 가는 기능을 구현해보도록 하자.
지난 1편 포스팅
1. GRPC 자바 첫번째 알아보기 - GRPC는 무엇인가?
다음 3편 포스팅
2022.12.05 - [슬기로운 자바 개발자 생활/스프링 및 자바웹 서비스] - GRPC 자바 세번째 서버와 클라이언트 만들기
글이 유용했거나 도움이 되셨다면 공감 클릭 부탁합니다.
'슬기로운 자바 개발자 생활 > 스프링 및 자바웹 서비스' 카테고리의 다른 글
Spring Profile 활용 Application.properties (0) | 2022.12.15 |
---|---|
GRPC 자바 세번째 서버와 클라이언트 만들기 (0) | 2022.12.05 |
GRPC 자바 첫번째 알아보기 (0) | 2022.12.05 |
인텔리j 스프링MVC 톰캣로그 한글깨짐 수정 (0) | 2022.11.23 |
콜백헬... CallBack Hell이란? (0) | 2022.11.18 |
댓글