wanteddev/lighthouse 로컬에서 테스트 하기(feat: pm2 + Mongo DB)
며칠 전 원티드 프론트팀에서 사용중인 lighthouse슬랙봇 서버를 오픈소스로 공개하고 관련된 글을 André Tito Vasconcelos님께서 작성해 주셨습니다.
여기서는 원티드의 lighthouse를 pm2와 MongoDB를 이용해서 간단하게 로컬에서 테스트 하는 방법을 소개해 드리겠습니다.
🔍 준비하기
🏃♀️ 환경 셋팅하기
node는 설치되어 있다고 간주하고 pm2와 Mongo db 개발환경 셋팅, 그리고 슬랙 앱을 만들어서 채널에 연동하는 과정을 보여 드리겠습니다.
노드서버(express) 준비하기
- Github url에 접속해서 프로젝트를 클론 받습니다.
yarn global add pm2
를 통해 pm2를 전역으로 설치 합니다.- 다운받은 프로젝트 루트에서
yarn
을 실행해 노드서버에 필요한 디펜던시를 다운 받습니다.
MongoDB 준비하기
Mongo db 설치 가이드에 따라 설치하고 접속이 잘 되는지 확인합니다. (터미널에서 mongo
를 입력하고 접속창이 뜨는지 확인)
> mongo MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("feef62b6-4435-4857-ad18-c10cebbe0cff") }
MongoDB server version: 4.4.3
이후 보안을 위해 Username과 패스워드를 설정해줍니다. (코드에서는 admin db를 사용합니다)
> use admim
switched to db admin> db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
보안설정이 잘 되었는지 확인하려면 다음처럼 입력하고 1이 출력되는지 확인하시면 됩니다.
> db.auth(“root”, “root123”)
1
노드서버(express)와 DB 연결하기
노드서버의 환경변수는 pm2를 통해 ecosystem.config.js
파일에서 관리하고 있습니다.
위에서 DB에서 유저를 만들 때 사용한 값으로 MONGO_USERNAME
MONGO_PASSWORD
를 지정해주고 MONGO_SERVER
를 실제 몽고디비가 실행되고 있는 로컬서버와 포트로 지정해줍니다 (TOKEN은 이후 슬랙앱을 연동하고 넣어줍니다 👨🏫)
슬랙앱 만들기
https://api.slack.com/apps/ 에 접속해 App을 만듭니다.
- App Name을 지정합니다.
- 앱을 설치할 workspace를 설정합니다.
앱을 만들고 설정페이지로 들어가면 다음과 같은 화면을 보실 수 있습니다.
위 설정에서 해줘야 하는 부분이 많습니다.
- Interactive Components —
Add features and fuctionality
> interactive Components
에 들어가 다음처럼 url을 지정해줍니다.
https://${chatbotUrl}/receive_submission
chatbotUrl은 앞으로 띄울 노드서버 주소이고, 챗봇에서 모달을 띄워서 받는 메세지는 모두 서버의 receive_submission
엔드포인트로 라우트 됩니다.
2. Slash Commands—
Add features and fuctionality
> Slash Commands
설정
- Command:
/lighthouse
- Request URL:
https://${chatbotUrl}/lighthouse
- Short Description:
Use Lighthouse Audit Commands
- Usage Hint:
help
3. Bots—
Add features and fuctionality
> Bots
설정
Always Show My Bot as Online
ON으로 설정Show Tabs
>Messages Tab
ON으로 설정
4. Permissions—
Add features and fuctionality
> Permissions
에서 다음 값들을 승인
- chat:write
- chat:write.public
- commands
4. Display Information—
앱의 Display 정보를 설정합니다.
설정을 완료하고 만들어진 앱을 워크스페이스 채널에 연동합니다.
앱 생성이 되면 다음처럼 TOKEN값을 얻을 수 있습니다. (Permissions 안에서 확인)
토큰값을 위에서 그냥 넘어갔던 ecosystem.config.js
안의 TOKEN
값에 넣어줍니다.
서버 실행하기
서버 실행준비를 모두 마쳤습니다 🎉 이제 프로젝트 루트에서 yarn start
를 통해 노드서버를 실행합니다.
서버가 문제없이 실행되면 다음과 같은 메세지를 볼 수 있습니다.
bot listening on port 3001!
Successfully connected to database!
로컬서버를 public으로 만들기
하지만 우리가 실행하는 서버는 로컬(localhost)에 있기 때문에 챗봇앱에서 아무리 /lighthouse
를 입력해도 원하는 결과를 얻지 못합니다.
이 문제를 해결하기 위해 위에서 미리 준비해 놨던 ngrok을 통해 서버를 외부에서 접근 할 수 있도록 만들어보겠습니다.
- ngrok이 설치 된 디렉토리에서 다음 명령어를 실행해서 3001포트를 열어줍니다.
./ngrok http 3001
- 3001포트가 정상적으로 열리면 ngrok을 통해 다음처럼 외부에서 접근 할 수 있는 url 주소를 얻을 수 있습니다. (https://0b3df5bdf7a4.ngrok.io)
ngrok by @inconshreveable (Ctrl+C to quit)Session Status online
Account Yeongsu Han (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://0b3df5bdf7a4.ngrok.io -> http://localhost:3001
Forwarding https://0b3df5bdf7a4.ngrok.io -> http://localhost:3001Connections ttl opn rt1 rt5 p50 p90
70 0 0.00 0.00 5.02 5.96HTTP Requests
-------------POST /lighthouse 200 OK
위 작업까지 완료가 되면 아까 위에서 설정했던 슬랙앱 설정 chatbotUrl 주소를 https://0b3df5bdf7a4.ngrok.io 로 바꿔줍니다.
위 설명은 실제로 서버를 호스팅 할 수 있는 상황이라면 필요 없는 과정인거 아시죠?
🎯 테스트 하기
이제 모든 환경셋팅이 끝났습니다.
테스트로 만들어 놓은 슬랙 채널에 접속 해 챗봇 명령어를 실행해 보겠습니다
(실행 가능한 명령어는 /lighthouse help 를 통해 확인 가능합니다.)
원하는 결과값이 잘 나오네요 👍👍👍👍
서버 로그도 잘 찍히는 것을 확인 할 수 있습니다.
추가적인 기능은 깃헙 또는 André Tito Vasconcelos님이 이전에 작성하신 미디엄 글의 “Lighthouse 챗봇 기능 소개” 섹션 을 참고 하시면 더 자세한 정보를 얻을 수 있습니다. (많은 분들의 PR과 피드백을 기다리고 있습니다 😁)
📒 참고
- pm2 (https://pm2.keymetrics.io/)
- ngrok (https://dashboard.ngrok.com/)
- MongoDB (https://www.mongodb.com/)
P.S 좋은 오픈소스를 만들어 준 André Tito Vasconcelos (갓드레) 짱짱!
원티드에서 현재 다양한 포지션을 채용하고 있습니다.