개요
aws 서버에서 서비스 배포 중 런타임에 발생하게 될 에러를 보기 위해서 slack과 연동하기로 하였다.
maven
<dependency>
<groupId>com.slack.api</groupId>
<artifactId>bolt</artifactId>
<version>1.27.2</version>
</dependency>
<dependency>
<groupId>com.slack.api</groupId>
<artifactId>bolt-servlet</artifactId>
<version>1.27.2</version>
</dependency>
application.properties
properties에 토큰과 채널 이름을 정의한다.
#slack
slack.token= your auth token
slack.channel.monitor= your channel name
토큰 생성
Slack은 당신을 위한 Digital HQ입니다
Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.
slack.com
1. 로그인 후 your apps 들어가기

2. Create New App

3. App Create

4. Permissions 설정


5. Permissions 설정 후 Install to Workspace 실행하면 토큰이 생성됨

6. Slack 테스트를 위한 서비스 생성
@Service
public class SlackService {
@Value(value = "${slack.token}")
private String token;
@Value(value = "${slack.channel.monitor}")
private String channel;
public void postSlackMessage(String message) {
try {
MethodsClient methods = Slack.getInstance().methods(token);
ChatPostMessageRequest request =
ChatPostMessageRequest.builder()
.channel(channel)
.text(message)
.build();
methods.chatPostMessage(request);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
테스트 성공 후
어떠한 에러들을 보낼 것인지 정한 것은 없기에 모든 에러 메시지를 Slack에 보내기로 결정함
@RestControllerAdvice
public class GlobalExceptionHandler {
@Autowired
private SlackService slackService;
/**
* 모든 에러를 클라이언트에 보내지 않음
*
* @param exception
* @return
*/
@ExceptionHandler(Exception.class)
public ResponseEntity<String> globalExceptionErrorHandler(Exception exception){
String errorMessage = exception.getMessage();
slackService.postSlackMessage(errorMessage);
return new ResponseEntity<String>("server error", HttpStatus.NOT_FOUND);
}
}