Spring Boot - grpc server
* 이전글에서 2.application.properties 까지 동일하게 작업해야 합니다.
1. proto 파일 생성
└── src
├── main
│ ├── java
│ ├── proto
│ └── DataService.proto
│ ├── resources
├── test
해당 위치에 DataSercice.proto 생성
이전글과 달리 해당 예제는 서버와 클라이언트 모두 텍스트를 받는다는 기준하에 data 타입이 String입니다.
syntax = "proto3";
package example;
service DataService {
rpc SendData(DataRequest) returns (DataResponse);
}
message DataRequest {
string data = 1; // 요청 데이터
}
message DataResponse {
string message = 1; // 응답 메시지
}
*proto 설명은 이전글 참고
proto 작성 후에 intelliJ gradle 선택 > Tasks > other > generateProto 실행해야합니다.
2.GrpcSeverService
package com.example.gRPCServer;
import example.DataServiceGrpc;
import example.DataServiceOuterClass;
import io.grpc.stub.StreamObserver;
import lombok.extern.slf4j.Slf4j;
import net.devh.boot.grpc.server.service.GrpcService;
@Slf4j
@GrpcService
public class GrpcServerService extends DataServiceGrpc.DataServiceImplBase {
@Override
public void sendData(DataServiceOuterClass.DataRequest request, StreamObserver<DataServiceOuterClass.DataResponse> responseObserver) {
// 클라이언트로부터 받은 데이터
String receivedData = request.getData();
log.info("Received data: " + receivedData);
// 응답 메시지 생성
DataServiceOuterClass.DataResponse response = DataServiceOuterClass.DataResponse.newBuilder()
.setMessage("Data received NewServer successfully")
.build();
// 응답 전송
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}
import example.DataServiceGrpc;
import example.DataServiceOuterClass;
import io.grpc.stub.StreamObserver;
import lombok.extern.slf4j.Slf4j;
import net.devh.boot.grpc.server.service.GrpcService;
import example.DataServiceGrpc;
이 클래스는 gRPC 프로토콜에 정의된 서비스 메서드에 대한 호출을 제공합니다.
import example.DataServiceOuterClass;
Protobuf로 정의된 메시지 타입들을 포함하는 클래스입니다. gRPC 요청 및 응답에서 사용됩니다.
import io.grpc.stub.StreamObserver;
비동기 방식으로 스트림을 처리하는 데 사용됩니다.
import lombok.extern.slf4j.Slf4j;
@Slf4j는 로깅을 쉽게 하기 위한 Lombok 어노테이션입니다.
import net.devh.boot.grpc.server.service.GrpcService;
@GrpcService는 Spring Boot와 gRPC를 통합하는 데 사용되는 어노테이션입니다.
@Slf4j
@GrpcService
public class GrpcServerService extends DataServiceGrpc.DataServiceImplBase {
@GrpcService
이 클래스가 gRPC 서비스로 작동하도록 Spring에 등록합니다.
extends DataServiceGrpc.DataServiceImplBase
gRPC 서비스의 기본 구현을 확장하여, 클라이언트의 요청을 처리할 수 있는 메서드를 오버라이드합니다.
@Override
public void sendData(DataServiceOuterClass.DataRequest request, StreamObserver<DataServiceOuterClass.DataResponse> responseObserver) {
// 클라이언트로부터 받은 데이터
String receivedData = request.getData();
log.info("Received data: " + receivedData);
// 응답 메시지 생성
DataServiceOuterClass.DataResponse response = DataServiceOuterClass.DataResponse.newBuilder()
.setMessage("Data received NewServer successfully")
.build();
// 응답 전송
responseObserver.onNext(response);
responseObserver.onCompleted();
}
sendData라는 메서드는 클라이언트가 보낸 DataRequest를 받고,
StreamObserver<DataServiceOuterClass.DataResponse>를 통해 응답을 클라이언트에게 전송합니다.
DataResponse 객체를 생성하여 응다을 전송할때, newBuilder() 메서드를 사용하여 빌더 패턴으로 메시지를 설정합니다.
responseObserver.onNext(response)를 호출하여 클라이언트에게 응답을 전송합니다.
responseObserver.onCompleted()를 호출하여 해당 요청 처리가 완료되었음을 알립니다.
이는 클라이언트가 더 이상 응답을 기다리지 않도록 합니다.
'STUDY > SpringBoot' 카테고리의 다른 글
Spring Boot - grpc client 바이너리 데이터 전송 (1) | 2024.10.23 |
---|---|
Spring Boot - kafka producer 예제 (0) | 2024.10.11 |
[Springboot] 22-09-29 삭제·상세·수정 기능 수업 -3 (0) | 2022.09.29 |
[Springboot] 22-09-29 페이징 기능 수업 -2 (0) | 2022.09.29 |
[Springboot] 22-09-28 페이징 기능 수업 -1 (0) | 2022.09.28 |