Pushpin - 내 API에 Push 붙이기
(pushpin.org)- 클라이언트 연결을 유지해주는 프록시 서버로 어떤 언어/프레임워크와도 쉽게 연동 가능
- 리얼타임 API 엔드포인트를 쉽게 만들어 줌
- HTTP 스트리밍/롱폴링, 웹 소켓 지원
- 클라이언트는 전혀 모르게(transparent) 이용 가능
- KONG, 3SCALE 같은 API 관리도구로 실시간 엔드포인트 관리가능
- Rust & C++ 로 작성됨
두어달 사용해 보았습니다.
PHP 같이 리얼타임 처리가 곤란한 환경에서 큰 메리트를 느꼈습니다. 별도의 리얼타임 서버를 작성하지 않아도 된다는 점 하나만으로도 꽤 매력적이예요.
특히 일반적인 PHP 프로젝트에서 리얼타임 엔드포인트의 인증을 위해 복잡한(귀찮은) 데이터 교환 없이, 인가된 사용자에게만 Grip 헤더를 넘겨주면 되니 비즈니스 로직에 조금 더 집중할 수 있었구요.
PHP와 다르게 요청을 계속 붙들고 있어도 문제가 없는(?) 다른 언어들에서는 직접 리얼타임 엔드포인트를 열어 사용하는 것에 비해 큰 메리트를 느끼지 못했지만...
인증절차나 스케일링 관련된 측면에서 이론적으로는 꽤 이점이 많은 솔루션으로 생각됩니다.
... 다만 왜 “이론적으로는” 이라는 수식어가 붙었냐 하면, 솔루션 자체가 좀 불안정합니다. 특히 해당 솔루션에서 제일 중요한 부분이라 말해도 부족하지 않을 프록시 서버가 꽤 불안정합니다.
따로 버그를 찾아 나서지는 않았습니다만, 제 세팅에서는 POST 리퀘스트가 들어가면 그 이후의 요청들은 한동안 싹 다 죽어버리더군요.
GET 요청이 대해서만, 특히 Accept 헤더가 SSE일 때만 pushpin을 향하도록 프록시 서버를 한 번 더 두는 것으로 해결(???)했지만, 아직까진 시기상조인 것 같습니다. 토이 프로젝트 용도로만...
아무튼, 프로덕션용으로 사용하기엔 문제점이 많이 있지만, 아이디어는 꽤 괜찮다~ 정도로 정리할 수 있겠네요.
이름이 익숙하다 했는데 PushPin - Local-first 실시간 협업 도구 이것과 이름이 같네요.
하지만 전혀 다른 솔루션 입니다.
Thoughtworks Technology Radar, Volume 29 에서도 프레임워크 분야에서 Trial 해볼만한 기술로 선정된바 있습니다