study assistant
study-assistant
라는 봇의 이름은 assistant
가 보조원
이라는 뜻을 가지고 있어, 스터디 참여자들을 대신해 문제를 공지하는 등 스터디를 보조하는 역할을 반영합니다. 이 봇은 현재로서는 문제 공지 기능만 구현되어 있지만, 앞으로 더 다양한 역할을 맡을 수 있다는 기대감을 담아 assistant
라는 단어를 사용하여 study-assistant
라고 명명했습니다.
디스코드 봇을 사용하여 스터디 운영에 도움이 되고자 합니다.
현재 알고리즘 스터디를 디스코드에서 운영 중입니다. 매주 모임 후, 다음 주까지 풀어야 할 문제 공지를 수동으로 작성하는 데 약 5분이 걸렸습니다. 다른 서버에서 디스코드 봇을 이용해 출석 체크나 자동 응답을 하는 것을 보고, 간단한 슬래시 명령어로 이 작업을 자동화하면 어떨까 생각했습니다. 그래서 이러한 수작업을 줄이기 위한 디스코드 봇 개발을 결정하게 되었습니다.
실제 알고리즘 스터디에 문제를 공지한 메시지
알고리즘 스터디 구성원이 매주 풀어야 할 문제 목록을 정리하여 메시지로 작성하는 작업을 디스코드 봇 study-assistant
가 대신 수행하도록 합니다.
기존에 사람이 수동으로 문제 목록을 작성하던 것을 자동화하여, 이 작업에 소요되는 시간을 절약하고자 합니다.
/문제공지
라는 슬래시 명령어를 입력하면, 봇이 이를 감지하여 문제 목록이 포함된 메시지를 채널로 전송합니다.discord.js
Node.js 환경에서 가장 널리 사용되는 디스코드 봇 라이브러리입니다. 커뮤니티가 크기 때문에, 오류가 발생했을 때 쉽게 도움을 받을 수 있겠다는 생각이 들어 선택했습니다.
googleapis
Google Sheets API를 사용하기 위한 라이브러리입니다.
Git
프로젝트의 버전 관리를 위해 사용하며, 모든 코드 변경 사항을 추적할 수 있습니다.
GitHub
코드 저장소로 사용되어, 협업과 코드 리뷰를 효율적으로 수행합니다.
Sourcetree
Git의 GUI 클라이언트로, 복잡한 Git 명령어를 쉽게 처리하고 시각적으로 이해할 수 있도록 돕습니다.
디스코드 서버
에서 사용자
가 봇
에게 명령어를 입력하면, 이는 Koyeb에 배포된 Docker 컨테이너에서 실행 중인 봇으로 전달됩니다. 봇
은 Google Sheets API
를 통해 필요한 데이터를 가져와 사용자에게 전달합니다.
discord.js
와 googleapis
등의 필수 라이브러리를 설치했습니다./문제공지
): discord.js
를 이용하여 슬래시 명령어를 처리할 수 있는 기본 기능을 추가했습니다.googleapis
를 통해 Google Sheets에서 데이터를 가져오는 기능을 구현했습니다.디스코드 봇을 로컬 환경이 아닌 온라인에서 지속적으로 실행하기 위해 배포를 고민하게 되었습니다. 알고리즘 스터디원들과 함께 사용하기 위해 로컬 환경에만 두는 것은 부적절하다고 판단했기 때문입니다.
디스코드 봇을 배포 문제 해결 과정:
“How to deploy my Discord bot for free"
와 같은 키워드로 배포 방법을 검색했습니다.study-assistant 깃허브 리포지토리 보러가기
study-assistant
라는 디스코드 봇을 개발하고, Koyeb 플랫폼을 통해 무료로 배포했습니다.
문제 공지: 사용자가 /문제공지
슬래시 명령어를 입력하면, 봇은 다음 주에 풀어야 할 문제 목록을 자동으로 메시지로 공지합니다.
이번 주는 알고리즘 스터디 방학 기간이어서, 알고리즘 문제를 푸는 대신 스터디를 도와줄 디스코드 봇을 만들기로 했습니다. 갑작스럽게 시작한 프로젝트였기 때문에, 필요한 기능만 간단히 구현하여 배포하기로 했습니다. 코드 퀄리티나 테스트 코드는 고려하지 않고 빠르게 작업했지만, 완성된 결과물을 보니 뿌듯했습니다.
아직 디스코드 채널에 봇을 설치하지 않았지만, 다음 문제 공지는 이 봇을 통해 할 수 있을 것 같아 기대됩니다. 덕분에 문제 사이트에 일일이 들어가서 정보를 가져올 필요가 없게 되어 작업이 훨씬 편리해질 것 같습니다.
이번 프로젝트를 통해 배운 것은 다음과 같습니다:
이번에는 Discord 봇을 만드는 것이 목표였기 때문에 코드의 퀄리티에 크게 신경 쓰지 않았습니다. 현재 GitHub 리포지토리에 있는 코드를 보면, googleapi
라이브러리를 사용할 때 필요한 인증 정보를 별도의 모듈로 분리하지 않고 주요 기능이 구현된 코드와 동일한 파일에 정의되어 있습니다. 이를 모듈로 분리하는 등 읽기 쉬운 코드로 정리하고 싶습니다.
또한, 단위 테스트 코드를 작성하고자 합니다. 이번 프로젝트부터 테스트 코드 작성하는 습관을 기르고 싶기도 하고 코드 이해를 도와준다고 생각하여 작성해보려 합니다.
코드 정리가 완료되면, 기존의 JavaScript 코드를 TypeScript로 변환하려고 합니다. TypeScript는 강력한 타입 검사 기능을 제공하여, 코드 작성 시 타입 관련 오류를 조기에 발견하고 버그를 줄이는 데 도움을 줍니다. 그래서 JavaScript를 TypeScript로 전환하고자 합니다.