본문 바로가기
스프링부트

스프링 부트에서 Slack으로 실시간 모니터링하기 (2)

by 플라퉁 2023. 11. 29.
728x90
반응형

 

 

 

안녕하세요 

 

첫번째 글입니다.

https://rhgustmfrh.tistory.com/154

 

스프링 부트에서 Slack으로 실시간 모니터링하기 (1)

안녕하세요 오늘은 스프링부트에서 Slack으로 실시간 모니터링을 할 수 있도록 구현해보겠습니다. slack은 개발자 협업 툴로써 아직 많이 사용해 보진 않았습니다만... 일단 많은 기능들 중 강력한

rhgustmfrh.tistory.com

 

오늘은 스프링 부트에서 Slack으로 실시간 모니터링하기 두번째 글을 작성해보겠습니다.

 

 

먼저 util 폴더에 restTemplate를 사용한 SlackNotifier 입니다.

메시지를 보내기 위한 방법으로 restTemplate을 사용한것으로 webClient를 사용하셔도 됩니다.

 

@Component
public class SlackNotifier {

    @Value("${slack.url}")
    private String url;
    
    private RestTemplate restTemplate;

    public SlackNotifier(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public void sendErrorNotification(String errorMessage) {
        String payload = "{\"channel\": \"#pacificocean\", \"username\": \"webhookbot\", \"text\": \"" + errorMessage + "\", \"icon_emoji\": \":ghost:\"}";
        restTemplate.postForEntity(url, payload, String.class);
    }
}

 

application.yml에 1편에서 생성한 url을 넣어 줍시다.

 

slack:
  url: "https://hooks.slack.com/services/[주소]"

 

 

다음은 GrobalEceptionHandler 입니다.

 

@ControllerAdvice
public class GlobalExceptionHandler {

    private SlackNotifier slackNotifier;

    public GlobalExceptionHandler(SlackNotifier slackNotifier) {
        this.slackNotifier = slackNotifier;
    }

    @ExceptionHandler(Exception.class)
    public void handleException(Exception e) {
        slackNotifier.sendErrorNotification(e.getMessage());
    }
}

 

@ExceptionHandler 스프링 MVC에서 제공하는 어노테이션으로,

컨트롤러 내부에서 발생하는 예외를 특정한 메소드가 처리하도록 매핑하는 역할을 합니다.

 

특히 @ExceptionHandler(Exception.class) 같이 사용하면

해당 컨트롤러에서 Exception 타입의 예외가 발생했을 지정된 메소드가 예외를 처리하게 됩니다.

여기서 Exception.class 모든 예외의 상위 클래스이므로,

어떤 종류의 예외가 발생하든 해당 메소드에서 처리하게 됩니다.

 

또한, @ControllerAdvice 어노테이션과 함께 사용하면 전역 범위에서 예외를 처리할 있습니다.

@ControllerAdvice 모든 컨트롤러에서 발생하는 예외를 잡아서 처리하는 클래스를 정의할

사용하는 어노테이션입니다.

 

따라서 @ExceptionHandler @ControllerAdvice 클래스 내부에 사용하면,

애플리케이션 전체에서 발생하는 특정 예외를 곳에서 처리할 있습니다.

 

 

마지막으로 restTemplate config를 작성합니다.

 

@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

 

 

이제 test로 로컬에서 장바구니 api를 조작해보겠습니다.

 

 

 

장바구니에 데이터가 없는 상황입니다.

 

 

슬랙에 알림이 왔습니다!!

 

감사합니다.

 

 

 

728x90
반응형

댓글