Nest.js로 슬랙에 메세지를 보내보자!

song4·2023년 8월 16일
0

왜 이 기능을 만들고 싶은가?

예전 프로젝트를 할 때 Github Actions를 이용하여 CI/CD를 찍먹해봤다.
github에 push를 하면 테스트진행 후 자동으로 배포까지 마쳤었는데,
테스트가 실패하면 다음단계로 넘어가지 않게 구축을 했었다.

그런데 push를 하고 테스트가 실패하는지 안하는지 계속 지켜보거나 체크해야 했고,
이때 이 지켜보는 시간을 없애고 싶었다.

그래서 테스트가 실패했을 때 슬랙으로 메세지를 받고 싶었다.

그리고 지금은 환율(달러, 엔화)이 변동되면 슬랙으로 변동된 가격을 알려주는 API를 만들고 싶다.

그래서 먼저 버튼을 누르면 슬랙으로 메세지가 가는 API를 만들어보자!

어찌됐든 슬랙에 메세지를 보내는게 먼저이기 때문에
슬랙에 메세지를 보내는 API를 만들어보자!

과정

기본적으로 node로 슬랙메세지 보내기 라고 검색을 해보았다.
몇 개의 블로그들이 나왔고 블로그들을 읽어보니 slack에서 api를 제공하고 있었다.
블로그에는 이미 사용하는 방법, 설정하는 방법 들이 나와있었지만
블로그만 보고 따라하기는 싫어서 slack api를 검색하여 공식문서를 읽어보았다.

역시나 영어는 너무나 어려웠고 무슨말인지 이해가 안갔다.
무엇보다 어디서부터 읽어야 시작을 할 수 있나 조차도 감이 안잡혔다.

블로그를 쓴 사람들은 이런 공식문서를 읽고 문제를 해결했나 싶어서 감탄했다.

그럼에도 블로그대로 진행하지 않고 이번에는 chat GPT에게 도움을 요청했다.

slack 공식문서중 어느 부분을 읽어야 메세지를 보내는 방법을 찾을수 있나?

그러니 이런 답변이 왔다.

Slack API의 공식 문서는 꽤나 잘 구성되어 있습니다. 그러나 처음 시작하는 사용자에게는 정보의 양이나 영어라는 언어 장벽 때문에 약간 혼란스러울 수 있습니다.

  1. Slack API 시작하기: Slack에서 API를 사용하려면 먼저 App을 생성해야 하는 것은 Slack API 홈페이지의 'Getting Started' 섹션에서 설명하고 있습니다. 여기에서는 Slack App의 기본적인 생성 방법과 OAuth 토큰에 대한 내용을 다룹니다.

  2. 개발자 커뮤니티: 많은 개발자들이 처음 Slack API나 다른 API를 사용할 때 공식 문서 외에도 개발자 커뮤니티나 포럼, 스택 오버플로우(Stack Overflow) 같은 사이트에서 질문을 통해 정보를 얻습니다. 그리고 여러 개발자들이 그 경험을 바탕으로 블로그 포스팅을 하기도 합니다.

  3. 실험: API 사용은 공식 문서를 읽는 것만으로는 충분하지 않습니다. 실제로 API를 직접 호출해보고 실험하는 것이 중요합니다. 때때로 공식 문서에 없는 내용이나 예외 사항을 발견할 수도 있습니다.

  4. API 테스터 도구: Slack API 사이트에는 API 메서드 페이지에서 각 API를 직접 테스트할 수 있는 기능이 내장되어 있습니다. 이를 통해 실제로 API 호출을 해보며 결과를 확인할 수 있습니다.

개발자로서 새로운 API나 기술을 배울 때, 공식 문서는 중요한 기본 자료이지만, 다양한 경로와 방법으로 정보를 얻고 학습하는 것이 중요합니다. 그러한 과정 속에서 개발자는 문제 해결 능력을 키우게 됩니다.

이 대답에서 느낀점은 공식문서를 읽는 것만으로 뭔가를 진행하지 않아도 된다였다.
실제 일을 하거나 급하게 무언갈 만들어야 한다면 공식문서에 매달리지 않겠지만
블로그에 써져있거나 누군가 답해주지 않는 상황이 온다면
나혼자 찾아야 하는건 마찬가지이기 때문에

블로그에는 이미 정보가 많기 때문에 습관도 기를겸 1번 답변을 통해 공식문서를 읽기로 했다.

안내해준 페이지를 들어가서 번역을 해가며 천천히 진행해보았다.

slack api를 사용하기 위해선 slack app을 생성해야 하고,
이런 저런 설정들을 공식문서를 따라서 진행해보았다.

슬랙에서 제공하는 api들을 보니 web api를 이용하면 메세지를 보낼 수 있을 것 같았다.

이제는 npm 패키지를 찾아보자.
npm 페이지를 들어가서 nest slack을 검색해보았고,
가장 다운로드수가 많은 nestjs-slack을 선택했다.

이 패키지의 문서를 읽어보니 web api와 webhook을 사용하고 있었다.

web api와 webhook의 차이점이 궁금해서 검색을 해봤다.

  • Web API
    slack의 거의 모든 기능을 사용할 수 있다.
    slack서버와 직접 통신하여 기능을 수행한다.
  • WebHook
    간단한 메세지나 알림을 이용할때 사용한다.
    고정된 url에 데이터를 보내서 메세지를 보낼 수 있다.

대략적으로 web api는 거대한 기능의 집합이고, webhook은 간단한 알림이나 메세지를 이용할때 쓰는 것 같다.

메세지를 보내보는게 목적이기 때문에 간단하게 구현하기 위해서 web api를 사용하지 않고
webhook을 이용하기로 했다.

webhook을 이용하려면 발급받은 url을 입력해 줘야 한다.
아까 만든 slack app에서 incoming webhook을 활성화 시켜서 url을 받을 수 있다.
app.module.tsapp.service.ts

url은 링크를 가지고 있으면 누구나 사용할 수 있다고 한다.
그렇기 때문에 노출되지 않게 조심해야한다!!!

슬랙에 메세지가 왔다!

힘들었던 부분

  1. 일단... 공식문서를 읽기가 너무 힘들었다.
  2. appModule에 slackModule을 설정할 때 url을 입력해야 하는데 이 url이 어디에서 가져오는지 찾지 못했다.

어떻게 해결했나?

  1. 번역기 돌려가며 읽었다... 따흑..
  2. 공식문서에서 webhook을 검색해보았고 사용하는 방법이 정리되어 있어서 url을 가져올 수 있었다.

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기