자체 호스팅 웹훅 게이트웨이 'railhook' 소개 (Kafka 제거 및 성능 개선)
요약
railhook은 사용자가 직접 호스팅하는 웹훅 게이트웨이로, 배포 중 누락되는 웹훅을 수신하고 재시도 및 시그니처 검증 기능을 제공합니다. 3.0 버전에서 Kafka를 제거하여 성능과 안정성을 개선했으며, 초당 100개 이벤트 처리 등 높은 부하 테스트 결과를 보여주었습니다.
핵심 포인트
- 웹훅 누락 방지: 배포 중 웹훅을 수신하고 재시도하여 데이터 손실을 막습니다.
- 성능 최적화: Kafka를 제거하고 Postgres 기반으로 변경하여 안정성과 자원 사용량을 개선했습니다.
- 높은 처리량 입증: k6 테스트에서 초당 100개 이벤트 처리 및 정확한 'exactly once' 전달을 확인했습니다.
안녕하세요.
railhook은 사용자가 직접 호스팅하는 웹훅 게이트웨이입니다.
저는 이 시스템을 제 핀테크 프로젝트를 위해 구축했습니다. 저희는 배포가 잦은데, 매번 배포할 때마다 결제 제공업체로부터 오는 일부 웹훅을 놓치는 경우가 있었습니다. 그래서 railhook은 웹훅(github, shopify, slack, 결제 제공업체 등)을 수신하고, 시그니처를 확인하며, 이를 저장한 다음 재시도 기능을 통해 전달합니다. 배포 중에 서비스가 다운되어도 아무것도 손실되지 않습니다. 반대로 여러분의 앱이 사용자에게 웹훅을 보내야 하는 경우에도 작동합니다. 재시도 기능, 시그니처 처리, 요청/응답 기록 등 모든 시도의 로그를 남길 수 있습니다.
3.0 버전에서 저는 Kafka를 완전히 제거했습니다. 이제 워커는 단순히 postgres에서 행(row)을 가져옵니다. 스택은 postgres, redis, api, worker, ui로 구성되어 있으며, 약 3GB의 RAM만 사용합니다. 이 변경으로 인해 이상했던 버그 중 절반이 사라졌습니다.
k6 테스트를 제 노트북에서 진행해 보았습니다 (모든 것이 한 기계에 있습니다). 오류 없이 초당 100개의 이벤트 처리 속도와 p99 지연 시간 27ms를 기록했습니다. 50개 엔드포인트로 12.6초 만에 1만 건의 전송을 완료할 수 있었습니다. 부하 상태에서 엔드포인트를 2분 동안 중단시켰음에도 불구하고, 정확히 한 번씩(exactly once) 2701개의 이벤트가 전달되었고 중복은 없었습니다.
또한 CLI (railhook listen 3000 tunnels webhooks to your localhost), 사용자 전용 포털(사용자가 임베드할 수 있음), 재전송 기능, slack/discord 등으로의 알림 설정, grafana 대시보드 등 다양한 기능을 제공합니다.
등록 없이 데모를 체험해 보세요: https://railhook.io/demo
실행 방법:
git clone https://github.com/vadymkykalo/railhook && cd railhook<br>.env.dist 파일을 .env로 복사하고, .env 파일에서 비밀값과 암호를 변경합니다.<br>COMPOSE_PROFILES=embedded-db docker compose up -d<br><br>이 명령어는 postgres를 docker 내부에서 시작하며, 만약 자체 데이터베이스가 있다면 해당 DB를 가리키도록 설정할 수 있습니다. 또는 로컬에서 테스트하기 위해 임의로 값을 지정해도 됩니다.
MIT 라이선스입니다.
AI에 대해 말씀드리자면, 네, 저는 claude code를 사용합니다. 지난 8월부터 많이 사용해서 커밋 중 절반가량이 co-author(공동 작성자)로 기록될 정도입니다. 숨길 이유가 없습니다. 솔직히 처음 몇 주는 고통스러웠습니다. 작동하는 코드는 작성하지만 모든 메서드에 단락 분량의 주석을 달고, 아무것도 삭제하지 않습니다. 모든 것이
하지만 무엇을 구축하고 무엇을 버릴지는 여전히 저에게 달려 있습니다. 예를 들어, Kafka 제거는 제가 한 것이며, 시스템의 절반을 삭제하라고 절대 제안하지 않을 겁니다. ㅋㅋ
피드백 환영합니다. 특히 설치 과정에서 어딘가 문제가 발생한다면요.
사이트: https://railhook.io
github: https://github.com/vadymkykalo/railhook
제출자 /u/Resident_Guava5620
[링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/SelfHosted (AI filter)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기