
이전 글에서는 웹훅(Webhook)의 개념과 동작 방식에 대해 다뤄봤습니다.
이번 글에서는 실제로 SaaS 서비스들 간에 웹훅이 어떻게 활용되는지,
그리고 제가 직접 웹훅을 사용해봤던 사이드 프로젝트 경험을 함께 공유하려고 합니다.
다양한 SaaS를 함께 사용하는 환경에서는,
서로 다른 시스템이 실시간으로 반응하거나 동기화되어야 하는 경우가 많습니다.
예를 들어:
Stripe에서 결제가 완료되면,
→ 우리 서버에 알림이 와야 주문 상태를 업데이트할 수 있습니다.
Notion에서 페이지가 새로 생성되면,
→ Google Sheets나 Slack에 자동으로 반영되면 편리하겠죠?
이처럼, 이벤트 발생 → 자동 알림 → 다른 시스템 반응
이런 흐름이 필요할 때 웹훅은 가장 단순하면서도 강력한 방법입니다.
| 항목 | 웹훅(Webhook) | API 호출(Server to Server) |
|---|---|---|
| 호출 주체 | 상대방이 우리 서버 호출 | 우리가 상대방 서버 호출 |
| 트리거 시점 | 이벤트 발생 시 자동 | 필요할 때 직접 요청 |
| 용도 | 알림, 트리거 | 데이터 조회/변경 |
| 방식 | 미리 등록된 URL에 POST | 직접 REST API 호출 |
요약하자면:
웹훅은 "무슨 일이 생겼을 때 알려준다",
API는 "필요한 정보를 내가 가져온다"는 구조입니다.
| 발신 SaaS | 수신 시스템 | 트리거 이벤트 | 동작 결과 |
|---|---|---|---|
| Stripe | 내 서버 | 결제 완료 | 주문 상태 갱신 |
| GitHub | Slack | PR 생성 | 알림 메시지 전송 |
| Notion | Zapier | 페이지 생성 | Google Sheets에 입력 |
| Shopify | ERP 서버 | 주문 생성 | 재고 자동 동기화 |
| Vercel | Discord | 배포 완료 | 디스코드 알림 전송 |
웹훅은 이처럼 다양한 SaaS에서 자동화를 위한 핵심 연결 고리로 쓰입니다.
웹훅은 보통 “외부에서 우리 서버로 보내주는 구조”로만 생각하기 쉽지만,
Slack이나 Discord처럼 우리가 웹훅을 이용해 메시지를 보낼 수도 있습니다.
const axios = require('axios');
const webhookUrl = 'https://hooks.slack.com/services/XXX/YYY/ZZZ';
axios.post(webhookUrl, {
text: '✅ 새로운 유저가 가입했습니다!',
});
제가 개발한 사이드 프로젝트 Planet에서는
사용자가 식물을 등록하고 다이어리를 작성할 수 있으며,
부적절한 콘텐츠는 신고할 수 있도록 기능을 넣었습니다.
그런데 초기에는 신고가 들어와도 운영자인 제가 그걸 전혀 알 수 없었어요.
DB에만 저장될 뿐, 실시간으로 알림을 받을 수단이 없었습니다.
“지금 누가 무언가를 신고했는데, 내가 모르면 아무 소용 없잖아?”
그래서 Slack의 Incoming Webhook을 활용해
신고가 접수되면 실시간으로 Slack 채널에 알림을 전송하도록 구현했습니다.
@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();
}
이 글에서는 SaaS 간 통합에서 웹훅이 어떻게 활용되는지 정리하고,
제가 직접 겪은 실전 경험을 바탕으로 웹훅의 실용성을 나눠보았습니다.
웹훅은 "이벤트를 실시간으로 알려주는 연결 도구"입니다.
간단하게 시작할 수 있지만, 잘 활용하면 강력한 자동화 흐름을 만들 수 있습니다.