| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- QueryDSL
- 스터디
- aws
- Docker
- Redis
- bootcamp
- 기본형
- CodeCommit
- nosql
- spring
- Spring Boot
- mapping
- goorm x kakao
- orm
- serverless
- jpa
- MSA
- jvm
- 개발자
- backend
- data
- Cache
- s3
- backenddeveloper
- 자격증
- goorm
- java
- 티스토리챌린지
- 오블완
- Today
- Total
gony-dev 님의 블로그
[Spring] Slack 연동하기 본문


프로젝트를 진행하다보면 회원 유입이나 기능적으로 발생하는 오류들에 대해 즉각적으로 확인해야한다.
하지만 우리가 일반적으로 확인하는 방법으로는 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 같은 협업 툴은 개발자들의 유지보수를 위해 없어서는 안될 필수 요소이다.
이는 실서비스에서도 많이 애용하고 있는 방법이며, 익숙해지는 편이 좋을 것 같다.