Webhook 사용 사례

최정환·2025년 3월 31일
0


🤝 SaaS 간 웹훅 활용과 사이드 프로젝트에서의 적용기

이전 글에서는 웹훅(Webhook)의 개념과 동작 방식에 대해 다뤄봤습니다.
이번 글에서는 실제로 SaaS 서비스들 간에 웹훅이 어떻게 활용되는지,
그리고 제가 직접 웹훅을 사용해봤던 사이드 프로젝트 경험을 함께 공유하려고 합니다.


🌐 SaaS 통합에서 웹훅이 필요한 이유

다양한 SaaS를 함께 사용하는 환경에서는,
서로 다른 시스템이 실시간으로 반응하거나 동기화되어야 하는 경우가 많습니다.

예를 들어:

  • Stripe에서 결제가 완료되면,
    → 우리 서버에 알림이 와야 주문 상태를 업데이트할 수 있습니다.

  • Notion에서 페이지가 새로 생성되면,
    → Google Sheets나 Slack에 자동으로 반영되면 편리하겠죠?

이처럼, 이벤트 발생 → 자동 알림 → 다른 시스템 반응
이런 흐름이 필요할 때 웹훅은 가장 단순하면서도 강력한 방법입니다.


🔁 웹훅 vs 일반 API 호출 정리

항목웹훅(Webhook)API 호출(Server to Server)
호출 주체상대방이 우리 서버 호출우리가 상대방 서버 호출
트리거 시점이벤트 발생 시 자동필요할 때 직접 요청
용도알림, 트리거데이터 조회/변경
방식미리 등록된 URL에 POST직접 REST API 호출

요약하자면:
웹훅은 "무슨 일이 생겼을 때 알려준다",
API는 "필요한 정보를 내가 가져온다"는 구조입니다.


🔗 실제 SaaS 연동 사례

발신 SaaS수신 시스템트리거 이벤트동작 결과
Stripe내 서버결제 완료주문 상태 갱신
GitHubSlackPR 생성알림 메시지 전송
NotionZapier페이지 생성Google Sheets에 입력
ShopifyERP 서버주문 생성재고 자동 동기화
VercelDiscord배포 완료디스코드 알림 전송

웹훅은 이처럼 다양한 SaaS에서 자동화를 위한 핵심 연결 고리로 쓰입니다.


📨 웹훅은 받기만 하는 게 아니다 (Slack 예시)

웹훅은 보통 “외부에서 우리 서버로 보내주는 구조”로만 생각하기 쉽지만,
Slack이나 Discord처럼 우리가 웹훅을 이용해 메시지를 보낼 수도 있습니다.

✅ Slack Incoming Webhook 설정

  1. Incoming Webhooks 설정 페이지 접속
  2. Slack 채널 선택 → Webhook URL 발급
  3. 이 URL로 HTTP POST 요청을 보내면, 해당 채널로 메시지가 도착합니다.

✅ 예제 (Node.js)

const axios = require('axios');

const webhookUrl = 'https://hooks.slack.com/services/XXX/YYY/ZZZ';

axios.post(webhookUrl, {
  text: '✅ 새로운 유저가 가입했습니다!',
});

🌱 내 사이드 프로젝트에서의 웹훅 활용 경험 – Planet

제가 개발한 사이드 프로젝트 Planet에서는
사용자가 식물을 등록하고 다이어리를 작성할 수 있으며,
부적절한 콘텐츠는 신고할 수 있도록 기능을 넣었습니다.

그런데 초기에는 신고가 들어와도 운영자인 제가 그걸 전혀 알 수 없었어요.
DB에만 저장될 뿐, 실시간으로 알림을 받을 수단이 없었습니다.

“지금 누가 무언가를 신고했는데, 내가 모르면 아무 소용 없잖아?”

그래서 Slack의 Incoming Webhook을 활용해
신고가 접수되면 실시간으로 Slack 채널에 알림을 전송하도록 구현했습니다.


⚙️ Slack Webhook 연동 코드 (Spring Boot)

@Service
public class SlackService {

    @Value("${slack.webhook.url}")
    private String webhookUrl;

    public void sendReport(String contentId, String reason) {
        String message = String.format(
            "🚨 신고 접수됨!\n- 콘텐츠 ID: %s\n- 사유: %s",
            contentId, reason
        );

        RestTemplate restTemplate = new RestTemplate();

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        Map<String, String> payload = Map.of("text", message);
        HttpEntity<Map<String, String>> entity = new HttpEntity<>(payload, headers);

        restTemplate.postForEntity(webhookUrl, entity, String.class);
    }
}

신고 API에서 이 서비스를 호출하기만 하면 끝:

@PostMapping("/report")
public ResponseEntity<?> report(@RequestBody ReportRequest req) {
    reportService.save(req);
    slackService.sendReport(req.getContentId(), req.getReason());
    return ResponseEntity.ok().build();
}

💬 느낀 점

  • Slack Webhook은 설정은 간단한데 운영 효율은 극대화되는 경험이었습니다.
  • Slack만 열어두면 즉시 신고 상황을 파악할 수 있어, 별도 관리자 페이지가 없어도 문제 없었습니다.
  • 사이드 프로젝트에 작은 자동화 하나 붙였을 뿐인데, 운영 체감은 꽤 컸습니다.
  • 웹훅은 생각보다 빠르게 구현 가능하고, 효과는 매우 명확했습니다.

✅ 마무리하며 – 웹훅은 작지만 강력한 연결 도구

이 글에서는 SaaS 간 통합에서 웹훅이 어떻게 활용되는지 정리하고,
제가 직접 겪은 실전 경험을 바탕으로 웹훅의 실용성을 나눠보았습니다.

웹훅은 "이벤트를 실시간으로 알려주는 연결 도구"입니다.
간단하게 시작할 수 있지만, 잘 활용하면 강력한 자동화 흐름을 만들 수 있습니다.

0개의 댓글