Tech story/etc.

Slack 대나무숲 오픈소스 앱 적용기

kt cloud 테크블로그 2024. 11. 4. 15:22

[kt cloud Cloud운영혁신팀 김재승 님]

 

Slack 대나무숲 오픈소스 앱 적용기

Slack API를 활용한 신규 앱 개발이 회사의 Slack 활용도를 높이고, 업무 효율을 개선할 수 있다고 생각합니다.

이를 위해 Slack 대나무숲 앱을 도입한 사례를 블로그로 정리해 보려고 합니다.

해당 프로젝트는 오픈소스로 아래 블로그 및 github 참고했습니다.

 

* 임금님 귀는 당나귀 귀! 대나무숲 슬랙 앱 만들기 - 재그지그의 개발 블로그

* GitHub - wormwlrm/bamboo-forest: 🎋 대나무숲 슬랙 앱 - Echo your message as anonymous on Slack!

 

슬랙 대나무숲이란 ?

슬랙 채널에서 익명으로 메시지를 공유할 수 있도록 해주는 오픈소스 기반 앱 입니다. 사용자는 익명으로 의견이나 질문을 게시할 수 있어 팀 내에서 자유롭게 소통할 수 있도록 지원하며, 대나무숲처럼 자유로운 대화 공간을 제공합니다.

 

바로 시작하겠습니다.

 

 

1. 슬랙 앱 등록

 

먼저 슬랙 앱을 등록해야 합니다. (https://api.slack.com/)

your apps 클릭

 

create new app 클릭 → form scratch 클릭 → 앱 생성

 

앱 클릭 후 basic inforamtion → Signing Secret 메모
OAuth & Permissions → Bot User OAuth Token 메모

 

OAuth & Permissions → Scopes에 chat:write, commands 추가 *chat:write=채널에 메시지를 작성할 수 있는 권한 *commands= /대나무숲 명령어 사용할 수 있는 권한
slack 채널 → 채널 세부 정보 하단 채널 ID 메모

 

 

2. 서버 설정

 

bamboo-forest를 git에서 클론하여 가져옵니다:

 
$ git clone https://github.com/wormwlrm/bamboo-forest.git
$ cd bamboo-forest

 

.env 파일 추가

 
# 앱 토큰
# basic inforamtion → Signing Secret
SLACK_SIGNING_SECRET=

# 슬랙 봇 토큰
# OAuth & Permissions →  Bot User OAuth Token
SLACK_BOT_TOKEN=

# 대나무숲 채널 코드
# slack 채널 → 채널 세부 정보 하단 채널 ID
SLACK_BAMBOO_CHANNEL=

 

배포

 
# 타입스크립트 컴파일
$ yarn build:watch

# ngrok으로 터널링
$ ngrok http 3000

# 애플리케이션을 백그라운드 실행
$ pm2 start npm --name bamboo -- start

 

Event Subscription과 Interactivity & Shortcuts 의 Request URL을 로컬 개발 환경으로 터널링하는 과정이 필요합니다. 이를 위해 별도의 터미널에서 ngrok를 이용합니다. ngrok에서 출력하는 URL에 /slack/events를 덧붙여 Request URL에 입력합니다.

ngrok http 3000

 
만약 ngrok 주소가 아래와 같다면
Connections: https://f111-222-333-444-55.jp.ngrok.io

Request URL에는 다음과 같이 입력
https://f111-222-333-444-55.jp.ngrok.io/slack/events

 

 

3. Slack 앱, 서버 연동

 

Event Subscriptions → Enable Events Request URL Verified에 ngrok 주소 https://xxx.ngrok-free.app/slack/events 입력
Interactivity & Shortcuts → Interactivity Request URL에 ngrok 주소 https://xxx.ngrok-free.app/slack/events 입력

 

Interactivity Request URL은 앱과 사용자가 직접 상호작용(버튼 클릭 등)할 때 발생하는 요청을 처리하기 위한 URL이며,
Event Subscriptions Request URL은 Slack 워크스페이스 내에서 발생하는 다양한 이벤트(메시지 전송, 반응 추가 등)를 앱이 수신할 수 있도록 하는 URL입니다.

 

 

4. 테스트

 

command

 

팝업
익명 메시지 확인 *현재 대나무숲 채널에는 가독성 문제로 [닉네임님이 ~~에 등록한 메시지입니다.] 제외해둠

 

 

마무리

 

지그재그 블로그에 슬랙 앱을 개발하는 과정이 정말 자세하게 나와있어서 Slack 앱, API, 타입스크립트 같은 언어에 대한 이해가 부족해도 새로운 앱 개발이 가능할 것 같습니다.

 

Bamboo Forest 오픈소스는 코드가 간결하고 모든 기능이 함수화되어 있어 이해하기 매우 쉬웠습니다. 다른 앱 개발에 참고하시면 좋을 것 같습니다.

 

*개발 환경

OS: Rocky Linux 8.10
배포: Nginx, ngrok, PM2, serverless(로컬 테스트용)
언어: TypeScript, Node.js

 

 

 

참고/출처