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

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

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

저번 포스팅에서 생성된 코드를 갖고 서버와 클라이언트 프로그램을 만들어본다.

이번 포스팅에서 만든 예제를 첨부함. 이클립스에서 작성한 프로젝트. 

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

grpc.zip
0.05MB

 

1. GreeterGrpc 를 사용해서 서버를 만들 수 있는 서비스를 만든다.

이전 포스팅에서 소스코드가 만들어졌다면 GreeterGrpc.java 를 확인할 수 있다.

GreeeterGrpc 클래스를 상속/확장해서 HelloServiceImpl.java를 만든다.

 

클라이언트가 이름(name) 정보를 보내면, 서버는 name 유저의 주소를 반환하는 시나리오다. 실제 DB는 없다. ^^

HelloServiceImpl.java

package com.grpc.server;
import com.grpc.GreeterGrpc;
import com.grpc.HelloReply;
import com.grpc.HelloRequest;

import io.grpc.stub.StreamObserver;

public class HelloServiceImpl extends GreeterGrpc.GreeterImplBase{
	@Override
	public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
		/**
		 * 예) DataBase 테이블에서 값을 조회한다.
		 **/
		String getAddress = "서울 강남구 역삼동 110 번지";
		
		String sendName = request.getName();
		
		System.out.println("=====================================================");
		System.out.println("요청이 옴.");
		System.out.println("=====================================================");
		System.out.println("request : "+request);
		System.out.println("요청 유저명 : " + sendName);
		
		
		HelloReply helloReply = HelloReply.newBuilder()
				.setMessage("User's Address Value : "+getAddress)
				.build();
		
		responseObserver.onNext(helloReply);
		responseObserver.onCompleted();
		
		System.out.println("=====================================================");
		System.out.println("GRPC 호출이 종료 됨.");
		System.out.println("=====================================================");
	}
}

2. HelloServiceImpl 파일을 만들었다면, HelloGrpcServer를 만들어서 Grpc서버를 스타트시킨다.

HelloGrpcServer.java

package com.grpc.server;
import java.io.IOException;

import io.grpc.Server;
import io.grpc.ServerBuilder;

public class HelloGrpcServer {
	public static void main(String[] args) throws InterruptedException, IOException{
		Server grpcServer = ServerBuilder
				.forPort(8080)
				.addService(new HelloServiceImpl()).build();
		
		grpcServer.start();
		grpcServer.awaitTermination();
				
	}
}

3. 작성한 HelloGrpcServer의 main 메서드를 실행시킨다.

HelloGrpcServer의 main 메서드 실행

실행이 잘되고 있는지 확인을 해보자.

cmd를 열어서 telnet localhost 8080를 입력하고 엔터를 쳐보자.

두 번째 이미지와 같다면 서비스가 정상 실행되고 있는 상태다.

 

이제 클라이언트 프로그램을 만들고 통신을 해보자.

 

1. 이클립스 상단의 Window 메뉴에서 New Window를 실행. 새로운 이클립스 창에서 클라이언트 프로그램을 작성한다.

Window-> New Window

2. 두번째 이클립스 창에서 com.grpc.client 패키지 하단에 HelloGrpcClinet.java 프로그램을 작성한다.

HelloGrpcClient.java

package com.grpc.client;

import com.grpc.GreeterGrpc;
import com.grpc.HelloReply;
import com.grpc.HelloRequest;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

public class HelloGrpcClient {

	public static void main(String[] args) {
		
		ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080)
				.usePlaintext()
				.build();
		
		GreeterGrpc.GreeterBlockingStub blockingStub = GreeterGrpc.newBlockingStub(channel);
		
		HelloReply helloReply = blockingStub.sayHello(HelloRequest.newBuilder()
				.setName("Mingki")
				.build());
		
		System.out.println("*****************************************************");
		System.out.println("요청 결과가 옴.");
		System.out.println("response : " + helloReply);
		System.out.println("");
		System.out.println("response : " + helloReply.getMessage());
		System.out.println("*****************************************************");
		
		channel.isShutdown();
	}
}

3. 두번째 이클립스에서 클라이언트 프로그램을 실행해보자.

HelloGrpcClient의 main메서드 실행

 서버와 클라이언트 콘솔 창의 내용이 바뀌기는 했지만,

 클라이언트 프로그램을 GreeterGrpc.GreeterBlockingStub를 이용해 서버에 요청을 보냈고 <mingki>

 서버는 mingki 유저의 Adress를 디비에서 꺼내 응답했다.

 

hello.proto IDL 파일을 이용해서 서버와 클라이언트 프로그램을 만들어봤다.

서버와 클라이언트 결과

 

 

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

 

GRPC 자바 첫번째 알아보기

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

ecolumbus.tistory.com

 

2. GRPC 자바 두 번째 - proto 파일을 이용한 코드 생성

 

GRPC 자바 두번째 코드생성

전 포스팅에서 개념에 대해 알아봤다. 이번에는 .proto 파일을 정의하고 코드를 생성하는 방법을 알아보자. 난이도가 낮으니 소개한 대로만 크게 어려움은 없을 듯싶다. 준비물 자바 1.8, 메이븐,

ecolumbus.tistory.com

 

 지금까지의 예제는 grpc.io 사이트의 Basics tutorial 를 참고해서 작성했다.

 사이트에 접속해서 예제를 유심히 보면 옵저버/구독자 패턴, 리액티브 비슷한 소스들도 보인다.

grpc.io 기본예제

 

Basics tutorial

A basic tutorial introduction to gRPC in Java.

grpc.io

깃헙에 가면 여러 예제들이 있으니 참고하면 좋을듯하다.

 

https://github.com/grpc/grpc-java/tree/master/examples

 

GitHub - grpc/grpc-java: The Java gRPC implementation. HTTP/2 based RPC

The Java gRPC implementation. HTTP/2 based RPC. Contribute to grpc/grpc-java development by creating an account on GitHub.

github.com

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

반응형

댓글