개념
RPC란 무엇이며, 어떤 마인드셋을 가져야 하나요?
그저 함수일 뿐입니다
RPC는 "Remote Procedure Call(원격 프로시저 호출)"의 약자입니다. 이는 한 컴퓨터(서버)의 함수를 다른 컴퓨터(클라이언트)에서 호출하는 방식입니다. 전통적인 HTTP/REST API에서는 URL을 호출하여 응답을 받습니다. 반면 RPC에서는 함수를 호출하여 응답을 받습니다.
ts// HTTP/RESTconst res = await fetch('/api/users/1');const user = await res.json();// RPCconst user = await api.users.getById({ id: 1 });
ts// HTTP/RESTconst res = await fetch('/api/users/1');const user = await res.json();// RPCconst user = await api.users.getById({ id: 1 });
tRPC(TypeScript Remote Procedure Call)는 RPC의 한 구현체로, TypeScript 모노레포를 위해 설계되었습니다. 자체적인 특징이 있지만, 그 핵심은 RPC입니다.
HTTP/REST 구현 세부사항에 대해 생각하지 마세요
tRPC 앱의 네트워크 트래픽을 검사하면 상당히 표준적인 HTTP 요청과 응답을 볼 수 있지만, 애플리케이션 코드를 작성할 때 구현 세부사항에 대해 생각할 필요가 없습니다. 함수를 호출하면 tRPC가 나머지를 처리합니다. HTTP 동사(Verbs)와 같은 세부사항은 REST API에서는 의미를 지니지만, RPC에서는 함수 이름의 일부로 사용되므로 무시해야 합니다. 예를 들어, GET /users/:id 대신 getUser(id)를 사용합니다.
용어
아래는 tRPC 생태계에서 자주 사용되는 용어들입니다. 문서 전반에서 이 용어들을 사용할 예정이므로 익숙해지는 것이 좋습니다. 이 개념들의 대부분은 문서에 별도의 페이지가 있습니다.
| 용어 | 설명 |
|---|---|
| 프로시저 ↗ | API 엔드포인트입니다. 쿼리, 뮤테이션, 구독중 하나일 수 있습니다. |
| 쿼리 | 데이터를 가져오는 프로시저입니다. |
| 뮤테이션 | 데이터를 생성하거나 수정하거나 삭제하는 프로시저입니다. |
| 구독 ↗ | 지속적인 연결을 만들고 변경 사항을 수신하는 프로시저입니다. |
| 라우터 ↗ | 하나의 네임스페이스 아래에 모인 프로시저 및 다른 라우터의 모음입니다. |
| 컨텍스트 ↗ | 모든 프로시저에서 접근할 수 있는 값입니다. 세션 상태나 데이터베이스 연결 등에 주로 사용합니다. |
| 미들웨어 ↗ | 프로시저 실행 전후에 코드를 실행할 수 있는 함수입니다. 컨텍스트를 수정할 수 있습니다. |
| 검증 ↗ | "이 입력 데이터에 필요한 값이 올바르게 들어 있나요?" |