동기
새로운 게시글이 작성될 때, 알림을 받고 싶어서 slack 을 이용하기로 정하였고 가벼운 실습을 진행하기로 하였다.
1. Slack -> 앱 -> " Incoming WebHooks"를 추가해준다!
추가를 하고나서, 원하는 채널을 생성 또는 선택 하면 생성되는 WebHook URL 을 복사해줍니다.
예시 : https://hooks.slack.com/services/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
!! 다음과 같은 설정을 할 수 있습니다! !!
2. 프로젝트의 applicatiion.yml 파일에 아래 내용을 추가합니다!
(저는 게시글을 생성하면 Slack 에 메세지를 전송해주기 위한 목적으로 생성하겠습니다.)
slack:
webhook-url:
info: https://hooks.slack.com/services/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
3. .gradle에 관련 디펜던시 추가합니다!
//slack
implementation("com.slack.api:slack-api-client:1.9.0")
implementation("com.squareup.okhttp3:okhttp:4.9.1")
4. SlackService 를 생성해주었습니다.
@Service
@Async("taskExecutor")
class SlackService {
@Value("\${slack.webhook-url.info}")
private lateinit var SLACK_WEBHOOK_URL_INFO: String
fun sendMessage(message: String): Future<Boolean> {
val slack: Slack = Slack.getInstance()
val webHookUrl = SLACK_WEBHOOK_URL_INFO
val text = message
val payload = Payload.builder().text(text).build()
val response = slack.send(webHookUrl, payload)
return AsyncResult(response.code == 200)
}
5. 기존에 사용하던 글 생성 service 에 추가 후 동작을 확인 하였다.
(기존 사용했던 게시글 CRUD 만들기 -> https://brotherone.tistory.com/8)
@Service
class PostService(
private var postRepository: PostRepository,
private var slackService: SlackService) {
@Transactional
fun createPost(postReqDto: PostReqDto): PostResDto {
val post: Post = postRepository.save(postReqDto.dtoToEntity())
slackService.sendMessage("${post.title} 라는 제목의 글이 작성되었습니다.")
return PostResDto.entityToDto_v2(post)
}
...
}
6. 동작 확인.
잘 동작하는 모습을 볼 수 있다!!.
이를 잘 활용하면, 다양한 프로젝트에서 다양한 방법으로 사용할 수 있을 것 같다 ㅎㅎ
실행 소스코드는 아래 깃허브에서 확인할 수 있습니다.!!
'Spring > Kotlin' 카테고리의 다른 글
[Kotlin+Springboot+JPA] Exception Handling by Kotlin (0) | 2021.08.31 |
---|---|
[SpringBoot + Kotlin + JPA] 간단한 게시글 CRUD REST Api 구현. (0) | 2021.08.08 |
[Kotlin + Springboot + Kotest] Kotest 알아보자. (0) | 2021.08.01 |
[Kotlin + Springboot + JPA] Entity 생성에 관하여. (0) | 2021.07.28 |
[Kotlin + SpringBoot + JPA] Swagger 설정 및 동작 (0) | 2021.07.18 |