[Spring] 스케줄러를 이용해 지정한 시간에 Slack 메세지 전송하기

JINI·2023년 4월 24일
0

slack

목록 보기
5/5
post-thumbnail

스케줄러를 사용하면 반복적인 업무를 효율적으로 처리할 수 있다.
그래서 이번 포스팅은 Spring 프레임워크에서 Scheduler 기능을 이용해 특정 시간에 slack 메세지 전송하는 방법에 대해 알아본다.


⏰ 스케줄러로 메세지 전송하기


👾 1. 메세지 전송 코드 작성

우선 슬랙 메세지를 보낼 코드를 작성을 해야하는데
코드에 대한 설명은 전에 다뤘기 때문에 생략했다.


public class Slack {
	public static void sendSlackPost()  {
		try {
			Slack slack = Slack.getInstance();
			String token = "";
			MethodsClient methods = slack.methods(token);

			String str = "";
			str+="스케줄러로 특정시간에 메세지 보내기 테스트!!";
			ChatPostMessageRequest request = ChatPostMessageRequest.builder()
					.channel("") 
					.text(new Gson().toJson(str))
					.build();

			ChatPostMessageResponse response = methods.chatPostMessage(request);
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
}

보낼 내용은 String 변수에 담았고 요청/응답 부분에도 코드를 작성하고 예외 처리해 주었다.

그리고 기본 메서드에서 sendSlackPost()를 호출한다.
이제 스케줄러 코드를 작성하자



👾 2. 스케줄러 코드 작성

테스트 목적이기 때문에 새로운 클래스를 만들어 간단히 작성했다.

스케줄러를 사용을 위해 어노테이션 @을 적어준다.

🖋️@Configuration
수동으로 스프링 컨테이너에 빈을 등록하는 어노테이션으로
1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 명시해 주어야
싱글톤이 보장된다.


🖋️@EnableScheduling
xml설정을 굳이 안해도 스케줄러를 사용할 수 있기 때문에 편리하다.


🖋️@Scheduled
스케줄러 사용을 위한 어노테이션으로 cron을 사용하면
cron="0/10 * * * * ?" 과 같은 설정이 가능하다.


@Configuration
@EnableScheduling   //해당 어노테이션을 사용하면 xml설정을 굳이 안해도 스케줄러 실행 가능

public class schedule {
	private static SlackScheduler sp; //슬랙에 보낼 메세지 파일을 불러옴
	@Scheduled(cron="*/10 * * * * *") ![](https://velog.velcdn.com/images/yujinaa/post/50f6d618-1349-4d4d-8cfb-6c9a360a4060/image.jpg)

	public void testSc() {
		System.out.println("10초마다 실행");
		sp.sendSlackPost();    //불러온 파일의 내용을 호출
	}
}

이곳에서 스케줄러를 실행해야 하기 때문에 미리 만들어둔 메세지 코드 파일을 불러온다.

어노테이션을 적고 특정 시간에 전송하기 위해 cron 정규식을 사용해 설정했는데 매 초 % 10을 한 것으로 10초마다 실행하는데
* 는 각 초, 분,시,일,월 을 의미한다.

이제 불러온 파일의 내용을 호출하고 실행한다.

console에서 확인하니 10초마다 메세지가 제대로 출력이 되고 있다.

슬랙에서 확인하니 역시 10초마다 같은 메세지가 정상적으로 보내지는 것을 확인할 수 있다.


이번에는 설정을 다르게해서 테스트 해보자.

@Scheduled(cron="0 5 15 * * TUE") 

화요일 오후 3시 5분에 알림 전송되도록 설정했다.

노트북 시간으로 정확환 시간에 알림이 왔는데 slack 시간은 좀 느린지 4분 정도에 왔지만 어쨌든 지정한 시간에 알림 전송 성공! 😀

profile
꾸준히 성장하는 개발자

0개의 댓글