wanteddev/lighthouse 로컬에서 테스트 하기(feat: pm2 + Mongo DB)

Yeongsu Han
원티드랩 기술 블로그
9 min readMar 12, 2021
from https://github.com/wanteddev/lighthouse

며칠 전 원티드 프론트팀에서 사용중인 lighthouse슬랙봇 서버를 오픈소스로 공개하고 관련된 글을 André Tito Vasconcelos님께서 작성해 주셨습니다.

여기서는 원티드의 lighthouse를 pm2와 MongoDB를 이용해서 간단하게 로컬에서 테스트 하는 방법을 소개해 드리겠습니다.

🔍 준비하기

  1. node ≥ 12
  2. pm2
  3. MongoDB
  4. ngrok
  5. slack (+ slack app 연동)

🏃‍♀️ 환경 셋팅하기

node는 설치되어 있다고 간주하고 pm2와 Mongo db 개발환경 셋팅, 그리고 슬랙 앱을 만들어서 채널에 연동하는 과정을 보여 드리겠습니다.

노드서버(express) 준비하기

  1. Github url에 접속해서 프로젝트를 클론 받습니다.
  2. yarn global add pm2 를 통해 pm2를 전역으로 설치 합니다.
  3. 다운받은 프로젝트 루트에서 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을 만듭니다.

  1. App Name을 지정합니다.
  2. 앱을 설치할 workspace를 설정합니다.

앱을 만들고 설정페이지로 들어가면 다음과 같은 화면을 보실 수 있습니다.

위 설정에서 해줘야 하는 부분이 많습니다.

  1. Interactive Components —

Add features and fuctionality > interactive Components 에 들어가 다음처럼 url을 지정해줍니다.

https://${chatbotUrl}/receive_submission

chatbotUrl은 앞으로 띄울 노드서버 주소이고, 챗봇에서 모달을 띄워서 받는 메세지는 모두 서버의 receive_submission 엔드포인트로 라우트 됩니다.

주기적인 스케쥴을 등록하기 위해서는 /receive_submission가 필요합니다.

2. Slash Commands—

Add features and fuctionality > Slash Commands 설정

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:3001
Connections ttl opn rt1 rt5 p50 p90
70 0 0.00 0.00 5.02 5.96
HTTP Requests
-------------
POST /lighthouse 200 OK

위 작업까지 완료가 되면 아까 위에서 설정했던 슬랙앱 설정 chatbotUrl 주소를 https://0b3df5bdf7a4.ngrok.io 로 바꿔줍니다.

위 설명은 실제로 서버를 호스팅 할 수 있는 상황이라면 필요 없는 과정인거 아시죠?

🎯 테스트 하기

이제 모든 환경셋팅이 끝났습니다.

테스트로 만들어 놓은 슬랙 채널에 접속 해 챗봇 명령어를 실행해 보겠습니다

(실행 가능한 명령어는 /lighthouse help 를 통해 확인 가능합니다.)

역시 테스트는 구글이 최고야

원하는 결과값이 잘 나오네요 👍👍👍👍

서버 로그도 잘 찍히는 것을 확인 할 수 있습니다.

추가적인 기능은 깃헙 또는 André Tito Vasconcelos님이 이전에 작성하신 미디엄 글의 “Lighthouse 챗봇 기능 소개” 섹션 을 참고 하시면 더 자세한 정보를 얻을 수 있습니다. (많은 분들의 PR과 피드백을 기다리고 있습니다 😁)

📒 참고

P.S 좋은 오픈소스를 만들어 준 André Tito Vasconcelos (갓드레) 짱짱!

원티드에서 현재 다양한 포지션을 채용하고 있습니다.

원티드 채용공고 확인하기

--

--