본문 바로가기
개발일기

Merlin Bot 프로젝트 마무리 _ Sparta 17th WIL 2020.04.09

by 몸에배인매너 2022. 4. 7.

내가 맡은 파트는 Time Recorder 기능 이었다.

프로젝트를 시작하기 전까지는 디스코드 봇이 무엇인지도 몰랐지만, discord API를 열심히 뒤져가며 APP의 동작원리에 대해 경험해볼수 있었던 기회였다.

최종 목표 테크트리

Time Recorder 기능 (출퇴근 기록부)

출퇴근 정보와 시간 정보를 어디에 저장할 것인가에 대한 의논은 그리 길지 않았다.

주 사용 고객층이 기업과 소상공인을 위한 봇 이었는데, 그렇다면 사용자가 이 데이터를 확인할 때 기업에서 많이 사용하는 파일 형식인 Excel 파일로 보는 것이 친숙할 것이고, Excel의 데이터 형식은 관계형 데이터베이스 형태인데 이는 출퇴근 기록부와 어울리는 형식이다.

discord API의 작동 방식에 대한 이해가 필요하였고 작동 방식을 이해하는 데 시간이 꽤 소요되었다.

문제는 공부하는 과정에서 discord API도 계속해서 개발이 진행되고 있는 API이기 때문에 구버전의 코드와 최신버전의 코드가 바로 호환이 안 되는 문제 때문에 팀원들과의 정보 공유가 필요한 시점이었다.

그리고 동시에 ExcelPython으로 작성하기 위한 라이브러리도 찾아보아야 했다.

처음 Excel을 작성할 때 XlsxWriter을 사용하였는데, 알고 보니 XlsxWriterExcel 파일을 작성하여 생성하는 기능만 있고, Excel 파일을 수정할 수 있는 기능이 없었다.

출퇴근 기록은 중간중간 계속 수정을 해주어야 해서 다른 라이브러리도 찾아보아야 했고, 여러 가지 라이브러리가 있었는데 가장 흔하게 사용하는 openpyxl을 사용하여 정보의 추가가 가능해졌다.

직원기록부 탭에는 전날 Excel 파일의 데이터를 읽어와 근무 횟수와 총 근무시간 정보가 누적된다.

 

디스코드 봇에 대해 알아보면서 신경이 쓰였던 부분이 명령어를 이용한 사용법인데, 개발자들에게는 이러한 CLI 방식이 익숙할지 모르지만, 일반 사용자들에게는 이러한 사용법이 익숙하지 않을 것이라 본다. 무엇보다 내가 명령어를 외워서 써야하는 번거로운 툴은 배우기가 귀찮아서 사용하질 않는다.

다행히 디스코드 봇의 API가 지원하는 기능이 생각보다 많았고, discord Button을 활용한 버튼을 구현하여 사용자 친화적인 GUI형태로 만들고자 하였다.

이미 출근이나 병결, 외근 처리가 되면 다른 버튼을 눌려도 기록되지 않는다.

 

마지막으로 출퇴근 기록부를 사용자가 어떻게 받아볼 것인가에 대한 좋은 아이디어를 팀장이 내주었는데 바로 구글 스프레드시트를 활용한 업로드 방식이다. 이 문제에 대해서는 나중에 따로 얘기해볼 것인데, 결론적으로는 Google APIoauth 토큰을 각 사용자가 발행하는 과정에 있어서 어려움이 있었다.

결국은 시간적인 문제로 보류하게 되었고, 엑셀 파일을 바로 다운로드받아볼 수 있게 하는 방향으로 진행하였다. 서버 안에서 파일이 관리되는 것은 비효율적이기 때문에, 외부 스토리지를 활용하였는데, 바로 AWSS3 기능을 활용하여 사용자의 작성된 Excel 파일을 이 클라우드 스토리지에 저장시키고 그 서버에 맞는 파일을 내려받을 수 있게 하였다.

 

Heroku 서버 운영

디스코드 봇은 이미 만들어져 배포되고 있는 봇만 수십개가 넘는다. 그 많은 봇들중 대부분의 봇이 Heroku를 이용하여 배포되고 있다. 우리는 단순 호스팅만 해주면 되었기에, Heroku는 내 프로젝트를 바로 띄워줄 수 있고, 필요한 패키지를 자동으로 설치해 준다. 그리고 손쉽게 GitHub와 연동이 가능하고 무엇보다 Heroku무료.

다른 문제로, 결국 중단되었지만 Google API 사용할 때 필요한 토큰을 빠르게 꺼내쓸 수 있도록 MySQL을 이용하여 AWSRDS에 저장하였는데, Heroku에선 RDS에 바로 접근할 수가 없게 되어있었다.

heroku Can't connect to MySQL server on '' (timed out)

찾아보니 RDS SSL root 인증서를 사용해 연결하거나, 더 쉬운 방법으로는 Heroku에 MySQL 애드온을 추가해 사용하는 방법이 있다. oauth 계정 문제가 해결되지 않아서 더 알아보진 않았는데, 다음에 Heroku를 사용하게 된다면 이 부분에 대한 검토가 필요해 보인다.

 

Google API Calendar

Google API 를 사용하면서 제일 이슈가 되었던 건 OAuth 클라이언트 ID 이슈 였다. 

 

구글 API를 통해서 배우는 인증 (oauth 2.0) - 생활코딩

수업소개 API를 사용하는데 큰 걸림돌은 인증입니다. 사용자에게 최적화된 서비스를 제공하기 위해서는 그 사용자의 정보에 접근할 수 있어야 합니다. 많은 서비스가 인증을 위한 방법으로 oauth

opentutorials.org

 

OAuth2 인증 방식에 대해 알아보자.

OAuth2 인증 방식을 Google 서비스를 예제로 알아보자.

velog.io

먼저 oauth 의 인증원리에 대해서는 이해를 했지만 기본적으로 웹서비스를 예시로 보여주기 때문에, 제대로 이해해서 JWS까지 써먹기엔 역부족 이었다. 어떻게든 방법을 찾아보려고 하는 것 보다, 그냥 한번 Web Framework로 구현해 봤어야 했다. 그러면 그 이해를 바탕으로 내 프로젝트에 응용해 적용해 볼 수 있었을 것이다.

 

실제 구현된 형태

이번 작업에서 느꼈던 건 처음 구현해 보는 기술이 어려울 땐 베이직한 형태를 따라서 구현해 본 뒤 내 프로젝트에 맞게 응용해보는 게 오히려 빠른 방법일 수 있다는 깨달음을 얻을 수 있었던 프로젝트였다.

댓글