• 티스토리 홈
  • 프로필사진
    아몬드맛빼빼로
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
아몬드맛빼빼로
  • 프로필사진
    아몬드맛빼빼로
    • 분류 전체보기 (46)
      • Java (8)
      • C (3)
      • Springboot (7)
      • Kotlin (2)
      • 회고 (5)
      • Backend (13)
      • 기타 (5)
      • DevOps (3)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [Backend] gRPC
    2025년 02월 28일
    • 아몬드맛빼빼로
    • 작성자
    • 2025.02.28.:02
    반응형

    g...RPC?

    gRPC란 Google에서 개발한 오픈소스이며 원격 프로시저 호출(Remote Procedure Calls)를 위한 통신규약,즉 프로토콜이다.더 쉽게 말하자면 A 서버에서 만들어 둔 함수를 B 서버에서 호출하여 사용할 수 있다.

    Remote Procedure Calls

    기존에도 소켓(Socket)이라는 훌륭한 통신방식이 존재하였지만 통신 과정을 직접 구현하며 개발자의 부담이 커지고 데이터의 포맷팅을 처리하는 것도 서비스가 고도화되고 대형화될 수록 어려워졌다.이때 RPC라는 기술이 등장하였는데 네트워크로 연결된 서버 상의 프로시저(함수 등)를 원격으로 호출할 수 있는 기술이었다.IDL(Interface Definition Language) 기반으로 다양한 언어로 구동되는 환경에서도 확장이 가능하였고 협업에도 용이하였다.RPC의 핵심 개념으로 스텁(Stub)이 있는데 서버와 클라이언트가 서로 다른 메모리 공간을 사용하므로 함수 호출에 사용된 매개변수를 변환해줘야 했다.만약 이러한 기능이 없다면 매개 변수에 대한 포인터가 다른 데이터를 가르키게 되는 대참사가 일어날 수 있다.

    Stub

    매개변수 객체를 메서지로 변환/역변환하는 단계를 의미하며 클라이언트에서와 서버에서의 스텁으로 나뉜다

    • 클라이언트 - 함수 호출에 사용된 매개변수의 변환 및 실행 후 서버에서 전달한 결과의 변환을 담당
    • 서버 - 클라이언트가 전달한 매개변수의 역변환 및  함수 실행 결과의 변환을 담당 

    그러나

    RPC는 획기적인 시도였고 로컬 환경에서 제공하는 빠른 속도, 가용성 등을 분산 환경에서도 제공한다고 홍보되었으나 구현의 어려움,지원 기능의 한계 등으로 대중화 되지 못하고 데이터 통신을 Web으로 활용해보려는 시도가 이어지며 RPC가 꿈꾸었던 자리를 REST가 차지하게 되었다.

    gRPC의 특징

    • HTTP/2를 기반으로 하는 RPC 프레임워크이다
    • 서버 간 내부 통신을 할 때 많이 사용된다
    • Protobuf 직렬화\역직렬화를 활용해 통신하기 때문에 빠르다

    gRPC는 HTTP/2를 사용하여 HTTP/1.1이 클라이언트에서 요청이 올 때만 서버에서 응답을 하는 구조로 매 요청마다 연결을 생성해야하며 쿠키(Cookie) 등 많은 메타데이터(Metadata)를 저장하는 Header가 요청마다 재전달되며 비효율적인 면모가 이었던 것에 반해 한 연결(Connection)로 동시에 여러 메서지를 주고 받으며 Header를 압축해 중복을 없애고 전달하여 HTTP/1.1 대비 효율적이다.또한 서버가 클라이언트의 요청 없이도 리소스를 전달할 수 있기에 클라이언트의 반복적인 요청역시 최소화 할 수 있다.

     

     

    Protobuf(Protocol Buffer)를 도입하여 데이터 직렬화와 역직렬화에 투자되는 시간을 줄였는데 같은 정보를 저장하여도 JSON의 경우 82 Byte가 소요된다면 Protobuf는 필드의 번호,유형 등을 1 Byte만으로 식별하고 주어진 길이 만큼만 읽도록 설계되어 33 Byte만 소요된다.프로그래밍 언어에 종속되지 않고 다양한 언어로 지원된다

    사용될 때는?

    MSA에서 각 서비스 간의 통신이 필요할 때 사용한다고 가정해보자

    인증/인가를 처리하는 서비스와 사용자 정보를 관리하는 서버가 있을 때 인증/인가 서버가 사용자 정보 서버에 사용자 조회 함수를 호출하여서 인증을 수행한다면 인증/인가 서버는 gRPC 클라이언트,사용자 정보 관리 서버는 gRPC 서버,이 두 서비스에서 공통적으로 사용할 수 있는 gRPC 인터페이스가 존재하게된다.

    구성

     

    1. gRPC 인터페이스를 먼저 작성한다.인터페이스에선 gRPC 서비스를 작성하는데 Java와 같은 언어에선 proto3 문법을 통하여 선언형으로 쉽게 작성하고 빌드 시 자동으로 라이브러리 형태로 생성된다.생성된 라이브러리를 별도의 저장소에 올리거나 프로젝트에 포함하여 배포/공유 한다.
    2. gRPC 서버 코드를 작성하는데 이때 사용하는 프레임워크와 별도의 gRPC 포트를 사용한다.코드는 선행적으로 작업된 gRPC 인터페이스 라이브러리를 이용하여 완성한다
    3. gRPC 클라이언트 코드를 작성한다.역시 gRPC 인터페이스 라이브러리를 이용하고 gRPC 서버와 상호작용하는 Host/Port만 기입하면 보통 끝이 난다.

    단점

    아직 gRPC는 브라우저 관련 API가 존재하지 않아 브라우저에서 gRPC 서비스를 호출하는 것은 불가하다.또 기존 데이터 통신 방식과 다르게 사람이 식별할 수 없는 Binary Stream으로 전달되기 때문에 JSON,XML과 같은 통신 매체에 비하여 읽기가 어렵다.

    저작자표시 비영리 (새창열림)

    'Backend' 카테고리의 다른 글

    [Backend] Feign  (0) 2025.03.26
    [Backend] Grafana Loki  (0) 2025.03.06
    [Backend] MySQL에서 한글 검색을...?  (0) 2025.02.06
    [Backend] Elasticsearch  (0) 2024.12.23
    [Backend] Redisson Pub/Sub 기반 분산 락  (0) 2024.11.30
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바