본문 바로가기
슬기로운 자바 개발자 생활/스프링 및 자바웹 서비스

GRPC 자바 두번째 코드생성

by 슬기로운 동네 형 2022. 12. 5.
반응형

 전 포스팅에서 개념에 대해 알아봤다.

 이번에는 .proto 파일을 정의하고 코드를 생성하는 방법을 알아보자.

 

 난이도가 낮으니 소개한 대로만 크게 어려움은 없을 듯싶다.

 

 준비물

 자바 1.8, 메이븐, 이클립스

 

 이클립스에 메이븐 프로젝트 만들기

프로젝트 생성


별거 없다. grpcDemo 키워드 입력해서 빠르게 만들자.

프로젝트 생성


메이븐이니까 pom.xml을 잘 설정해야 된다. 딱히 어려운 건 없다.

아래 스크립트를 채운다.

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 파일을 생성한다.

pom.xml 엘레멘트 설명


src/main/resources/hello.proto 생성.

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에 정의된 코드들이 생성된다.

maven 업데이트 실행


자동으로 통신할 수 있는 코드들이 생성됐다.

이 소스들을 갖고 서비스와 클라이언트를 만들게 된다.

다음 포스팅에서 실제로 데이터가 오고 가는 기능을 구현해보도록 하자.

IDL로 자동생성된 소스코드


지난 1편 포스팅

1. GRPC 자바 첫번째 알아보기 - GRPC는 무엇인가?

 

GRPC 자바 첫번째 알아보기

GRPC는 무엇이고 누가 만들었는가? GRPC는 기존 RPC개념을 구글이 도입, 자사의 마이크로서비스에 사용하던 범용 RPC 프레임워크입니다. 마이크로서비스(MSA)란? 용어가 나오니 분산 컴퓨팅 환경(DCE)

ecolumbus.tistory.com

 

다음 3편 포스팅

2022.12.05 - [슬기로운 자바 개발자 생활/스프링 및 자바웹 서비스] - GRPC 자바 세번째 서버와 클라이언트 만들기

 

GRPC 자바 세번째 서버와 클라이언트 만들기

저번 포스팅에서 생성된 코드를 갖고 서버와 클라이언트 프로그램을 만들어본다. 이번 포스팅에서 만든 예제를 첨부함. 이클립스에서 작성한 프로젝트. 자바 1.8, 메이븐, 이클립스 1. GreeterGrpc

ecolumbus.tistory.com

글이 유용했거나 도움이 되셨다면 공감 클릭 부탁합니다.

반응형

댓글