[Spring Boot3] "새로운 멤버가 가입했습니다!" 디스코드 회원가입 알림 웹훅 만들기📩

송하연·2024년 4월 23일
0

스프링부트🌱

목록 보기
2/8

1. 웹훅이 뭐지?

웹훅(Webhook)은 웹 서비스 간에 실시간으로 데이터를 전송하고 수신하는 데 사용되는 방법 중 하나이다.

일반적으로 웹훅은 이벤트 기반의 통신 방식을 사용하여 정보를 주고 받는데,
이러한 방식을 활용하여 회원가입, 주문 완료, 메시지 전송 등의 이벤트가 발생할 때 웹훅을 사용하여 해당 이벤트를 외부 서비스로 전달할 수 있다.

웹훅의 활용 예시

  • 실시간 알림 기능:새로운 이메일이 도착하거나 새로운 주문이 발생할 때 사용자에게 즉시 알림을 보내는 데 사용
  • 외부 서비스와의 연동: 사용자가 특정 작업을 수행할 때 외부 서비스에 데이터를 전송하거나 외부 서비스로부터 데이터를 받아오는 데 사용

"N번째 새로운 멤버가 가입했습니다!"
오늘은 회원가입 이벤트가 발생하였을 때 디스코드로 회원가입 알림을 보내는 웹훅을 만들어보자

2. 웹훅 주소 만들기

회원가입 알림 웹훅을 만들기 위해 우선 디스코드로 접속하여 알림을 보낼 웹훅 주소를 만들어야한다.


디스코드 접속 > 웹훅을 만들고 싶은 서버를 선택 후 우클릭 > 읽음으로 표시하기 클릭 > 연동 클릭


연동 페이지에서 웹후크 보기 클릭


새 웹후크 클릭 > 웹후크 봇 이름(프로필 사진 등) 및 알림 띄울 채널 설정 > 웹후크 URL 복사

3. 스프링부트 프로젝트에 웹훅 적용하기

3.1 application.yml 설정

웹훅 주소가 코드로 노출되면 아무나 해당 주소로 알림을 보낼 수 있을 것이다.
따라서 이러한 상황을 방지 & 보안을 위해 웹훅 주소를 yml파일에 추가한다

discord:
  webhook:
    url: {복사한 웹훅 주소}

3.2 Service 코드 작성

이제 웹훅 주소에 알림을 보내는 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에서 회원 수 값을 꺼내온 계산 값을 메세지에 추가하였다.

메서드의 파라미터에 닉네임 혹은 회원 이름값을 추가하면 회원 이름을 받아오는 방식으로도 활용할 수 있을 것이다.

3.3 알림이 발생하길 원하는 이벤트에 웹훅 메서드 연결하기!

회원가입 이벤트가 발생했을 때 위 작성된 sendDiscordNotification(회원가입 알림 기능)가 동작 하도록 연결해보자

회원 가입 멤버를 판별 & 저장하는 이벤트가 발생하는 메서드 안에서 sendDiscordNotification(회원가입 알림 기능) 메서드를 호출해주었다.

❗이 때 웹훅 메서드를 작성한 클래스와 현재 클래스가 다르다면 해당 클래스 먼저 주입하는 것을 잊지말자❗


(예시)

private final WebhookService webhookService;
webhookService.sendDiscordNotification();

3.4 결과 확인하기

회원가입 알림 웹훅이 잘 동작하는지 확인해보자

회원가입 이벤트가 발생하면 디스코드 내 알림 설정해둔 채널로 회원가입 알림 메세지가 잘 전송되는 것을 확인할 수 있다.

4. 마무리

오늘은 회원가입 이벤트가 발생하였을 때 디스코드로 회원가입 알림을 보내는 웹훅을 만드는 방법에 대해 알아보았다.

추가적인 웹훅 활용 방안
: 회원가입과 같은 특정 이벤트가 발생하였을 때, 사용자의 이상 징후가 감지될 때 ,특정 데이터의 변화나 분석 결과에 따른 통계를 활용할 때, 깃허브 알림 등등에 사용할 수 있을 것이다.

0개의 댓글