안녕하세요
첫번째 글입니다.
https://rhgustmfrh.tistory.com/154
오늘은 스프링 부트에서 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를 조작해보겠습니다.
장바구니에 데이터가 없는 상황입니다.
슬랙에 알림이 왔습니다!!
감사합니다.
'스프링부트' 카테고리의 다른 글
액세스 및 리프레쉬 토큰을 사용한 JWT 전략 구현 (0) | 2024.02.17 |
---|---|
webFlux 사용기 (1) | 2023.12.27 |
스프링 부트에서 Slack으로 실시간 모니터링하기 (1) (0) | 2023.11.29 |
Swagger로 API 문서 자동화: 실습 후기와 튜토리얼 (0) | 2023.11.28 |
Spring에서 카프카(Kafka)를 사용하여 데이터를 받아보자 (0) | 2023.10.14 |
댓글