본문 바로가기
CS

CS) gRPC란?

by 박채니 2024. 11. 15.
SMALL

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.

gRPC란?

  • google에서 개발한 어느 환경에서 실행할 수 있는 최신 오픈 소스 고성능 RPC 프레임워크

gRPC를 알기 전 RPC가 뭔지 모른다면 아래 아티클을 읽어봅시다!

https://chanychu.tistory.com/536

 

gRPC 특징

  • HTTP/2 기반 전송
  • 인증, 추적, 로드 밸런싱 및 상태 확인
  • Protocal buffer 사용

 

Protocal buffer (proto) 란?

  • 구조화된 데이터를 직렬화하는 방식
    • 직렬화: 데이터를 파일로 저장하거나 네트워크 통신에 사용하기 위한 형식 (바이트 스트림 형태로 변환)
  • 정의 언어(.proto 파일에서 생성), proto 컴파일러가 데이터와 인터페이스하기 위해 생성하는 코드, 언어별 런타임 라이브러리, 파일에 기록되거나 네트워크 연결을 통해 전송되는 데이터의 직렬화 형식, 직렬화된 데이터의 조합
  • 다른 IDL (XML, JSON)에 비해 더 적은 용량으로 데이터 저장 가능하므로 압축률이 높고 처리 속도가 빠름
    • 다만, 바이너리 데이터로 표현하기 때문에 사람이 확인하기 어려움

 

작동방식 - 샘플 코드 (JAVA)

 

1. proto 파일에서 직렬화하려는 데이터 구조 정의
.proto 확장자를 가진 일반 텍스트 파일이고, 프로토콜 버퍼 데이터는 메시지로 구성된다.
여기서 각 메시지는 필드라고 하는 이름-값 쌍을 포함하는 정보의 작은 논리적 레코드이다.

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

위와 같이 메시지를 정의하고 프로토콜 버퍼 컴파일러 (protoc)를 사용하여 원하는 언어로 데이터 클래스를 생성한다.

- 각 필드에 대한 getter / setter 제공

- 원시 바이트에서 전체 구조 직렬화

- 분석하는 메서드 제공

 

2. protoc 컴파일러를 이용하여 코드 생성

.proto 파일을 기반으로 Java 코드를 생성한다.

이 때, 새 인스턴스를 만드는 데 사용할 수 있는 Builder 클래스가 생성된다.

 

3. 프로젝트 코드와 함께 PB 코드 컴파일

생성된 Java 클래스를 아래와 같이 프로젝트에서 사용한다.

Person john = Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .setEmail("jdoe@example.com")
    .build();
output = new FileOutputStream(args[0]);
john.writeTo(output);

 

Protocol Buffer 정의 구문

메시지 유형을 정의하는 아래와 같은 .proto 파일이 있다고 가정해보자.

// 1)
syntax = "proto3";

// 2)
message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 results_per_page = 3;
}

 

각 코드가 의미하는 바는 아래와 같다.

1) proto3 을 사용한다는 의미 (생략하는 경우 자동으로 proto2 사용), 반드시 첫 문단에 작성

2) SearchRequest 메시지는 총 세 개의 필드(이름/ 값)를 가지고, 각 필드는 이름과 유형을 가짐

 

필드 유형 지정

예제의 있는 query, page\_number, results\_per\_page 필드는 모두 scalar 유형이다.

각각 문자열과 정수 유형을 가지고 있다.

 

필드 번호 할당

필드는 각각 1, 2, 3의 필드 번호를 가지고 있는 것을 확인할 수 있다.

이를 "필드 번호" 라고 지칭하며, 각 필드에는 1~536,870,911 사이의 숫자를 지정해야한다.

 

가장 자주 설정되는 필드에는 1~15까지의 필드 번호를 사용해야 한다.

대체적으로 낮은 필드 번호 값은 와이어 포맷에서 공간을 덜 차지하기 때문이라고 한다.

⭐️ 필드 번호에 따른 인코딩 시 필요한 바이트에 대한 설명은 아래 문서를 참고하자

https://protobuf.dev/programming-guides/encoding/#structure

 

제한 사항

  • 해당 메시지 내에서 고유한 번호여야 한다.
  • 필드번호 19,000~19,999는 예약된 번호이므로 사용 불가 (Protocal Buffers 구현 시 사용)
  • 이전에 예약된 필드 번호나 확장에 할당된 필드 번호 사용 불가 (재사용도 불가)

 

참고 사이트

https://grpc.io/docs/what-is-grpc/introduction/

 

Introduction to gRPC

An introduction to gRPC and protocol buffers.

grpc.io

 

https://jaime-note.tistory.com/82

 

[gRPC] gRPC란?

gRPC(google Remote Procedure Call)란 구글에서 만든 원격 프로시저 호출 프레임워크 입니다. 꾸준히 업데이트 되고있는 오픈소스로 성능이 매우 좋고 어떠한 환경에서도 실행시킬 수 있다는 장점을 가

jaime-note.tistory.com

https://velog.io/@suhwani/gRPC%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C...with-Python#protocol-buffersproto-%ED%8A%B9%EC%A7%95

 

[면접관보다] gRPC에 대해서...with Python

기존 프로젝트 1차 작업을 끝내고, 본격적으로 메인 프로젝트에 해당 기능을 붙이려고 하는데, 내가 맡았던 포지션이 애매해져서 메인 프로젝트의 일부 기능을 맡는 식으로 업무가 배정되었다.

velog.io

https://velog.io/@dojun527/gRPC%EB%9E%80

 

gRPC란?

하이퍼레저 패브릭을 공부하면서 하이퍼레저 패브릭은 gRPC 통신을 하도록 설계되었다는 것을 알게 되었다.gRPC라는 단어를 처음 들어봐서 검색을 해보니 최근에 많이 사용하는 기술인 것 같아

velog.io

 

LIST

'CS' 카테고리의 다른 글

CS) RPC란?  (2) 2024.11.15