웹훅(Webhook)
은 웹 서비스 간에 실시간으로 데이터를 전송하고 수신하는 데 사용되는 방법 중 하나이다.
일반적으로 웹훅
은 이벤트 기반의 통신 방식을 사용하여 정보를 주고 받는데,
이러한 방식을 활용하여 회원가입
, 주문 완료
, 메시지 전송
등의 이벤트가 발생할 때 웹훅을 사용하여 해당 이벤트를 외부 서비스로 전달할 수 있다.
"N번째 새로운 멤버가 가입했습니다!"
오늘은 회원가입 이벤트가 발생하였을 때 디스코드로 회원가입 알림을 보내는 웹훅을 만들어보자
회원가입 알림 웹훅을 만들기 위해 우선 디스코드로 접속하여 알림을 보낼 웹훅 주소
를 만들어야한다.
디스코드 접속 > 웹훅을 만들고 싶은 서버를 선택 후 우클릭 > 읽음으로 표시하기
클릭 > 연동
클릭
연동 페이지에서 웹후크 보기 클릭
새 웹후크
클릭 > 웹후크 봇 이름(프로필 사진 등) 및 알림 띄울 채널 설정 > 웹후크 URL
복사
웹훅 주소가 코드로 노출되면 아무나 해당 주소로 알림을 보낼 수 있을 것이다.
따라서 이러한 상황을 방지 & 보안을 위해 웹훅 주소를 yml파일에 추가한다
discord:
webhook:
url: {복사한 웹훅 주소}
이제 웹훅 주소에 알림을 보내는 Service코드를 작성해보자
클래스를 하나 만들고 그 안에 해당 코드를 작성해주었다.
@RequiredArgsConstructor
@Service
@Transactional
public class WebhookService {
// 디스코드 웹훅 URL 주입
@Value("${discord.webhook.url}")
private String discordWebhookUrl;
// 알림을 보내는 메서드
public String sendDiscordNotification() {
// REST 요청을 처리하기 위한 RestTemplate 객체 생성
RestTemplate restTemplate = new RestTemplate();
// 회원 수를 기존 DB에서 조회하여 총 회원 수 계산
Long totalMembers = memberRepository.count();
// 알림 메시지 생성
String message = totalMembers + "번째 유저가 회원가입했습니다!\n";
// HTTP 요청을 위한 헤더 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// HTTP 요청 바디에 전송할 메시지 설정
Map<String, String> body = new HashMap<>();
body.put("content", message);
// HTTP 요청 엔터티 생성
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(body, headers);
// 디스코드 웹훅 URL로 POST 요청을 보내어 알림을 전송
restTemplate.postForEntity(discordWebhookUrl, requestEntity, String.class);
return null;
}
}
알림 메세지에 누적 회원 수
를 표시하기 위해 db에서 회원 수 값을 꺼내온 계산 값을 메세지에 추가하였다.
메서드의 파라미터에 닉네임 혹은 회원 이름값을 추가하면 회원 이름을 받아오는 방식으로도 활용할 수 있을 것이다.
회원가입 이벤트가 발생했을 때 위 작성된 sendDiscordNotification(회원가입 알림 기능)가 동작 하도록 연결해보자
회원 가입 멤버를 판별 & 저장하는 이벤트가 발생하는 메서드 안에서 sendDiscordNotification(회원가입 알림 기능)
메서드를 호출해주었다.
❗이 때 웹훅 메서드를 작성한 클래스와 현재 클래스가 다르다면 해당 클래스 먼저 주입하는 것을 잊지말자❗
(예시)private final WebhookService webhookService; webhookService.sendDiscordNotification();
회원가입 알림 웹훅이 잘 동작하는지 확인해보자
회원가입 이벤트가 발생하면 디스코드 내 알림 설정해둔 채널로 회원가입 알림 메세지
가 잘 전송되는 것을 확인할 수 있다.
++ 추가로 아래처럼 내가 원하는 정보도 덧붙일 수 있다는 점!
오늘은 회원가입 이벤트가 발생하였을 때 디스코드로 회원가입 알림을 보내는 웹훅을 만드는 방법에 대해 알아보았다.
추가적인 웹훅 활용 방안
:회원가입과 같은 특정 이벤트가 발생하였을 때
,사용자의 이상 징후가 감지될 때
,특정 데이터의 변화나 분석 결과에 따른 통계를 활용할 때
,깃허브 알림
등등에 사용할 수 있을 것이다.