야르(Yar) RPC 프레임워크

야르(Yar) RPC 프레임워크

PHP 애플리케이션끼리 서로 통신해야 할 일이 생기면 어떻게 하시나요? 단순한 원격 함수 호출이 필요하다면 직접 프로토콜을 설계하는 대신 야르(Yar, Yet Another RPC framework)를 쓸 수 있어요. 야르는 가볍고 동시성(concurrency)을 지원하는 RPC 프레임워크로, PHP 애플리케이션 간 통신을 간단하고 쉽게 만들어 주는 게 목표예요. 여러 원격 서비스를 동시에 호출하는 것도 가능하죠.

출처: Yet Another RPC Framework

본문

야르는 유저랜드(userland) 라이브러리가 아니라 PHP 네이티브 확장이에요. HTTP, HTTPS 또는 TCP 상에서 동작하는 컴팩트한 바이너리 프로토콜을 사용하며, 기본 제공되는 세 가지 패키저(packager) — php, json, 그리고 --enable-msgpack으로 빌드했을 때의 msgpack — 를 갖추고 있어서 별도의 패키지나 프록시 프로세스가 필요 없어요.

이 프로토콜은 언어에 구애받지 않기 때문에 서비스를 어떤 언어로든 소비할 수 있어요. 자세한 내용은 The Yar Protocol 문서를 확인해 보세요.

야르가 제공하는 주요 구성 요소는 이렇게 나뉘어요.

  • 서버쪽: Yar_Server, 그리고 서버에서 발생하는 각종 예외 클래스들
  • 클라이언트쪽: Yar_Client, Yar_Concurrent_Client, 그리고 클라이언트 예외 클래스들

Yar_Server

RPC 서버를 만드는 클래스예요.

  • Yar_Server::__construct — RPC 서버를 생성해요
  • Yar_Server::handle — RPC 서버를 시작해요

Yar_Client

원격 서비스를 호출하는 클라이언트예요.

  • Yar_Client::__construct — 클라이언트를 생성해요
  • Yar_Client::call — 원격 서비스를 호출해요
  • Yar_Client::getOpt — 클라이언트 옵션을 읽어요
  • Yar_Client::setOpt — 클라이언트 옵션을 설정해요

Yar_Concurrent_Client

동시에 여러 호출을 처리하고 싶을 때 쓰는 클라이언트예요.

  • Yar_Concurrent_Client::call — 동시 호출을 등록해요
  • Yar_Concurrent_Client::loop — 등록된 모든 호출을 보내고 기다려요
  • Yar_Concurrent_Client::reset — 등록된 호출을 모두 비워요

예외 클래스

서버와 클라이언트 양쪽에 역할별 예외가 있어요.

  • 서버: Yar_Server_Exception, Yar_Server_Output_Exception, Yar_Server_Packager_Exception, Yar_Server_Protocol_Exception, Yar_Server_Request_Exception
  • 클라이언트: Yar_Client_Exception, Yar_Client_Packager_Exception, Yar_Client_Protocol_Exception, Yar_Client_Transport_Exception

서버/클라이언트 예외 클래스에는 발생한 예외의 타입을 되돌려주는 getType() 메서드가 정의되어 있어요.

더 알아보기

야르의 설치 방법, 런타임 설정, 미리 정의된 상수, 그리고 예제들은 Installing/Configuring, Predefined Constants, Examples 문서에서 이어서 확인해 보세요. 바이너리 프로토콜의 세부 명세가 궁금하다면 The Yar Protocol 문서를 함께 보시면 돼요.