2026. 1. 19. 00:29ㆍ개발일지
wasureta 보수하기
wasureta를 기숙사에서 돌리다가, 뽑은 이후로 코드도 꼬이고 보수도 할 수 없게 되어서 다시 짜기로 했다. 다시 본 1년 전 코드는 객체지향이라는 개념을 이해하기 전이라 그런가 개판이었다. 이제 막 프로그래밍을 배우려는 사람이 있다면, 제발 뭘 제대로 만드려고 마음먹기 전에 객체지향을 배우고 시작하라고 말하고 싶다.
객체지향으로 짜기 시작하니까 프로젝트를 개발하는 속도가 압도적으로 올랐다. 1년 전에는 거의 2~3주에 걸쳐서 저걸 완성했는데, 8일 만에 완성했다. (3주 뒤에 입대라 타임어택이 있긴 했다.) 다시 wasureta를 개발할 때, 음악봇은 속도가 중요했다. supabase를 사용을 기존에 했는데, 응답속도에 약간에 지연이 있기에, 다시 로컬 mysql로 돌아가기로 결정했다.

또, 나중에 까먹지 않기 위해서 나름대로 클래스 구조도도 그려봤다. 이런 명세를 뽑는 방식이 공식적으론 많이 틀린 거 같긴 한데, 나중에 내가 코드를 이해할 때 없는 거보단 훨씬 편하겠지 하면서 썼다. 개발 전에 그렸던 클래스 구조도에 비해서, 개발하면서 조금씩 바꿔서 많이 달라지긴 했는데 원래 개발은 그런 거 같다.

군대 가면 봇이 뻗었는지 조차 모르기에 오류메시지를 모아서 매일 자정 내 email로 전송하는 기능도 추가해 봤다. Docker로 빌드 할 수 있도록 다음과 같이 만들었다. 도커는 버전을 바꿀 때마다 container를 갈아치우기 때문에, 데이터베이스는 호스트 컴퓨터의 메모리 자리인 Volume을 이용한다고 한다.
하지만, 이렇게 해서 내 라즈베리파일에서 docker로 봇을 돌려보니까, 음악재생이 버벅거렸다. 컴퓨터 사양이 안 좋은 상황에서 어쩔 수 없는 거 같다. 결국 local로 빌드하는 방식으로 현재 운용 중이다. (입대 전 날 mysql연결이 끊기는 문제를 살짝 해결하고 가긴 했는데 제발 문제없었으면 한다.)
또한, 라즈베리파이에 저 프로그램을 시작프로그램으로 등록시켜서 전원만 공급되어 켜져만 있다면 봇이 작동하지 않을까 싶다.
로컬로 라즈베리파이를 돌릴 땐 가끔 버벅거리는 문제가 있었는데, 랜선을 꼽아서 유선으로 해주니까, 거의 안 끊긴다. 난 라즈베리파이의 컴퓨터 사양이 문제인 줄 알고, N100기반 미니 pc를 구매할까 고민했지만, 안 하길 잘한 것 같다. 아마 무선랜의 네트워크 문제였던 것 같다.
많은 서버에서 버티진 않을 거 같지만, 혹시 이 봇을 사용해 보고 싶다면, wasureta추가하기
그리고 코드는 깃헙에 올려놨다.
https://github.com/SodiumD5/discord_bot_wasureta
GitHub - SodiumD5/discord_bot_wasureta
Contribute to SodiumD5/discord_bot_wasureta development by creating an account on GitHub.
github.com

원래 있던 거 군대가는 버전으로 nano banana로 하나 만들어서 변경해놨다. (훈련소 끝나면 원본으로 바꿔야지)
출근부 앱 보수하기
부모님이 출근부 앱을 만들어달라고 하고 나서, 지금 보니까 pdf다운로드 기능이 잘 안 된다 하셨다. 그리고, 내가 군대 가있는 동안 백엔드 서버가 꺼지면 안 되는 문제도 존재했다. 백엔드 서버는 koyeb에서 무료 계정을 이용 중이기에, 3개월마다 꺼지는 문제를 가지고 있다.
또한, DB응답시간도 거의 3초는 걸렸었다. 지금와서 생각해 보니 데이터를 가져오는 과정이 엄청나게 길었다.
사용자(한국) -> koyeb서버(미국) -> supabase(한국) -> koyeb서버(미국) -> 사용자(한국)
으로 거의 한 세월은 걸리는 것 같았다. 다시 알아보니, DB접근 로직도 react native에서 처리할 수 있었다. 프런트에서 요청을 하고 supabase rpc가 데이터를 주는 방식으로 하면 backendless로 개발을 할 수 있다.
사용자(한국) -> supabase(한국) -> 사용자(한국)
이 되므로, 1초 정도만에 랜더링이 되는 거 같아서 크게 개선된 거 같다.
로컬 mysql을 쓰고, 서버를 돌려서 wasureta와 같이 라즈베리파이에 넣기엔 이 프로그램은 진짜 멈추면 큰일인 현업 프로젝트기에, supabase를 쓰고 서버리스로 가기로 했다.
로컬인증에서 supabase google auth

기존에는 로컬 jwt를 통해서 관리자 인증을 받는 방식이였다.방식이었다. 이 방식으로 인해 모든 관리자 api의 경우 인증 인터셉트를 해서 확인하는 방식이었다. 하지만, 이 방식으로 인해 아마 pdf다운로드 기능이 뻗은 거 같다고 생각한다. 또한, 급하게 만든 jwt방식으로 인해서 보안에 물음표가 있기도 한 상황이었다.
친구를 통해서 supabase에 구글 로그인을 지원한다는 이야기를 들었다. 알아보니 그렇게 어렵지 않았다. 구글 로그인이라 하니 뭔가 더 있어 보이는 것과, 앱을 나갈 때마다 로그인을 다시 해야 했던 기존과 달리 오히려 한 번만 로그인하면 기록이 남아서 계속 쓸 수 있는 것도 큰 장점이었다. 참고영상
pdf 다운로드 개선
기존에는 웹뷰 대신 html을 브라우저에 띄워주는 방식인 "웹으로 보기"기능과 그 html을 pdf로 변환하여서 "pdf다운로드"기능을 구현했었다. 근데 그 웹으로 보려면 jwt인증이 겹치면서 버그가 있어 다운로드가 안 되고 웹으로 열리지도 않았던 것 같다.
기존에 가로로 볼 수 있어서 브라우저로 띄워주도록 하던 것을 포기하고 웹뷰를 쓰기로 타협했다. 그리고 형식이 안 맞아 웹으로 보기와 pdf의 html을 따로 쓰기로 했다. 핸드폰 사이즈에 따라서 pdf가 이상해지는 문제도 있었는데 어떻게 해결했다...
사실 여기까지 하면서, 점점 현타가 오기 시작했다. waureta를 만들 땐 sql만 llm에게 맡겼지만, 이쯤 와서는 거의 gemini에 뇌를 줘버렸다. 바이브 코딩은 진짜 현타 오는 거 같다. 결국 나는 하는 게 없고 그냥 뇌가 썩는 기분이다. 시간이 얼마 안 남아서 어쩔 수 없었다.
이 글은 입대 하루 전에 아니 12시 넘었구나 오늘이네 썩을... (그만큼 시간이 없어서 어쩔 수 없었다. 현타가 오기 전에 나는 국가에 의해서 간다.)
아무튼 저 프로젝트도 깃헙에 올려뒀다.
https://github.com/SodiumD5/AttendanceApp
GitHub - SodiumD5/AttendanceApp
Contribute to SodiumD5/AttendanceApp development by creating an account on GitHub.
github.com
P.S.

진행도를 time.time()으로 수동으로 체크하고 있었는데, 저거 버그 있었는데 까먹었다 이제 기억났다. (입대 12시간 전...)
'개발일지' 카테고리의 다른 글
| React Native textinput 입력 안 되는 버그 (1) | 2026.01.19 |
|---|---|
| 나의 첫 앱 개발 프로젝트 - 출근부 앱 개발기 (0) | 2026.01.10 |
| 음악재생 디스코드 봇, wasureta 개발기2 (0) | 2026.01.10 |
| 음악재생 디스코드 봇, wasureta 개발기1 (0) | 2026.01.10 |