본문 바로가기
결과물

백엔드 개발자 기술면접 대비 디스코드 면접관 봇 만들기

by 황원용 2023. 3. 16.
728x90

https://github.com/wonyongg/discord-interviewbot

 

GitHub - wonyongg/discord-interviewbot: 효율적인 기술면접 대비를 위한 디스코드 봇을 만드는 중입니다.

효율적인 기술면접 대비를 위한 디스코드 봇을 만드는 중입니다. Contribute to wonyongg/discord-interviewbot development by creating an account on GitHub.

github.com

📌 코드나 자세한 사용 방법 등은 깃허브에서 확인 가능합니다.

 

 

❓만들게 된 이유

 지난달 부트캠프를 수료하고 나서 곧바로 이력서를 작성하기 시작함과 동시에 기술 면접 공부를 시작했다. 부트캠프 특성상 단기간에 많은 내용을 알려주기 때문에 기초 CS 지식을 비롯한 자바, 스프링 관련 이론을 배우긴 했어도 머릿속에 많이 남아있지 않았다. 물론 동기분들 중에는 짧은 기간에 효율적인 공부로 이미 많은 내용을 숙지하고 계신 분들도 종종 보였지만 나를 포함한 대부분의 동기분들은 그렇지 못했다. 특히 나 같은 경우는 스스로를 생각해 볼 때 단순 암기에 강하긴 하지만 이해가 필요한 내용은 내 것으로 만드는 데에 남들보다 오래 걸리는 편이다. 이것을 알기 때문에 기술 면접과 같은 일정 범위에서 나오는 내용에 대해 공부를 하고 이를 테스트하기 위해서는 보다 효율적인 방법이 필요했다.

 

 중학교 시절 영어단어를 암기할 때 랜덤으로 단어 질문을 던져주는 컴퓨터 프로그램을 통해 공부한 적이 있다. 당시 다니던 영어 학원에서 여름방학을 맞이하여 영어 단어 암기 대회를 열었는데 그때 3등 안에 들면 문화상품권을 주었다. 당시에 메이플스토리 등 온라인 게임에 이른바 현질을 하고 싶었지만 엄마의 강한 반대로 못하고 있었기 때문에 반드시 3등 안에 들겠다고 결심하고 해당 프로그램을 통해 공부하여 1등을 한 적이 있다. 이때 컴퓨터 프로그램을 활용하여 공부하는 것의 위력을 실감했기 때문에 지금 나의 상황에 똑같이 적용해 보기로 했다.

 

 기술면접에 자주 나오는 질문을 모으고 파트별로 나눠 질문을 해주거나 전체 랜덤 질문을 던져주는 프로그램을 만들어보기로 하고, 나 이외에 동기분들에게도 공유하고자 부트캠프에서 커뮤니케이션 및 공지 전달용으로 사용했던 디스코드를 활용하여 디스코드 면접관 봇을 만들기 시작했다.

 

 

👨🏻‍💻 만들기 도전

 일단, 단순하게 생각해 봤다. 디스코드 봇을 만들려면 디스코드 API를 사용해야 할 것이고.. 디스코드 봇 관련 개발에 필요한 외부 라이브러리가 있지 않을까 생각했다.

 

<자바용 디스코드 API JDA>

 역시 있었다. 그런데 문제가 발생했다. 디스코드 봇은 보통 파이썬으로 많이 개발하여 자바로 개발한 사람들이 정리한 자료가 많지 않았다. 처음에는 파이썬으로 개발할까 했지만 내가 자바를 배웠는데 그냥 자바로 해야지 하고 생각하여 자바로 구현하기로 했다.

 

 외국에서 아주 유명한 Baeldung 블로그에서 Discord4J와 스프링 부트를 활용하여 디스코드 봇을 만드는 법을 찾았다.(관련 링크)

그런데 문제는 무작정 따라 해 보니 잘 돌아가지 않았다. Discord4J와 JDA 중의 차이점과 뭘 써야 하는지 모르는 상태에서 너무 막무가내로 따라 했나 생각이 들어 여러 외국 유튜브와 스택오버플로우 등의 글을 보며 공부하고 시도했지만 계속 실패했다. 정확히는 봇을 생성하는 데는 성공했지만 봇에게 명령어를 입력하면 아무런 응답이 없었다. 디버깅을 해보니 아예 데이터도 들어가지 않았다.

 

 

<Discord4J와 JDA에 대한 chatGPT의 답변>

 처음부터 다시 시작하고자 했다. chatGPT에게 두 라이브러리에 대한 차이점을 물어보고 최종적으로 플랫폼과의 상호 작용을 더 많이 제어할 수 있는 JDA를 사용하기로 결정했다. 

 

 

🚒 문제 해결

 나중에 알게 된 사실인데 디스코드 개발자 포털에서 게이트웨이 관련 설정을 ON 해주지 않아서 생긴 문제였다. 하여간 보통 왜 안되지 싶으면 정말 어이없는 곳이 문제였던 경우가 많다.

 

 

🤖 결국 뚝딱뚝딱해서 만든 나의 디스코드 면접관 봇

<디스코드 면접관 봇>

 지금 현재는 큰 카테고리를 통해서 혹은 전체 랜덤 질문을 받을 수 있다. 몇 가지 개선해야 할 사항이 있는데 이 부분은 미루다 미루다 결국 3주나 지나버렸다. 이번 주말에는 꼭 끝낼 생각이다. 

 

 

📝 간략한 코드 설명

 configuration과 서비스 계층을 분리하여 설계했다. EmbedService는 디스코드 봇 초대 시에 받을 수 있는 메시지를 설정할 수 있고, InterviewService는 인터뷰 질문과 관련된 로직이 들어있다.

 

Configuration

디스코드 개발자 포럼을 통해 내가 만든 봇의 토큰을 받아 코드에 넣어 연결하는 방식이다.

jda와 봇의 기본 설정과, 어떤 이벤트를 감지할 것인지에 대한 설정을 했다.

 

 

🔥 주변 동기들의 반응

 여러 동기분들에게 공유하고 좋은 반응을 받았다. 비록 간단한 프로그램이지만 다들 내가 만든 프로그램을 다수가 만족하며 사용하고 있다는 사실이 매우 기뻤다. 나 역시 현재 기술 면접 대비를 위해 매일 사용중이다. 작은 시작이지만 개발에 대해 큰 재미를 느낀 순간이었다. 

 

 

🛠️ 개선해야 할 사항

GithubActions를 사용하여 배포 자동화(2023.03.18 완료)

 현재는 AWS EC2에 직접 접근해 pull 받는 방식으로 업데이트를 진행하고 있는데 매우 개발자스럽지 못하다. GithubActions는 메인 프로젝트에서 사용해 봤기 때문에 복습한다는 생각으로 배포 자동화를 통해 배포할 생각이다.

  • 2023년 3월 18일에 배포 자동화를 끝냈다. 이제 코드 수정 후 깃허브 main 브랜치에 머지하면 자동으로 EC2에 변경 사항이 업로드 된다.

 

구글 스프레드 시트 or 노션 API를 통해 데이터베이스 변경

 현재 코드는 Text 파일을 읽어 콜론(:)을 기준으로 [대 카테고리][소 카테고리][질문 내용]으로 배열에 저장할 수 있게 만들고, 질문 내용만 각 질문 객체 배열에 나눠 담는 방식을 사용하고 있다. 그러나, text 파일을 데이터베이스로 이용하는 방식은 보기에도 불편할뿐더러 데이터를 추가하는 작업 역시 힘들다. 구글 스프레드 시트나 노션의 데이터베이스에 저장하고 바로 가져오는 방식으로 변경할 예정이다.

  • 2023.03.20 기준 노션 API  적용 실패  👉🏻  블로깅 링크
728x90

'결과물' 카테고리의 다른 글

트위틀러 만들기 후기  (0) 2022.08.25