[CS] Protocol과 API

·2023년 1월 27일
0

🤙 프로토콜?


통신 프로토콜 또는 통신 규약은 무얼 뜻할까. 우선 기본적으로 프로토콜(protocol)은 약속, 규약, 협약 등을 의미하는 단어다. 그렇다면 통신 프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메세지를 주고 받는 양식과 규칙의 체계를 말하게 된다.

📲 API는?


API는 이러한 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 매커니즘을 뜻하게 되는 것이다. 아래의 그림을 보면 점원의 역할이 곧 API가 하는 역할이다. 중간다리로 중계 역할의 느낌이다.

API의 종류를 보면서 어떤 방식이 적합할 지 몇개를 찾아보면서 생각해 보도록 하자.

⚙︎ API 방식


SOAP API

  • 단순 객체 접근 프로토콜을 사용한다. 클라이언트와 서버는 XML을 사용하여 메세지를 교환한다.
  • 이 자체가 프로토콜이기에 보안이나 메세지 전송 등에 있어서 더 많은 표준 규격을 준수해야 해서 복잡하다.
  • SOAP 표준에는 성공/반복 실행 로직이 규정되어 있기 때문에, SOAP API를 통해서 통신을 할 때 처음부터 끝까지 신뢰성을 제공한다.
  • 유연성이 떨어진다는 단점이 있다.
  • 캐시 사용 불가능.
  • 웹 서비스 시나리오 보다 기업용 어플리케이션 등의 작업에 적합하다.

RPC API

  • 원격 프로시저 호출이라고 한다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송한다.

    프로시저란?
    명령 단위가 수행하는 절차 를 목적으로 하는 것을 말한다.

  • 고유 프로세스 개발 집중 가능하다.(하부 네트워크 프로토콜에 신경쓰지 않아도 됨). MSA 기반 개발할 때 괜찮다.

    다양한 언어와 프레임워크로 개발할 때는 프로토콜을 맞춰서 통신해야하는데 RPC를 사용하면 이런 구애를 받지 않고 원격에 있는 프로시저를 호출하여 조금 더 비즈니스 로직에 집중할 수 있다고 한다.
    원격 프로시저 호출(영어: remote procedure call, 리모트 프로시저 콜, RPC)은 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다.

  • 프로세스간 통신 기능을 비교적 쉽게 구현하고 정교한 제어가 가능하다.
  • 호출 실행과 반환 시간이 보장되지 않는다.(네트워크 연결이 끊겼을 때 문제 발생)
  • 보안이 보장되지 않는다.

Websocket API

  • JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발의 일종.
  • 클라이언트 앱과 서버간의 양방향 통신을 지원한다.
  • 서버가 연결된 클라이언트에 콜백 메세지를 전송할 수 있다는 장점이 있다.
  • 채팅, 게임, 실시간 주식차트와 같은 실시간이 요구되는 응용프로그램 개발에 사용가능하다.
  • WebSocket 프로토콜은 접속 확립에 HTTP를 사용하지만, 그 후 통신은 WebSocket 독자의 프로토콜로 이루어진다.
  • 프로그램 구현에 보다 많은 복잡성을 초래한다.
  • 상태를 저장한다.
  • 서버와 클라이언트 간의 Socket 연결을 유지하는 것 자체가 비용이 든다.

REST API

  • 오늘날 가장 많이 사용되고 유연한 API의 일종이다. 클라이언트가 서버에 요청을 데이터로 전송한다. 이를 이용하여 서버가 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환한다.
  • 아키텍쳐 스타일이다.
  • 페이로드 처리에 대해 미리 알릴 필요가 없다.
  • REST API의 주된 특징으로는 무상태 가 있다.

    무상태란?
    서버가 요청 간에 클라이언트 데이터를 저장하지 않음

  • 다양한 데이터 포맷을 지원한다.
  • 데이터를 위해서 리소스에 접근하는 데이터 위주의 방식이다.
  • URI를 이용해 리소스에 접근하며 고유해야한다.
  • HTTP 프로토콜 기반이다.
  • 처리 결과를 Status Code로 사용한다.
  • 캐시 사용 가능.


참고 자료 및 공식문서
https://yozm.wishket.com/magazine/detail/119/
https://mindock.github.io/network/rest-rpc/
https://velog.io/@jakeseo_me/RPC%EB%9E%80
https://velog.io/@jakeseo_me/RPC%EB%9E%80

profile
뉴비는 문서화를 습관화 해보자

0개의 댓글