grpc

Huiji Kim·6일 전
0

grpc란?

gRPC는 'Google Remote Procedure Call'의 약자입니다. Google에서 개발한 플러그인 오픈소스 RPC(Remote Procedure Call) 프레임워크입니다.

그렇다면 RPC는 무엇일까요?

rpc는 이름에서 알 수 있듯 한 프로그램이 네트워크를 통해 다른 컴퓨터에 있는 프로그램의 함수나 프로시저를 호출할 수 있게 해주는 프로토콜입니다. 마치 로컬 시스템에서 함수를 호출하는 것처럼 원격 시스템의 함수를 호출할 수 있게 해줍니다.

# 서버 쪽 코드
def add_numbers(a, b):
    return a + b

# 클라이언트 쪽 코드
result = remote_server.call("add_numbers", 5, 3)  # 8이 반환됨

그러면 어떻게 클라이언트에서 add_numbers 함수를 사용할 수 있을까요?

rpc에는 stub이라는 개념이 있습니다. stub은 아래와 같은 일을 처리해줍니다.
1. 직렬화/역직렬화

  • 데이터를 네트워크로 전송 가능한 형태로 변환
  • 받은 데이터를 다시 프로그램에서 사용 가능한 형태로 변환
  1. 네트워크 통신 처리
  • 서버와의 연결 설정
  • 데이터 전송 및 수신
  • 연결 오류 처리
  1. 타입 안전성 보장
  • 컴파일 시점에 타입 체크
  • 잘못된 데이터 형식 사용 방지
  1. 에러 처리
  • 네트워크 오류
  • 타임아웃
  • 서버 에러
  1. 추상화 제공
  • 복잡한 RPC 로직을 숨김
  • 로컬 함수처럼 보이게 함

설명을 보면 잘 이해가 되지 않으지 stub이 없을 경우와 있을 경우 코드가 어떻게 달라지는지 claude에게 짜달라고 해보겠습니다.

stub이 없을 경우 client측 코드

# 클라이언트 측 코드
def manual_rpc_call(a, b):
    # 1. 네트워크 연결 설정
    socket = create_socket()
    socket.connect(("server.example.com", 8080))
    
    # 2. 데이터 직렬화
    data = {
        "method": "add",
        "params": [a, b],
        "id": generate_request_id()
    }
    serialized_data = json.dumps(data)
    
    # 3. 데이터 전송
    try:
        socket.send(serialized_data.encode())
        
        # 4. 응답 대기 및 수신
        response = socket.recv(1024)
        
        # 5. 응답 역직렬화
        result = json.loads(response.decode())
        
        return result["result"]
    except Exception as e:
        print(f"Error: {e}")
    finally:
        socket.close()

# 사용
result = manual_rpc_call(5, 3)

stub이 있을 경우 client측 코드

# 자동 생성된 Stub 코드
class CalculatorStub:
    def __init__(self):
        self.channel = create_secure_channel()
    
    def Add(self, a, b):
        # 모든 복잡한 과정이 Stub 내부에 캡슐화됨
        request = AddRequest(a=a, b=b)
        return self.channel.invoke("Add", request)

# 클라이언트 측 사용 코드
calculator = CalculatorStub()
result = calculator.Add(5, 3)  # 매우 간단!

한눈에 봐도 stub을 사용하면 코드가 더욱 간결해지고 개발자가 신경쓸 부분이 적어지는 것을 알 수 있습니다.

그럼 rpc가 무엇인지 알아보았으니, rpc와 grpc의 차이는 무엇일까요?


rpc는 간단하지만 기능이 제한적이기 때문에 사내 시스템 간 간단한 통신, 레거시 시스템 연동, 단순한 원격 프로시저 호출 등에 사용이 되고
grpc는 복잡하지만 고성능을 제공하기 때문에 Google Cloud Services, Netflix의 마이크로서비스, Kubernetes 내부 통신, 실시간 채팅 시스템
IoT 디바이스 통신 등에 사용됩니다.

profile
새로 학습하는 내용을 기록합니다. \n 예전 주소 : https://blog.naver.com/gmlwl0720

0개의 댓글