저번 포스팅에서 생성된 코드를 갖고 서버와 클라이언트 프로그램을 만들어본다.
이번 포스팅에서 만든 예제를 첨부함. 이클립스에서 작성한 프로젝트.
자바 1.8, 메이븐, 이클립스
1. GreeterGrpc 를 사용해서 서버를 만들 수 있는 서비스를 만든다.
이전 포스팅에서 소스코드가 만들어졌다면 GreeterGrpc.java 를 확인할 수 있다.
GreeeterGrpc 클래스를 상속/확장해서 HelloServiceImpl.java를 만든다.
클라이언트가 이름(name) 정보를 보내면, 서버는 name 유저의 주소를 반환하는 시나리오다. 실제 DB는 없다. ^^
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서버를 스타트시킨다.
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 메서드를 실행시킨다.
실행이 잘되고 있는지 확인을 해보자.
cmd를 열어서 telnet localhost 8080를 입력하고 엔터를 쳐보자.
두 번째 이미지와 같다면 서비스가 정상 실행되고 있는 상태다.
이제 클라이언트 프로그램을 만들고 통신을 해보자.
1. 이클립스 상단의 Window 메뉴에서 New Window를 실행. 새로운 이클립스 창에서 클라이언트 프로그램을 작성한다.
2. 두번째 이클립스 창에서 com.grpc.client 패키지 하단에 HelloGrpcClinet.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. 두번째 이클립스에서 클라이언트 프로그램을 실행해보자.
서버와 클라이언트 콘솔 창의 내용이 바뀌기는 했지만,
클라이언트 프로그램을 GreeterGrpc.GreeterBlockingStub를 이용해 서버에 요청을 보냈고 <mingki>
서버는 mingki 유저의 Adress를 디비에서 꺼내 응답했다.
hello.proto IDL 파일을 이용해서 서버와 클라이언트 프로그램을 만들어봤다.
1. GRPC 자바 첫번째 알아보기 - GRPC는 무엇인가?
2. GRPC 자바 두 번째 - proto 파일을 이용한 코드 생성
지금까지의 예제는 grpc.io 사이트의 Basics tutorial 를 참고해서 작성했다.
사이트에 접속해서 예제를 유심히 보면 옵저버/구독자 패턴, 리액티브 비슷한 소스들도 보인다.
깃헙에 가면 여러 예제들이 있으니 참고하면 좋을듯하다.
https://github.com/grpc/grpc-java/tree/master/examples
글이 유용했거나 도움이 되셨다면 공감 클릭 부탁합니다.
'슬기로운 자바 개발자 생활 > 스프링 및 자바웹 서비스' 카테고리의 다른 글
스프링부트 구글로그인 API 구현 OAuth 2.0 - 1. 구글 설정 하기 (2) | 2022.12.17 |
---|---|
Spring Profile 활용 Application.properties (0) | 2022.12.15 |
GRPC 자바 두번째 코드생성 (0) | 2022.12.05 |
GRPC 자바 첫번째 알아보기 (0) | 2022.12.05 |
인텔리j 스프링MVC 톰캣로그 한글깨짐 수정 (0) | 2022.11.23 |
댓글