[토이 프로젝트] 익명 부엉이 - Slack 익명 질문&답글 봇

isaac-jh·2022년 3월 29일
2
post-thumbnail
post-custom-banner

💡 프로젝트를 시작하며

  • 본 프로젝트는 Node.js 프로젝트를 해보고싶어 만들어진 저의 개인 프로젝트입니다.
  • 모 부트캠프에서 비밀리에 사용될 예정에 있습니다. 해당 앱은 외부공개 하지 않지만 코드는 레포지토리에 공개하오니 편하게 참고하셔도 좋습니다. (추후 공개될 수도 있습니다)
  • 총 개발 기간은 공백기 제외 약 1개월입니다.

📌 프로젝트 기획

시작하게 된 계기가 무엇인가요?

'나는 LINE 개발자입니다.'라는 책을 읽었습니다. 지인에게 선물받아 가지고 있다가 책장 속에 있는 것을 뒤늦게 발견하고 읽기 시작했는데, 그 내용 중에 반복되는 또는 단축할 수 있는 여러 업무들을 봇을 만들어 이용하시는 개발자님의 이야기가 적혀있었습니다. 그 이야기를 보고 봇이 가진 업무 자동화 능력과 협업 효율 상승 효과에 반하게되어 봇을 만들어보고자 시작하게 되었습니다.

그리고 시작한지 하루만에 지인분이 제게 이런 기회를 주시더군요.

"부트캠프에서 익명 질문 채널을 운영하고 싶은데, 한 번 봇으로 만들어볼래?"

플랫폼을 고민하고 있던 저는 바로 슬랙으로 달려가 기술문서를 보기 시작했습니다.

왜 팀 프로젝트인데 백엔드 내용만 있나요?

이 글에서 백엔드 내용만 있는 이유는 프론트와 디자인이 완성되지 않은 상태에서 백엔드 진행 내용만을 담은 중간 회고(?)글 이기 때문입니다. 즉, 봇을 만드는 활동에 대해서만 작성한 회고 글입니다.
저는 봇을 만들고 데이터를 담당, 프론트로 대시보드를 만들어 주실 분이 계셨고, 그리고 위에서 출연한 지인분은 디자인을 맡아주셨습니다.
그러다 진행 중에 프론트엔드를 담당해주시던 분이 합격하시게 됨 + 지인분의 바쁜 회사생활을 이유로 잠시 공백기가 생겼고, 저는 핵심 기능만 개발하고 다른 팀 프로젝트를 진행하였습니다.
그렇게 부트캠프 개강일은 다가왔고, 우선 쓸 수 있게는 해야하니 급하게 앱 설치 플로우를 개발하고 데이터 저장을 구글 스프레드 시트에도 할 수 있도록 옮겨서 스프레드시트에서 바로 간단하게 대시보드를 구현하고 사용할 수 있게 변경하였습니다.

📜 프로젝트 소개

익명 부엉이는 Slack 채널에서 익명으로 질문하고, 답글을 달 수 있게 해주는 앱입니다.
다음과 같이 사용됩니다.

  • 일부에게만 공개된 앱 설치 링크를 통해 사용하고 싶은 팀에 앱을 설치합니다.
  • 익명성을 갖추고 싶은 채널에 초대(/invite Owl)하여 커맨드와 숏컷을 이용하여 사용합니다.
  • /owl [메세지] 를 이용하여 익명으로 메세지를 보낼 수 있습니다.
  • 익명으로 답글을 달고 싶은 메세지 오른쪽 위의 더보기 버튼(⋮)을 눌러 '익명으로 답글달기' 숏컷을 이용하여 익명으로 답글을 달 수 있습니다.

👀 주요 개발 환경

  • BackEnd: Node.js
    • slack의 bolt라이브러리를 이용하여 구성했습니다.
    • bolt가 지원해주는 웹 소켓 방식을 이용하여 이벤트 처리에 좋게 했습니다.
    • npm으로 패키지를 구성하여 관리하였습니다.
    • Auth 정보와 메세지, 답글을 MongoDB에 저장하고 추가적으로 Google Spreadsheets에도 기록되게 하여 빠르고 편하게 데이터를 조회할 수 있게 하였습니다.
  • FrontEnd: 추후 대시보드 구현 예정. 현재는 Google Spreadsheets 이용 중
  • DataBase: MongoDB
  • Sever: Heroku, Amazon EC2, Docker

🕹 주요 기능

  • 익명으로 메세지 보내기
    /owl 커맨드를 이용하여 익명 부엉이가 속한 채널에서 부엉이를 통해 익명으로 메세지를 보낼 수 있습니다.

예를 들어, '/owl 안녕'을 보낸다면?

이렇게 부엉이가 대신 전달해주므로 클라이언트에서 익명성을 보장할 수 있습니다.

  • 익명으로 답글 달기
    메세지의 더보기 버튼(⋮)에 있는 '익명으로 답글달기' 숏컷을 통해 메세지에 익명으로 답글을 달 수 있습니다. 여기서 메세지는 익명이어도, 익명이 아니어도 괜찮습니다.


위 버튼을 누르면 모달창이 나오고, 그곳에 답글을 작성해 주시면 됩니다.

  • Google Spreadsheets 연동
    익명 질문 채널에 사용될 예정이기에 채널을 관리하시는 분들은 누가보낸 질문 또는 답변인지 확인할 필요가 있습니다. 그래서 일부 공개된 스프레드 시트를 하나 만들고 데이터를 시트에 저장되게 했으며, 관리자 분들만 권한을 드려 해당 데이터를 확인 할 수 있도록 하였습니다.

🧩 진행 중 겪었던 고민 및 어려웠던 점

Bolt와 뜻밖의 Websocket

  • 처음 이 프로젝트는 express와 router를 이용하여 진행할 계획이었습니다. 처음 접해보는 express, router 였지만 그동안 Node.js로 만든 서버 예시코드를 봐왔기 때문에 금세 적응했습니다. 그렇게 숏컷을 만들던 도중 Bolt라는, Slack에서 제공하는 라이브러리를 만나게 되었고, 미리 익혀두면 후에 다른 봇을 만들 때 더욱 편리할 것 같다는 욕심에 진행을 정지하고 전체적인 아키텍처에 대한 고민을 하게 되었습니다. 기본적인 웹 서버 구축 경험이냐 Slack 봇을 위한 서버 구축 경험이냐 사이에서요.
    결국 기본적인 웹 서버 구축은 무엇이로든 만들어 볼 수 있고, 프로젝트의 본질 중 크게 작용했던 것이 봇을 통한 협업 및 자동화였기 때문에 Bolt를 이용하여 봇에 특화된 서버를 만들기로 결정했습니다. 그 과정에서 기술문서를 파헤치고 필요한 가이드를 찾아 만들기도하며 처음으로 Websocket을 이용하는 서버도 만들었다는 점에서 좋은 선택과 좋은 경험이었다고 느낍니다.

/slack/install

  • 보통 bolt 앱을 만들고 나면 (앱 배포 주소)/slack/install로 설치 리디렉션 링크 버튼을 제공하는데, 로컬 서버에서는 잘 동작하지만 배포 후에는 오류페이지가 뜹니다. 다행히 로컬 서버를 통해 생성된 버튼도 잘 동작해서 이용하는데는 문제가 없었지만 해당 문제는 아직 해결하지 못한 상태입니다.

🤔 프로젝트 회고

아쉬웠던 점

  • NoSQL 사용법 미숙
    채널을 Key로, 메세지(질문)을 Value로, 그리고 메세지를 Key로, 코멘트(답글)를 Value로 하여 저장하면 되겠다! <- 이렇게 트리 구조를 생각하여 NoSQL을 택하게 되었지만 실제로는 이렇게 구현하지 못했습니다... 인터넷을 뒤적이면서 이렇게하는 건가? 하고 만들고 보니 뭔가 RDB를 쓰는 것처럼 설계를 해놨더군요. 이것을 깨닫고 NoSQL에 대해서 더욱 공부하게되는 계기가 되었습니다.

  • 단일 사용자
    모 부트캠프에서 이용할 수 있게 개발하는 것이 목적이기 때문에 외부공개는 계획에 없었으나 다른 팀, 다른 채널에서도 이용하면서 서로의 질문, 답글 데이터를 조회할 수는 없는... 그런 독립성이 개선되어 공개로 운영될 수 있는 봇이면 더 좋았겠다고, 구글 스프레드시트 연동을 끝내고 생각하게 되었습니다. 스프레드시트를 이용하는 동안, 채널 별로 데이터를 나누는 것은 문제없지만 각 채널간 데이터를 숨기는 방법은 스프레드시트라는 범주에서 당장 답이 나질 않더군요. 후에 대시보드가 완성이되면 백엔드에 유저 인증도 추가하여 위와 같이 운영해보고 싶은 마음입니다.

배우고 느낀 점

  • 자동화와 나의 성장
    언젠가 한 번 이런 피드백을 받은 적이 있었습니다.
    "개발자가 지망이면 자동화 툴을 개발하는 것에 좀 더 관심이 있으실 줄 알았어요."
    거의 일 년 전에 들었던 이야기인데, 이 피드백을 받을 당시에는, 무언가를 만들어내는 프로젝트는 안드로이드로만 겨우겨우 할 수 있는 정도였습니다.
    하지만 지금 일 년이 지나고 실무에서 협업을 위한 자동화 봇을 만들길 꿈꾸며 이 프로젝트를 진행하고나니 그래도 그 때보다는 꽤 성장했구나를 느끼게 되는 것 같습니다.
    취준 기간이 길어지면서 정체감 같은 기분을 자주 느끼게 되는 요즘인데, 기술적인 성장으로도 정신적으로도 다시 일으켜주는 프로젝트 였던 것 같습니다.

이번 프로젝트를 다루며 새로 배운 스택과 라이브러리

Back-End
Node.js, Express.js, MongoDB, Mongoose, (@slack/bolt), (Google Spreadsheets)

Dev-ops
Heroku

profile
복잡한 비즈니스 로직을 최선의 방법으로 풀어나가는 것을 좋아해요
post-custom-banner

0개의 댓글