gony-dev 님의 블로그

[Spring] Slack 연동하기 본문

Spring

[Spring] Slack 연동하기

minarinamu 2025. 7. 25. 17:45

프로젝트를 진행하다보면 회원 유입이나 기능적으로 발생하는 오류들에 대해 즉각적으로 확인해야한다.
하지만 우리가 일반적으로 확인하는 방법으로는 DB나 AWS EC2에 직접 접근하면서 확인하는 방법들이었는데
여기서 이런 의문이 들 것이다. "좀더 편하게 확인할 수 있는 방법이 없을까?"
우리는 이 불편함을 해소하기 위해 Spring과 Slack을 연동하여 특정 이벤트에 대해 알림을 보낼 수 있도록 할 것이다.

 

1. Slack이란?

개발이나 커뮤니티에 익숙치 않은 사람들은 Slack이라는 어플리케이션을 모를 수도 있을 것이다.

Slack은 '클라우드 컴퓨팅 기반 인스턴트 메신저 및 프로젝트 관리용 협업툴'로
프로젝트에 대해 관리하고 논의할 때 높은 효율성과 가독성 있게 구성되어 있다.

그래서 실무 개발자들도 현재 Slack을 많이 애용하고 사용하고 있다.

 

우리는 Spring에 Slack Bot을 추가하여 특정 이벤트가 발생했을 때
이를 곧바로 확인할 수 있도록 채널로 알림을 보내도록 설정해 볼 것이다.

 


2. 사전 세팅

진행하기 전에 Slack 계정을 등록했다고 가정하고, 아래의 작업을 완수해야한다.

Slack API

  • 아래의 링크를 클릭하여 Your Apps를 클릭해보자

현재 이미 하나를 생성하였지만 우리는 새로운 app을 만들기 때문에 Create New App -> From scratch를 클릭하자.

그리고 아래의 창이 나오게 되는데 App Name에는 생성할 원하는 이름을 적고,
아래 칸에는 현재 생성되어 있는 workspace를 넣자!(없으면 만들어야 한다.)

그럼 app이 생성이 되고 OAuth & Permission를 클릭하여 아래의 OAuth Tokens를 잘 기억해두자!(Token이 안나와있다면 생성하자!)

 

여기까지 했다면 사전 세팅은 완료되었다! 이제 Spring으로 돌아가보자!

 


3. Spring Boot

먼저 라이브러리와 yml을 추가하여 수정해보자.

build.gradle
{
    // slack
    implementation("com.slack.api:bolt:1.18.0")
    implementation("com.slack.api:bolt-servlet:1.18.0")
    implementation("com.slack.api:bolt-jetty:1.18.0")
}​

application.yml
위에서 가져온 OAuth Tokens을 yml에 넣어주자!
slack:
  token: ${SLACK_TOKEN}​

 

그리고 Slack의 원하는 채널명에 메시지를 전송하는 기능을 만들어보자.

SlackConstant.class
public class SlackConstant {

    public static final String SIGNUP_CHANNEL = "#회원가입-알림";
    public static final String POST_CREATE_CHANNEL = "#게시글생성-알림";
    public static final String ERROR_CHANNEL = "#스프-오류-알림";
}​

 

SlackService.class
@Service
@Slf4j
public class SlackService {

    @Value(value = "${SLACK_TOKEN}")
    private String slackToken;

    public void sendSlackMessage(String message, String channel) {
        String channelAddress = "";

        if(channel.equals("signup")){
            channelAddress = SlackConstant.SIGNUP_CHANNEL;
        } else if(channel.equals("post")){
            channelAddress = SlackConstant.POST_CREATE_CHANNEL;
        } else if(channel.equals("error"))
            channelAddress = SlackConstant.ERROR_CHANNEL;

        try{
            MethodsClient methods = Slack.getInstance().methods(slackToken);

            ChatPostMessageRequest request = ChatPostMessageRequest.builder()
                    .channel(channelAddress)
                    .text(message)
                    .build();

            methods.chatPostMessage(request);

            log.info("Slack post message success");
        } catch (SlackApiException | IOException e) {
            log.error(e.getMessage());
        }
    }
}​

 

여기까지 했다면 작업은 끝!

원하는 위치에 sendSlackMessage를 선언하여 이벤트 발생 후 알림을 보내보자!

FeedController.class
@PostMapping
public SuccessResponse<FeedResDto> createFeed(
        @RequestBody @Valid FeedReqDto feedReqDto) {
    FeedResDto feedResDto = feedService.createFeed(feedReqDto);

    slackService.sendSlackMessage("회원이 피드를 작성했어요!", "post");
    return new SuccessResponse<>(feedResDto, FEED_CREATE.getMessage());
}​


위와 같이 메서드를 선언하고 해당 api를 실행해보자!

그러면 아래와 같이 slack에 알림이 오게된다.

 

성공!!!


4. 결론

여기까지 Slack을 통해 프로젝트에 대한 이벤트를 즉각적으로 확인할 수 있게 되는 과정을 살펴보았다.

이렇듯 Slack이나 Discord 같은 협업 툴은 개발자들의 유지보수를 위해 없어서는 안될 필수 요소이다.

이는 실서비스에서도 많이 애용하고 있는 방법이며, 익숙해지는 편이 좋을 것 같다.