노트

RPC

Remote Procedure Call

백엔드#network · 연결된 개념 6개

쉽게 말하면

RPC는 리모컨 버튼을 누르면 멀리 있는 TV가 움직이듯, 다른 기계에서 도는 함수를 내 코드의 평범한 함수처럼 부르게 하는 방식이에요. 주소 설계, 데이터 포장, 주고받기는 뒤에서 대신 처리하죠.

비유가 깨지는 곳 리모컨과 달리 신호가 늦거나, 실패하거나, 두 번 갈 수 있어요. 그래서 변경 작업은 멱등하게 짜고 인자는 믿을 수 없는 입력으로 다루며, 함수처럼 직렬화 못 하는 값은 넘길 수 없어요.

RPC(Remote Procedure Call)는 다른 기계에서 실행되는 함수를 내 코드의 평범한 함수처럼 호출하게 하는 통신 방식이다. 엔드포인트 설계, 직렬화, 요청·응답 처리를 감추고 updateName(formData) 같은 함수 호출 한 줄로 보이게 한다.

RPC 계층은 그 환상을 만드는 배선 전체다.

  1. 클라이언트에서 호출과 인자를 가로챈다
  2. 인자를 직렬화해 네트워크로 올바른 원격 함수에 보낸다
  3. 서버에서 역직렬화해 실제 함수를 실행한다
  4. 반환값이나 에러를 직렬화해 돌려보낸다
  5. 클라이언트에서 다시 풀어 반환한다
  • REST(Representational State Transfer)와 비교: REST는 자원(URL)과 HTTP(HyperText Transfer Protocol) 메서드 중심으로 설계하고, RPC는 동작(함수 이름) 중심으로 설계한다
  • 사례: gRPC(Protocol Buffers로 직렬화), JSON-RPC(JavaScript Object Notation RPC), React의 서버 함수('use server' 함수를 프레임워크가 RPC 엔드포인트로 바꿔 준다), Electron의 IPC(Inter-Process Communication) invoke
  • 로컬 호출이 아니다: 함수처럼 보여도 지연, 부분 실패, 타임아웃, 재시도가 있다. 같은 요청이 두 번 갈 수 있으니 변경 작업은 멱등하게 설계하고, 인자는 신뢰할 수 없는 입력으로 다룬다. 이런 차이를 숨기는 추상화는 결국 새어 나온다(누수 추상화의 법칙)
  • 직렬화할 수 없는 값(함수, 클래스 인스턴스)은 넘길 수 없다. React가 이를 어떻게 인코딩하는지는 RSC 페이로드(Flight)

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • React 서버 컴포넌트(RSC)

    React 서버 컴포넌트(React Server Components, RSC)는 서버에서만 실행되고, 컴포넌트 코드가 아니라 실행 결과(직렬화된 엘리먼트 트리)만 클라이언트로 보내는 컴포넌트다. Next.js App Router에서는 'use client'를 붙이지 않은 컴포넌트가 기본으로 서버 컴포넌트다.

  • 로컬 퍼스트 아키텍처

    클라이언트 기기의 로컬 데이터를 진실의 원천(Source of Truth)으로 삼고, 서버는 동기화와 백업을 맡는 설계 방식. 전통적인 "서버가 원천, 클라이언트는 요청해서 그린다" 구조를 뒤집어 로컬 DB → UI 렌더링 → 백그라운드 동기화 순서로 흐른다.

  • 업스트림과 다운스트림

    흐름의 방향을 강물에 빗댄 말이다. 다만 무엇의 흐름을 기준으로 하느냐에 따라 방향이 반대로 쓰인다. 서비스 간 호출을 말할 때는 요청이 흘러가는 쪽을 기준으로 다운스트림 = 내가 호출하는 쪽, 업스트림 = 나를 호출하는 쪽이라 부르는 경우가 많다. 아래 설명은 이 용법을 따른다.

  • GraphQL

    GraphQL은 클라이언트가 필요한 데이터의 모양을 쿼리로 적어 보내면 서버가 정확히 그 모양으로 응답하는 API 쿼리 언어(query language)다. Facebook이 2012년 내부에서 만들어 2015년 공개했고, 지금은 GraphQL Foundation이 관리한다.

  • 선언형과 명령형 프로그래밍

    명령형(Imperative)·절차적(Procedural) 프로그래밍은 결과에 도달하는 방법(how)을 단계별로 지시하고, 선언형 프로그래밍(Declarative Programming)은 원하는 결과(what)만 기술하고 과정은 도구에 맡긴다. 길 안내로 치면 "직진하다 두 번째 신호에서 우회전"이 명령형, "강남역 가 주세요"가 선언형이다.

보기 옵션