RPC와 REST
RPC & REST
RPC(Remote Procedure Call)와 REST는 API 설계의 2가지 아키텍쳐 스타일이다. API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어의 구성요소가 서로 통신할 수 있게하는 메커니즘이다.
- RPC API를 사용하면 개발자가 외부 서버의 함수를 로컬 소프트웨어의 함수처럼 직접적으로 호출할 수 있다.
- REST API를 사용하면 원격 서버에서 특정 데이터 작업을 수행할 수 있다.
아키텍쳐 원칙. RPC와 REST
RPC에서 클라이언트는 서버에서 원격 함수(프로시저)를 직접적으로 호출한다. 일반적으로 직접 호출하며 하나 이상의 데이터가 서버에 전달된다.
반면 REST 클라이언트는 서버에 특정 서버 리소스에 대한 작업(CRUD)을 수행할 것을 요청한다.
RPC는 기능이나 작업에 초점을 맞추고 REST는 리소스 또는 객체에 초점을 맞춘다.
RPC 원칙
REST처럼 표준화된 원칙은 아니다.
- 원격 간접 호출 클라이언트는 원격 서버의 함수에 대해 RPC를 직접적으로 호출하는 데, 마치 클라이언트에 로컬로 호출된 것처럼 호출한다.
- 파라미터 전달 클라이언트는 일반적으로 로컬 함수와 같은 방식으로 서버 함수에 파라미터를 전달한다.
- 스텁 함수 스텁은 클라이언트와 서버 모두에 존재한다. 클라이언트는 함수를 직접적으로 호출한다. 서버에서는 함수를 간접적으로 호출한다.
REST 원칙
REST원칙은 표준화 되어있다. 이 원칙을 따라야만 RESTfull
하다.
- 클라이언트 - 서버
REST의 클라이언트-서버 아키텍쳐는 클라이언트와 서버를 분리하여 각각을 독립적인 시스템으로 취급한다. - 무상태
서버는 클라이언트 요청 사이에 클라이언트의 상태를 기록하지 않는다. - 캐싱 가능
클라이언트 또는 중개 시스템에서는 클라이언트의 응답 캐시 선택 여부에 따라서 서버 응답을 캐시할 수 있다.서버의 응답을 임시로 저장(캐싱)하여 동일한 요청 시 캐싱된 응답을 response한다. 성능향상. 네트워크 부하 감소
- 계층형 시스템
클라이언트와 서버 사이에중개자가 존재할 수 있어도 서버와 클라이언트는 직접적으로 연결된 것처럼 작동한다. - 균일한 인터페이스
클라이언트와 서버는 표준화된 명령 및 메시징 형식세트를 통해 REST API와 통신한다. 리소스는 URL로 식별하며, 이 URL을 REST API EndPoint라 한다.
작동방식
RPC에서 클라이언트는 HTTP POST를 사용하여 특정 함수를 이름으로 직접 호출한다. -> 클라이언트 개발자가 함수의 이름과 파라미터를 미리 알아야 한다.
REST에서 클라이언트와 서버는 HTTP의 GET, POST, PUT, DELETE 등을 사용하여 옵션을 수행한다. 서버 리소스 URL만 알면 개별 함수는 몰라도 된다.
제품 세부정보 검색 시
1
2
3
4
5
RPC로 통신
HOST: api.example.com
POST /getProduct HTTP/1.1
Content-Type: application/json
{"productID": "123”}
1
2
3
REST로 통신
HOST: api.example.com
GET /products/123 HTTP/1.1
RPC는 POST로 메서드를 호출하며 json 객체로 파라미터를 전달한다.
REST는 URL로 GET을 사용하며 GET이므로 URL로 직접 파라미터를 전달한다.
RPC와 REST 사용시기
RPC가 적합한 작업
- 원격 디바이스의 카메라로 사진 찍기
- 서버의 기계 학습 알고리즘을 통해 사기 행위 식별
- 원격 뱅킹 시스템에서 한 계좌에서 다른 계좌로 이체
- 원격으로 서버 재시작
REST가 적합한 작업 (CRUD)
- 데이터베이스에 데이터 추가
- 음악 재생목록의 컨텐츠 검색
- 사용자 정보 업데이트
- 블로그 게시물 삭제
REST가 RPC를 대체한 이유
지금은 REST API가 일반적이지만 RPC가 사라진 것은 아니다. REST API는 개발자가 이해하고 구현하기 쉽기에 일반적으로 사용되지만, 사용사례에 더 적합하다면 RPC가 사용된다.
이제는 gRPC와 같은 RPC의 현대적 구현이 더 많이 사용되고 있다. gRPC를 사용하면 요청 및 응답 데이터 교환 패턴 대신 클라이언트-서버 통신을 스트리밍할 수 있다. 해당 내용은 따로 정리하여 게시물로 만들 예정이다.
✌️차이점 요약 RPC, REST
RPC | REST | |
---|---|---|
무엇인가 | 원격 클라이언트가 서버의 프로시저를 로컬인 것처럼 직접 호출 | 클라이언트와 서버의 데이터 교환을 정의하는 일련의 규칙 |
용도 | 원격 서버에서 작업 수행 | 원격 객체에 대한 CRUD 작업 수행 |
적합한 사용사례 | 복잡한 계산이 필요하거나 서버에서 원격 프로세스를 트리거하는 경우 | 서버 데이터 및 데이터 구조를 노출해야하는 경우 |
상태유지여부 | 상태유지 또는 무상태 | 무상태 |
데이터 전달 형식 | 서버에서 정의하고 클라이언트에 적용되는 일관된 구조 | 서버에 의해 독립적으로 결정되는 구조. 동일한 API내에서 여러 형태가 가능 |
출처 : https://aws.amazon.com/ko/compare/the-difference-between-rpc-and-rest/