REST와 RPC 모두 API를 설계하는 방법이다. API는 웹 설계 및 기타 분산 시스템에서 필수적인 요소로서, API를 사용하면 개별 분산 애플리케이션(또는 서비스) A가 상대 애플리케이션(또는 서비스) B의 내부 작동 방식을 몰라도 통신할 수 있다. API는 백엔드에서 프론트엔드와 통신하기 위한 일반적인 메커니즘이기도 하다. 긴밀하게 결합되는 대신 API를 사용하여 웹을 설계하면 코드를 다시 작성하지 않고도 규모를 조정하고 변경할 수 있다.
1. REST(REpresentational State Transfer)
➡️ 원격 서버에서 특정 데이터 작업 수행
- 무상태성(stateless)
- 클라이언트의 컨텍 스트를 서버쪽에 유지하지 않는다.
- 각 API 서버는 돌아오는 요청만 메시지로 처리한다. - 캐쉬 가능(cacheable)
- HTTP 프로토콜 표준의Last-Modified
태그나E-tag
를 사용하여 구현
- 네트워크 응답 시간과 성능, 서버의 자원 사용률 향상 - Client-Server 구조
- 서버는 API를 제공하고 그를 이용해 비즈니스 로직 처리 및 저장을 책임진다.
- 클라이언트는 사용자 인증이나 컨텍스트(세션/로그인) 등을 직접 관리하고 책임진다. - 계층형 시스템
- 클라이언트와 서버 사이에 중개자 존재 가능
- 클라이언트와 서버 모두 이를 알지 못하고 직접 연결된 것처럼 작동 - 균일한 인터페이스
- 클라이언트와 서버는 표준화된 명령 및 메시징 형식 세트를 통해 REST API와 통신한다.
- 리소스는 해당하는 URL로 식별되고 이를 REST API 엔드포인트라고 한다.
2. RPC(Remote Procedure Call)
➡️ 외부의 원격 함수를 로컬에 있는 것처럼 사용
- 원격 간접 호출
- 클라이언트는 원격 서버의 함수에 대해 RPC를 직접적으로 호출하는데 마치 클라이언트 로컬로 호출된 것 처럼 작동 - 파라미터 전달
- 클라이언트는 로컬 함수와 같은 방식으로 서버 함수에 파라미터 전송 - 스텁(stub)
- 함수 스텁은 클라이언트와 서버에 모두 존재하는 보조 객체
- 클라이언트-직접 호출, 서버-실제함수 간접 호출
3. REST와 RPC 작동 방식
1) 제품 목록에 새 제품 추가REST
POST /products HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}
RPC
POST /addProduct HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}
REST는 URL에 POST 사용
RPC는 함수에 POST 사용
2) 제품 세부 정보 검색REST
GET /products/123 HTTP/1.1
HOST: api.example.com
RPC
POST /getProduct HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"productID": "123"}
REST는 URL에 GET 사용, URL로 파라미터 전달
RPC는 함수에 POST 사용, JSON 객체로 파라미터 전달
3) 제품 가격 업데이트REST
PUT /products/123 HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"price": "20.00"}
RPC
POST /updateProductPrice HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"productId": "123", "newPrice": "20.00"}
REST는 URL에 PUT 사용, URL및 JSON 객체로 파라미터 전달
RPC는 함수에 POST 사용, JSON 객체로 파라미터 전달
4) 제품 삭제REST
DELETE /products/123 HTTP/1.1
HOST: api.example.com
RPC
POST /deleteProduct HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"productId": "123"}
REST는 URL에 DELETE사용, URL로 파라미터 전달
RPC는 함수에 POST 사용, JSON 객체로 파라미터 전달
4. REST와 RPC 사용 시기
REST API는 서버의 데이터 객체에 대한 CRUD 작업을 수행하는데 사용된다. 따라서 서버의 데이터와 데이터 구조를 균일하게 노출해야 하는 경우에 사용한다.
- 데이터 베이스 제품 추가
- 음악 재생 목록 콘텐츠 검색
- 사용자 주소 업데이트
- 블로그 게시물 삭제
RPC는 서버에서 작업결과가 필요한 원격 함수를 호출하는데 사용된다. 복잡한 계산이 필요하거나 프로세스를 클라이언트에 숨긴 상태로 서버의 원격 프로시저를 트리거 하려는 경우 사용할 수 있다.
- 원격 디바이스 카메라로 사진 찍기
- 서버의 기계 학습 알고리즘을 사용하여 사기행위 식별
- 원격 뱅킹 시스템에서 A계좌에서 B계좌로 자금 이체
- 원격으로 서버 재시작
'기타' 카테고리의 다른 글
npm과 pnpm의 차이점 (feat. 왜 똑같은 package.json 파일인데 pnpm으로 설치하면 오류가 나는가?) (0) | 2024.07.03 |
---|---|
ngrok 백그라운드 실행하기(터미널 종료해도 세션 유지) - linux (0) | 2023.07.03 |
REST와 RPC 모두 API를 설계하는 방법이다. API는 웹 설계 및 기타 분산 시스템에서 필수적인 요소로서, API를 사용하면 개별 분산 애플리케이션(또는 서비스) A가 상대 애플리케이션(또는 서비스) B의 내부 작동 방식을 몰라도 통신할 수 있다. API는 백엔드에서 프론트엔드와 통신하기 위한 일반적인 메커니즘이기도 하다. 긴밀하게 결합되는 대신 API를 사용하여 웹을 설계하면 코드를 다시 작성하지 않고도 규모를 조정하고 변경할 수 있다.
1. REST(REpresentational State Transfer)
➡️ 원격 서버에서 특정 데이터 작업 수행
- 무상태성(stateless)
- 클라이언트의 컨텍 스트를 서버쪽에 유지하지 않는다.
- 각 API 서버는 돌아오는 요청만 메시지로 처리한다. - 캐쉬 가능(cacheable)
- HTTP 프로토콜 표준의Last-Modified
태그나E-tag
를 사용하여 구현
- 네트워크 응답 시간과 성능, 서버의 자원 사용률 향상 - Client-Server 구조
- 서버는 API를 제공하고 그를 이용해 비즈니스 로직 처리 및 저장을 책임진다.
- 클라이언트는 사용자 인증이나 컨텍스트(세션/로그인) 등을 직접 관리하고 책임진다. - 계층형 시스템
- 클라이언트와 서버 사이에 중개자 존재 가능
- 클라이언트와 서버 모두 이를 알지 못하고 직접 연결된 것처럼 작동 - 균일한 인터페이스
- 클라이언트와 서버는 표준화된 명령 및 메시징 형식 세트를 통해 REST API와 통신한다.
- 리소스는 해당하는 URL로 식별되고 이를 REST API 엔드포인트라고 한다.
2. RPC(Remote Procedure Call)
➡️ 외부의 원격 함수를 로컬에 있는 것처럼 사용
- 원격 간접 호출
- 클라이언트는 원격 서버의 함수에 대해 RPC를 직접적으로 호출하는데 마치 클라이언트 로컬로 호출된 것 처럼 작동 - 파라미터 전달
- 클라이언트는 로컬 함수와 같은 방식으로 서버 함수에 파라미터 전송 - 스텁(stub)
- 함수 스텁은 클라이언트와 서버에 모두 존재하는 보조 객체
- 클라이언트-직접 호출, 서버-실제함수 간접 호출
3. REST와 RPC 작동 방식
1) 제품 목록에 새 제품 추가REST
POST /products HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}
RPC
POST /addProduct HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"name": "T-Shirt", "price": "22.00", "category": "Clothes"}
REST는 URL에 POST 사용
RPC는 함수에 POST 사용
2) 제품 세부 정보 검색REST
GET /products/123 HTTP/1.1
HOST: api.example.com
RPC
POST /getProduct HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"productID": "123"}
REST는 URL에 GET 사용, URL로 파라미터 전달
RPC는 함수에 POST 사용, JSON 객체로 파라미터 전달
3) 제품 가격 업데이트REST
PUT /products/123 HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"price": "20.00"}
RPC
POST /updateProductPrice HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"productId": "123", "newPrice": "20.00"}
REST는 URL에 PUT 사용, URL및 JSON 객체로 파라미터 전달
RPC는 함수에 POST 사용, JSON 객체로 파라미터 전달
4) 제품 삭제REST
DELETE /products/123 HTTP/1.1
HOST: api.example.com
RPC
POST /deleteProduct HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"productId": "123"}
REST는 URL에 DELETE사용, URL로 파라미터 전달
RPC는 함수에 POST 사용, JSON 객체로 파라미터 전달
4. REST와 RPC 사용 시기
REST API는 서버의 데이터 객체에 대한 CRUD 작업을 수행하는데 사용된다. 따라서 서버의 데이터와 데이터 구조를 균일하게 노출해야 하는 경우에 사용한다.
- 데이터 베이스 제품 추가
- 음악 재생 목록 콘텐츠 검색
- 사용자 주소 업데이트
- 블로그 게시물 삭제
RPC는 서버에서 작업결과가 필요한 원격 함수를 호출하는데 사용된다. 복잡한 계산이 필요하거나 프로세스를 클라이언트에 숨긴 상태로 서버의 원격 프로시저를 트리거 하려는 경우 사용할 수 있다.
- 원격 디바이스 카메라로 사진 찍기
- 서버의 기계 학습 알고리즘을 사용하여 사기행위 식별
- 원격 뱅킹 시스템에서 A계좌에서 B계좌로 자금 이체
- 원격으로 서버 재시작
'기타' 카테고리의 다른 글
npm과 pnpm의 차이점 (feat. 왜 똑같은 package.json 파일인데 pnpm으로 설치하면 오류가 나는가?) (0) | 2024.07.03 |
---|---|
ngrok 백그라운드 실행하기(터미널 종료해도 세션 유지) - linux (0) | 2023.07.03 |