새소식

Spring

[Spring] Spring Scheduler 이용하여 Slack 자동 알림 구현하기 (Slack 연동)

  • -

 

 

 

 

SpringBoot + Slack

 

 

 

1. Slack Bot 생성하기

 https://api.slack.com/

 

Slack은 생산성 플랫폼입니다

Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

 

사이트에 접속하여 'Your apps'를 클릭합니다.

 

 

 

 

 

'Create an App'을 클릭합니다.

 

 

 

 

 

'From scratch'를 클릭합니다.

 

 

 

 

 

App Name에는 사용할 Bot의 이름을 입력해주고

사용할 Workspace를 선택해줍니다.

그 후 'Create App' 버튼을 눌러줍니다.

(저는 Test라는 이름으로 만들겠습니다.)

 

 

 

 

Basic Information - Building Apps for Slack에서 하단에 'Bots' 버튼을 눌러줍니다.

 

 

 

 

 

 

'Review Scopes to Add' 버튼을 눌러줍니다.

 

 

 

 

 

아래로 스크롤을 내리다보면, Scopes 메뉴가 있습니다.

Bot Token Scopes의 'Add an OAuth Scope' 버튼을 눌러줍니다.

 

 

● OAuth는 사용자가 애플리케이션에 로그인한 후,

해애플리케이션이 사용자의 계정 정보 또는 다른 리소스에 접근할 수 있는 권한을 얻기 위해 사용되는 인증 프레임워크.

OAuth 스코프(scope)는 사용자가 애플리케이션에서 수행할 수 있는 작업, 액세스할 수 있는 리소스의 범위를 정의합니다.

 

 

 

 

 

아래로 스크롤을 내리다보면 아래 두가지 scope가 나오게 될 것이고 클릭하여 추가합니다.

1) chat:write

2) channels:read

 

 

 

 

 

 추가해주시면 이렇게 나옵니다.

 

 

 

 

 

 

 다시 상단으로 스크롤을 올려, 'Install to Workspace' 버튼을 눌러 Bot을 Workspace에 설치해줍니다.

 

 

 

 

 

 '허용' 버튼을 눌러 권한 요청을 수락합니다.

 

 

 

 

 

그럼 이렇게 OAuth Token이 발급됩니다.

 

 

 

 

 

 

 

 

2. Bot을 Slack 채널에 추가하기

 

 

 

 Slack 앱을 실행시킨 후,

Slack Bot을 연동할 채널에 오른쪽 마우스를 클릭하여 '채널 세부정보 보기'를 클릭합니다

 

 

 

 

 

 

통합 탭의 '앱 추가' 버튼을 눌러줍니다.

 

 

 

 

 

 

아까 만들었던 Bot을 '추가' 버튼을 눌러서 추가해줍니다.

 

 

 

 

 

성공적으로 추가된 경우 위와 같은 메시지가 채팅창에 출력됩니다.

 

 

 

3. Spring Boot 코드 작성하기

본 코드 작성 과정은 IntelliJ 및 Gradle을 사용하였습니다.

 


1. build.Gradle에서 아래 dependencies를 추가합니다.

dependencies {
  implementation("com.slack.api:bolt:1.30.0")
  implementation("com.slack.api:bolt-servlet:1.30.0")
  implementation("com.slack.api:bolt-jetty:1.30.0")
  implementation("org.slf4j:slf4j-simple:1.7.36")
}

 

 

2. application.yml에서 아래 코드를 추가합니다.

bot-token : 뒤에는 아까 발급된 OAuth Token을 Copy하여 붙여넣습니다.

target-channel: 뒤에는 앱추가를 실시한 채널명을 입력합니다. (# 반드시 붙여야합니다.)

("" 큰따옴표 안에 필요로 하는 값을 입력해줍니다.)

 

→ 만약 여러채널에 사용하고 싶다면 Class를 만들어서 그곳에서 값을 받아오는 식으로 해야할 것입니다.

slack:
  bot-token: "복사해서 붙여넣기"
  target-channel: "20230707"

 

 

 

3. Service (SlackMessageService.java)를 만듭니다.

@Service
//서비스 계층임을 알려주는 어노테이션

public class SlackMessageService {
    private final String slackBotToken;
    private final String targetChannel;

    public SlackMessageService(@Value("${slack.bot-token}") String slackBotToken, @Value("${slack.target-channel}") String targetChannel){
        this.slackBotToken = slackBotToken;
        this.targetChannel = targetChannel;
    }
    //@Value 어노테이션으로 application.yml에서 입력해준 bot-token과 target-channel 값 가져옴
    

    public void sendSlackMessage(String message){
        Slack slack = Slack.getInstance();

        try{
            slack.methods().chatPostMessage(
                    ChatPostMessageRequest.builder()
                            .token(slackBotToken)
                            .channel(targetChannel)
                            .text(message)
                            .build()
            );
            System.out.println("메시지 전송 성공");
        } catch (IOException | SlackApiException e){
            System.out.println("메시지 전송 실패" + e.getMessage());
        }
// 예외 처리
    }
}

 

 

 

4. SlackMessageApplication에 아래 어노테이션을 추가합니다.

@EnableScheduling
// 스케쥴링 기능을 사용하기 위해 작성해줍니다.
// 이 코드로 인해 코드가 실행이 된다면 자동으로 스케쥴링된 내용이 실행됩니다.

@SpringBootApplication
public class SlackMessageApplication {

    public static void main(String[] args) {
        SpringApplication.run(SlackMessageApplication.class, args);
    }

}

 

 

5. Controller (SlackMessageController.java)를 작성합니다.

@Component
// Bean에 등록해줍니다.
public class SlackMessageController {

    private final SlackMessageService slackMessageService;

    public SlackMessageController(SlackMessageService slackMessageService){
        this.slackMessageService = slackMessageService;
// 생성자를 통해 의존성 주입
    }

    @Scheduled(cron = "*/2 * * * * *")
//@Scheduled 어노테이션을 통해 스프링 스케쥴러를 사용함.
// cron 표현식으로 매 2초마다 스케쥴이 작동되도록함.

    public void sendSlackMessageRegularly(){
        slackMessageService.sendSlackMessage("개발용사 준기");
//sendSlackMessageRegularly 메소드는 slackMessageService의 sendSlackMessage 메소드 값을 반환
    }
}

 

 

 

 

6. 작동 확인

Slack에 2초마다 메시지가 오는 것이 확인되고

 

 

 

콘솔 내에서도 메시지가 발송될 때마다 '메시지 전송 성공'이라는 메시지가 발송됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2023.07.19 - [Spring] - [Spring] Batch와 Scheduler

 

[Spring] Batch와 Scheduler

Scheduler (스케쥴러) 1) Scheduler의 개념과 목적 ● 개념 정해진 시간에 작업을 실행하거나 주기적으로 반복 작업을 수행하는 역할 ● 목적 일정한 시간에 특정 작업을 실행하여 비즈니스 프로세스

devwarriorjungi.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.