241016 내일배움캠프 백엔드 Java 6기 TIL : Slack Alarm 연동

박대현·2024년 10월 17일
0
package com.sparta.springtrello.slack;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

@Service
public class SlackNotificationService {

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

    private final RestTemplate restTemplate = new RestTemplate();

    public void sendSlackMessage(String message) {
        // Header 생성
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // 메세지 생성
        Map<String, String> body = new HashMap<>();
        body.put("text", message);

        // Map
        HttpEntity<Map<String, String>> request = new HttpEntity<>(body, headers);

        // Slack webhook URL으로 POST 요청 보내기
        restTemplate.exchange(slackWebhookUrl, HttpMethod.POST, request, String.class);
    }
}
  • Slack Api에서 제공하는 webhook기능을 사용했다. 발급받은 URL을 properties에 입력
  • 헤더와 메세지를 생성하고, POST요청을 보내는 방식이다.
@PostMapping("/workspaces/{id}/members")
public ResponseEntity<ApiResponseDto<?>> saveMember(@AuthenticationPrincipal AuthUser authUser,
                                                    @PathVariable Long id,
                                                    @RequestBody MemberSaveRequestDto requestDto){
    memberService.saveMember(authUser,id,requestDto);
    // Slack으로 알림 전송
    String slackMessage = String.format("Workspace ID: %d, User ID: %d - 새로운 맴버가 등록되었습니다", id, authUser.getId());
    slackNotificationService.sendSlackMessage(slackMessage);
    return ResponseEntity.ok(ApiResponseDto.success(null));
}
  • 알림설정하고싶은 API가 수행되고 알림기능이 실행될수 있도록 만든 예시(Controller계층에서 설정)

0개의 댓글