음악재생 디스코드 봇, wasureta 개발기2

2026. 1. 10. 13:24개발일지

사실 거의 1달 반이나 지난 일인데, 별 쓸 말이 없을 거 같아서 안 쓰고 있다가 이제 써 보려고요. 지난 개발기에서 이어져요.

 

 

wasureta 수정

1. 문제점 발생

라즈베리파이에 로컬 MySql을 쓰다보니, 유지가 쉽지가 않았어요. 무엇보다 로컬 MySql을 쓰면서 생긴 문제점으로는, 추가하고 싶은 기능이 생겨서 pc에서 작업 한 뒤에, PC MySql의 테이블에 변화가 생기게 되면, github으로 코드를 주면서 그 테이블 변화도 똑같이 적용시켜야 한다는 점이였어요. 그러다 몇 번 까먹고 코드만 업데이트하고 DB테이블은 그대로 두게 되니까 봇이 멈추고 버그가 나는 일이 잦아졌어요.

결정적으로는, 1학기에 기숙사 퇴실하면서 라즈베리파이 전원을 안 끄고 그냥 플러그를 뽑는 비정상 종료를 해버렸어요. 그 상태에서 집에 와서 왜 안 되지 하면서, 메모리에 있는 txt파일을 수정했더니 그냥 맛이 가버려서 라즈베리파이를 초기화했어요. 그러면서 MySql도 같이 날라갔죠.

 

 

2. 대안

이제 슬슬, 로컬 DB에 질리기 시작했어요. 그 때, Supabase라는 온라인 DB를 알게 되었어요. 확실히, 내 실수로 DB를 날리는 일이 없을 테고, 실제 실행중인 것과 개발용 봇으로 나눴는데, 같은 DB를 참조 할 수 있어서, 세팅을 2번해야하는 번거로움을 줄일 수 있게 되었죠.

또한, 도커를 사용하기로 했어요. 라즈베리파이를 새로 깔면서 의존성을 다시 맞추기에는 골치가 아파졌는데, 도커의 컨테이너로 빌드를 하면, github로 옮길 필요도 없이, 실행 명령어만 입력하면 미리 세팅해둔 의존성 대로 실행이 된다는 것이 엄청난 장점이 있어요!

 

 

3. 개발

우선 DB연결하는 파일 부분은 싹 바꿨어요. supabase로 하는데, 문법은 오히려 sql보다 더 간단한 거 같은 느낌이 들었어요. 또, supabase의 엄청난 장점 중에 하나가 rpc를 이용할 수 있다는 것이예요. rpc는 sql이 여러 줄 필요한 복잡한 작업을 요하는 것을, 홈페이지에서 미리 정의 해 둔 다음에 그걸 불러서 쓸 수 있는 기능이예요.

top_data = supabase.rpc("show_server_ranking", {
    "p_server_id": server_id,
    "p_limit" : 10,
    "p_start_index" : 0
}).execute()

이런식으로, 미리 지정 해 둔 것을 불러서 쓸 수 있어요.

이거 바꾸는데 매우 애를 먹었어요. 왜냐면, 저 코드를 쓸 당시 저는 객체지향 프로그래밍을 어떻게 써야하는 지 몰라서, 그냥 리스트에다가 다 넣어버렸고, 몇 번 인덱스에 뭐가 있는 지를 까먹었기에 수정이 힘들었어요. 구조를 다 바꾸기에는 오래걸릴거고 버그도 날 거 같아서 그냥 리스트에 담는 대신 딕셔너리로 약간 만 수정했어요. 제발, 객체지향적으로 코드를 짜세요 ㅜㅜ

 

 

추가 기능 개발

업데이트를 하면서 추가 기능도 넣었어요.

대충 이런 기능을 구상해서 넣었고, 친구의 제안으로, now-playing과 que를 통합하고 jump기능을 추가했어요.

통합을 하면서 현재 재생된 것을 바 형태로 보여주도록 했어요. 이거도 라이브러리에 기능이 없는 거 같아서, 그냥 노래 시작과 동시에 타이머를 켜서 야매로 했어요 ㅋㅋㅋㅋ

jump기능은 ffmpeg으로는 지원을 안 하는 거 같아서, 이거도 야매로 새로 다운을 받은 뒤, 지정한 위치부터 노래를 다시 재생하도록 구현했어요.

docker

도커는 생각보다 간단해요. 그냥 다운 받아서 로그인 하고, Dockerfile하나만 작성하면 되요. 그리고 그걸 env변수를 넣어서 실행하면 끝이예요.

 

 

4. wasu의 최후...

이번에도 라즈베리파이가 아니라 서버에 올려보려고 시도를 여러번 했어요.

초반엔 공들여서 하나하나 commit하다가 서버올릴 땐, 혹시 하나 바꾸면 될까 하면서 계속 의미 없는 commit 계속 하는게 너무 더럽고 현타와요...

하지만 실패... 아무래도 그냥 유튜브 정책상 막힌 거 맞는 거 같아요. 그래서 다시 라즈베리파이에 docker로 올렸어요. 실행하는건 전보다 편해졌어요. 근데 이상하게 이젠 이상한 버그에 자꾸 걸려서 실행이 중단되버리네요 ㅜㅜㅜ....

저 객체 지향 망한 거는 이제 보내줘야할 거 같아요. 그리고 사실상 서버에 올릴 수 있는 획기적인 방안이 없다면, 라즈베리파이로는 안 될 거 같아요... 결국 터졌군요.

사실 거의 1달 반이나 지난 일인데, 별 쓸 말이 없을 거 같아서 안 쓰고 있다가 이제 써 보려고요. 지난 개발기에서 이어져요.