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