반응형
개요 : gRPC에 대해서 좀 더 깊이 들어가고 싶었으나, 만약 타인에게 설명을 해 주는 상황이라면 기본 개념이 머리속에 잡혀 있어야 되는데 정리를 하면서도 너무 방대한 양이라 이해하기가 어려웠다. 그래서 간단하게 정리 해 보고 기본적인 개념을 잡아보는게 더 좋을 거 같아서 정리를 해보게 되었다.
gRPC
- Google Remote Procedure Call의 약자로, 확장 가능하고 빠른 API를 만드는 데 사용되는 오픈 소스 RPC 프레임워크이다.
더보기
Procedure(프로시저)
- 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램
- 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템이 저장한 것
- 테이블에서 데이터를 추출, 조작하고 결과를 다른 테이블에 다시 저장하거나 갱신하는 처리를 할 때 프로시저를 사용.
장점
- 하나의 요청으로 여러 SQL문을 실행 가능
- 네트워크 소요 시간을 줄여 성능개선이 가능
- 여러 어플리케이션과 공유 가능
- 기능변경 편리 -> 특정 기능을 변경할 때 프로시저만 변경하면 된다.
단점
- 문자나 숫자열 연산에 사용하면 java보다 느린 성능을 보일 수 있다.
- 프로시저가 앱의 어디에 사용되는지 확인이 어렵다. -> 유지보수가 어려움
프로시저 생성
CREATE OR REPLACE PROCEDURE 프로시져명
(파라미터1 IN | OUT | IN OUT,파라미터2 IN | OUT | IN OUT...);
IS[AS]
변수, 상수 등을 선언
BEGIN로직을 실행할 쿼리문
[EXCEPTION 예외처리]
END 프로시져 명;
- IN : 입력 (입력 매개변수)
- IOUT : 출력 (출력 매개변수)
- IN OUT : 입출력을 동시에 한다.
- 기본값은 in
- out 파라미터는 프로시저에서 로직 수행 후, 해당 매개변수에 값을 할당해서 프로시저 호출부분에서 이 값을 참조할 수 있다.
->에러코드, 에러메세지를 전달하는 목적으로 사용.
출처: https://scoring.tistory.com/entry/프로시저란 [LightSourceCoder:티스토리]
주요 특징
- 다양한 환경에서 실행 가능
- 고성능
- 프로토콜 버퍼를 사용하여 데이터를 효율적으로 교환
- 프로토콜 버퍼는 작고 빠른 이진 직렬화 형식으로, 사람이 해석하기 어렵지만 인/디코딩 속도가 빠르다.
gRPC를 사용하면 서비스 간에 정의된 인터페이스를 통해 메서드를 호출하고, 강력한 통신 프로토콜을 기반으로 한 서비스 간의 통합이 가능하다.
배경
- 마이크로서비스 기반으로 구축되는 시스템은 서비스 간 네트워크 통신 연결이 급증
- 마이크로서비스용 통신을 구축할 때에 주로 사용하는 RESTful 서비스는 프로세스 간 통신을 구축할 때 부피가 크고 비효율적이다.
설명
- Google에서 만든 오픈 소스 원격 프로시저 호출(RPC) 시스템.
- gRPC는 성능이 좋고, 전송 효율이 높은 서비스를 제공하는데 사용
- gRPC는 여러 언어로 구현되어 있으며, 일반적으로 HTTP/2 프로토콜을 기반으로 구현되어 있음.
사용 순서
- 프로토콜 버퍼를 IDL(Interface Definition Language)로 사용해 서비스 인터페이스 정의 (메서드 종류, 호출 파라미터, 메시지 형식 등)
- 서비스 정의를 사용해 서버 스켈레톤(Server Skeleton)이라는 서버 측 코드 생성
- 서비스 정의를 사용해 클라이언트 스텁(Client Stub)이라는 클라이언트 측 코드 생성
장점
- 프로세스 간 통신 효율성
- Json이나 XML과 같은 텍스트 형식을 사용하는 대신 프로토콜 버퍼 기반 바이너리 프로토콜 사용
- HTTP/2 위에 프로토콜 버퍼로 구현되어 프로세스 간 통신 속도가 빠르고 효율적이다.
- 간단 명확한 서비스 인터페이스와 스키마
- 서비스 인터페이스를 정의한 후 나중에 세부 사항을 작업함에 따라 안정적이다.
- 플리그랏
- 여러 프로그래밍 언어로 작동하도록 설계되어, 특정 언어에 구애 받지 않는다.
- 이중 스트리밍 지원
- 유용한 내장 기능 지원
- 인증, 암호화, 압축, 로드밸런싱 등 기본적으로 지원한다.
단점
- 외부 서비스 부적합
- 계약 기반(Contract-driven) & 강력한 타입 속성을 갖기 떄문에 외부에 노출 되는 서비스에 유연성이 낮음
- 서비스 정의의 급격한 변경에 따른 개발 프로세스 복잡성
- 변경 발생 시 일반적으로 클라이언트 서버 코드를 모두 생성 해야한다.
- 상대적으로 작은 생태계
- HTTP 프로토콜 대비 작은 생태계 및 브라우저 & 모바일 & RPC 지원은 초기 단계이다.
반응형
'Study' 카테고리의 다른 글
[gRPC] 시작에서 운영까지 - 실제로 구현해보자. (2) | 2023.12.10 |
---|---|
마샬링(Marshalling)? 직렬화(Serialization)? (0) | 2023.11.14 |
MVC에 대해서 더 자세히 알아보자 (1) | 2023.11.12 |
gRPC (0) | 2023.11.10 |
[디자인패턴] MVC 패턴 (0) | 2022.06.14 |