본문 바로가기
ETC

입개발) 슬랙 알림 기능 개발

by devson 2022. 8. 20.

가끔 새로 개발한 기능을 유저가 사용하는지 궁금할 때가 있다.

또는 배치를 돌릴 때 배치 결과를 보고싶을 때도 있다.

 

하지만 업무 중에 주기적으로 어드민 사이트나 DB 데이터를 매번 볼 수 없으니 운영 편의상 특정 이벤트(유저가 특정 액션을 했다던가, 특정 설정을 변경했다던가) 후에 슬랙 채널로 알림을 보내곤 한다.

 

슬랙 알림 기능을 개발할 때 참고할 수 있는 몇 가지를 정리해본다.

 

Incoming WebHooks

Incoming WebHooks는 특정 채널에 슬랙 메세지를 보내기 가장 쉬운 방법이다.

쓰기도 쉽고 설정도 매우 단순하다.

 

Apps에서 Incoming WebHooks를 검색하여 추가를 할 때 간단한 설정만 해주면 된다.

 

 

그리고 만들어진 WebHooks의 URL로 HTTP 요청을 보내면 된다.

 

하지만 고정된 채널, 유저로만 알림을 보낼 수 있어 다른 채널로 보내야하는 알람이 필요할 때마다 새로 추가해줘야한다.

(그렇지만 그것마저도 번거롭지 않을만큼 심플하다)

 

token + API 사용

앞서 살펴본 Incoming WebHooks 기능은 매우 편리하지만 Slack에서는 이를 사용하는건 지양하고 있다.

 

또한 앞서 말한 유연하지 못하다는 단점이 있기 때문에 Incoming WebHooks가 아닌 Slack API를 사용하는 방식을 고려할 수 있다.

POST https://slack.com/api/chat.postMessage
Content-type: application/json
Authorization: Bearer xoxb-your-token
{
  "channel": "YOUR_CHANNEL_ID",
  "text": "Hello world :tada:"
}

문서: https://api.slack.com/messaging/sending

 

API를 사용할 때는 Bearer 방식의 인증을 사용하기 때문에 인증 token을 발급받아야한다.

(참고: Slack 토큰 발급)

 

Slack SDK 사용

앞서 말한 방식은 직접 HTTP 통신을 하여 Slack 채널에 메세지를 보내는 방식이다.

그 외로 Slack에서는 개발자들이 Slack 기능을 활용한 개발을 쉽게 할 수 있도록 SDK를 제공하고있다.

Java, Python, Node SDK를 제공하고있고 이를 사용하여 쉽게 메세지를 보낼 수 있다. (SDK 사용 시에도 인증 token을 사용한다)

 

또한 복잡한 형태의 메세지를 보낼 때 SDK의 도움을 받을 수 있다.

특히 Kotlin을 사용한다면 Kotlin extension을 통해 DSL을 제공하기 때문에 복잡한 메세지를 쉽게 코딩할 수 있다.

 

import com.slack.api.Slack
import com.slack.api.model.block.Blocks.*
import com.slack.api.methods.kotlin_extension.request.chat.blocks

val slack = Slack.getInstance()
val token = System.getenv("token")
val response = slack.methods(token).chatPostMessage { req -> req
  .channel("C1234567")
  .blocks {
    section {
      markdownText("*Please select a restaurant:*")
    }
    divider()
    actions {
      button {
          text("Farmhouse", emoji = true)
          value("v1")
      }
      button {
          text("Kin Khao", emoji = true)
          value("v2")
      }
    }
  }
}

(https://slack.dev/java-slack-sdk/guides/composing-messages#block-kit-kotlin-dsl)

 

Block Kit Builder를 활용하기

앞서는 슬랙 알림을 보내기 위해 메세지를 어떻게 보내는가에 대해 얘기를 했다면, 이건 메세지를 어떻게 꾸밀 것인가에 대한 것이다.

메세지를 꾸밀 것은 이것저것 많은데 이걸 어떻게 만들 것인가가 막막한데, Slack에서 제공하는 Block Kit Builder 를 사용하면 쉽게 메세지를 꾸밀 수 있다.

 

여러가지 기본 템플릿을 제공하고, Web GUI로 쉽게 block에 component들을 추가하면서 적절하게 메세지 형태를 정해나갈 수 있다.

그리고 만든 메세지 block에 대한 payload를 우측에 보여주기 때문에 HTTP 요청을 할 때도 사용해도 되고 SDK를 사용할 때도 사용할 수 있다.

 

댓글