아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
유능한귀뚜라미220
유능한귀뚜라미22020.07.29

웹훅으로 보내진 메세지를 수신하는 방법이 궁금합니다

주로 데스크탑 어플리케이션쪽을 하고 있어서 웹쪽을 몰라 질문을 올립니다.

개발하려는 프로그램이 있는데, 특정 웹사이트의 서비스에서 웹훅을 지원하고있는데, 제가 이해하는 웹훅은 이벤트발생시 원하는 문자열 포맷으로 메세지를 보낼 수 있게 되어 있는 것으로 이해하고있습니다.

궁금한것은 이 메세지를 어디로 보낼지, 어떻게 수신하는 것인지 잘 이해가 안됩니다.

설명 혹은 참고할만한 레퍼런스를 부탁드립니다

55글자 더 채워주세요.
답변의 개수
4개의 답변이 있어요!
  • 안녕하세요.

    데스크탑 어플리케이션을 쪽을 하신다고 하셔서, 주로 윈도우 개발자라고 가정하였습니다.

    https://docs.microsoft.com/ko-kr/aspnet/webhooks/

    에 보시면 C#으로 웹훅을 처리하는 것에 대한 레퍼런스가 있습니다.

    간단히 설명드리면, 웹훅이란 미리 정한 우리쪽 서버의 URI를 특정 이벤트가 발생하는 경우에, 상대방 서버가 HTTP POST를 통해서 우리 쪽으로 알려주는 방법입니다.

    즉 일반적인 웹에서의 구현은 상대방 서버에 웹훅 등록, 이벤트 발생시 상대방 서버가 HTTP POST를 우리 서버를 대상으로 호출, 우리 서버에서는 이를 수신하여 적절한 동작 수행. 이 절차 입니다.

    그런데 윈도우 앱에서는 별도의 서버를 돌리고 있지는 않으니, socket을 이용해서 HTTP POST가 오는 것을 감시하고 있다가, 해당 내용을 분석하여 원하는 처리를 하면 됩니다. 사실 웹서버라는 것이 특별한 것이 아니라 HTTP로 동작하는 웹서버의 경우 socket의 80포트를 들어오는 데이터를 분석하여 적절한 응답을 하는 것이 웹 서버입니다. 따라서 앱 상에서도 소켓을 생성하여 동일한 역할을 수행하면 됩니다.

    혹은 IIHS와 같이 윈도우에서 webserver를 돌리고, 데스크탑 앱에서 webserver와 연동하는 것도 하나의 방법이지만, 이 경우 IIHS와 연동하는 별도의 구현이 필요합니다. 어느 방법이든 익숙하고 편하신 방법을 쓰시는 것이 좋을 것 같으며, 저라면 데크탑 앱에서 직접 윈도우 소켓을 열고 이를 처리하는 방법을 사용할 것 같습니다. 사용자가 프로그램을 설치하고 쓰는 입장에서 별도의 web server를 설치하고 환경을 설정하는 것은 손이 더 가는 일이기도 하고, 나아가서 이를 처리하기 위해 개발자도 node.js든 별도의 backend처리가 필요하기 때문입니다.

    정리하면,

    웹훅 지원 서버는 우리 서버로 메시지를 보내게 됩니다. 그리고 이를 수신하기 위해서는 웹서버 또는 80포트를 처리하는 소켓프로그램이 필요합니다.

    감사합니다.


  • 어느 서비스의 웹훅인지 알려주셨으면 좀 더 설명이 좋았을텐데, 없어서 일반적인 웹훅에 대해 설명드리겠습니다.

    GitHub를 예를 들어 설명하자면, 어떠한 이유로 내 Repository에 이벤트가 발생했을 때 (Push 혹은 Pull request 등) 내 서버에서 수신 가능한 URL을 지정해두면 Github에서 내 서버로 해당 이벤트와 관련된 요청을 보내주는 겁니다. 이 요청에는 그 이벤트와 관련된 데이터들이 함께 오겠죠.

    이걸 활용해서 가능한 시나리오를 하나 짜보겠습니다.

    Github에서 오는 어떠한 이벤트든 내 슬랙 채널에 알림을 주고 싶다면, Github Webhook URL에 요청을 받고싶은 내 서버 주소 (예를 들면 https://api.example.com/v1/github/webhook)를 넣어두고, 요청이 왔을 때 Github로부터 넘어오는 데이터 중 일부를 내 슬랙 채널로 (예를 들면 #general) 메세지를 보내는 Slack API를 사용한다면 Github에 이벤트가 오면 언제든지 슬랙을 통해 알림을 받아볼 수 있겠죠.


  • Redis pub/sub 기능을 이용하면 다양한 어플리케이션에서도 hook 이벤트를 감지할수 있습니다. 레디스 pubsub은 nosql 의 데이터베이스 입니다.

    https://realmojo.tistory.com/170 레디스 pub/sub 에 대해서 한 번 알아보세요.


  • 알림은 보통 소켓이나 롱폴링 등의 방법을 사용해 서버에서 클라이언트로 보내는 방식인 데 반해,
    웹훅은 HTTP 클라이언트가 HTTP 서버로 보내는 알림입니다. (또는 HTTPS)

    • 알림을 받기 위해서 서버에 계속 연결할 필요가 없습니다.

    • 대신 알림을 받으려면 외부에서 접속 가능해야 합니다. (HTTP 서버여야 하니까요.)

    트레이딩뷰 웹훅 알림을 사용하는 예시가 있습니다. 웹 서버 Flask를 사용하는 것을 볼 수 있습니다.

    트레이딩뷰는 잘 모르겠는데... GitLab같은 경우에는 이벤트마다 포맷이 정해져 있는데요,
    원하는 포맷으로 보내는 기능은 없고, 주는대로 받고 가공해서 써야 합니다.

    서버가 아닌 일반 데스크톱 어플리케이션에서 웹훅 알림을 받기는 어려울 것 같고요,
    웹훅 알림을 받는 별도의 서버를 두고 그 서버에서 데이터를 가공해서 클라이언트에 제공하면 됩니다.