퇴사를 하고 어언 일주일 정도가 되어갈 무렵 헤이해지는 내 모습을 보게 되었다...
젤리님과 매일 공부시간을 정해두고 달성하지 못하면 패널티를 갖겠다는 약속을 했지만 생각보다 목표 (순수 코딩시간 7시간)를 너무 높게 잡아서 그런지 엄두가 안나서 뭔가 더 헤이해진 느낌이 있었다...

그런 나에게는 자극과 끊임없는 견제가 필요할것 같아서 공부를 안하면 나에게 지속적으로 알림 혹은 리마인딩을 해줄 무언가가 필요하다는 것을 느꼈고 웹서버 or 기타 무언가를 개발해야겠단 생각이 들었다.
여러가지 알아보던 친구들이랑 디스코드 하다가 문득 디스코드 봇을 이용하면 좋지 않을까 싶단 생각에 디스코드 봇에 대해 알아봤다.
일단 내가 상정한 조건은 이러했다.
- 개발 시간이 많이 들어가지 않을 것 ( 가장 중요 )
- 가능하다면 포트폴리오에 넣을 수 있을 것
- 어떠한 방식이던 내게 인지를 시킬 무언가 ( 푸시알람, 메일 등 )
- 가능하다면 친구들도 같이 이용할 수 있도록 할 수 있도록
- 추후에 유지보수가 가능하면 좋겠다.
아래는 위 조건에 맞춰서 생각해 본 표
| 구분 | 웹서버 | 디스코드 봇 |
| 개발시간 | 내가 아는 언어 사용 가능 각종 기능에 대한 설계, 구현 필요 |
내가 아는 언어 지원 ( JS ) 일부 기능 자체 지원 ( 푸시 알림 등 ) |
| 포트폴리오 | 가능 | 애매함 |
| 알림 | FCM 등을 이용해야함 | JS, JAVA, PYTHON |
| 타인도 이용가능하도록 | 가능하지만 보안관련 추가적으로 필요 | 자체 지원 |
| 유지보수 | FCM 등 서드파티에 대한 유지보수 필요 | 키고 끄고만 잘 하면 되는 듯 |
합리적으로 봤을 때 빠르게 개발하려면 디스코드 봇이 좋겠다 싶었다.
특히나 푸시알람에 대해서 안정적인 자체지원이 있다는 점에서 개발시간과 유지보수에서 유리하다는 생각이 들었고
디스코드 이용이 현재 시점에서는 보편화되어 다들 접근하기 용이하다는 점에서 디스코드 봇이 좋다고 결정을 내렸다.
우선 첫 구글링을 해서 블로그 등을 참고하여 첫 삽을 펐는데
대부분의 블로그 글들이
< 디스코드 봇을 만들고 메세지 보내기 >
< 나만의 디스코드 봇을 만들기 >
< 디스코드 봇 >

이런 내용으로 구체적인 내용을 가지지 못하거나 비개발자를 위한 글들이 많았다.
또한 종종 있는 구체적인 내용을 가진 글은 현재의 디스코드 라이브러리의 최신 버전과는 동떨어진 느낌이 있었다.
결국엔 디스코드 라이브러리의 공식문서를 읽으며 진행하기로 했다.
https://discord.com/developers/docs/intro
Discord Developer Portal — API Docs for Bots and Developers
Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.
discord.com
https://discordjs.guide/#before-you-begin
discord.js Guide
Imagine a guide... that explores the many possibilities for your discord.js bot.
discordjs.guide
쉽게쉽게 풀어져 있지만 가이드에 순서가 정해져 있는 느낌이고
원하는 기능을 찾기가 쉬웠지만 활용하는데 있어서 불편함을 조금은 느꼈던 문서였다 생각했지만
적응하니 너무너무 쉬운 문서라는게 느껴졌음..

결국 모든건 나의 숙련도 이슈였다..
내 코딩시간을 받기 위해선 IDE와 wakatime의 연동이 필요한 점,
디스코드에서 활용하려면 wakatime의 api_key 를 받아야하고 DB에 저장해야하는 점에서 좀 걱정이 되어서 찾아보았다.
내가 생각하기엔 wakatime api_key 가 노출될만한 케이스는 이러했다.
- 정보를 제공 받는 도중 (통신중) 통신 데이터가 해커에게 탈취 당하는 케이스
- 사용자의 토큰이 탈취당하여 그동안의 사용자가 했던 로그를 조사하여 api_key 값을 알아 낼 수 있는 케이스
- 봇의 토큰이 탈취당하여 그동안의 사용자들과의 인터렉션 목록을 조사해서 api_key 값을 알아내는 케이스
- 길드(서버) id 를 통해서 해당 길드에 속한 사용자와 봇간의 인터렉션의 로그에 접근할 수 있는 케이스
- 사용자 정보를 보관하는 서버측 DB가 탈취당한 케이스
https://rehack.com/cybersecurity/are-discord-messages-encrypted/
Are Discord Messages Encrypted? How Safe is Discord? - ReHack
Are Discord messages encrypted? Read all about Discord's privacy and security measures to make sure your information is secure.
rehack.com
1번의 케이스에 대해서 보호 가능한 종단간 암호화 지원이 되어있길 바랬지만 디스코드는 데이터 전달에서 https로 통신하지만 종단간 암호화 (E2EE)를 지원하지 않는다.
뭐 사용자와 봇의 통신간에 탈취당하는건 discord 측의 문제니까 제껴두고
2번도 사용자의 부주의니 사실 책임 소재가 있진 않고..
3,4,5번의 경우가 나의 책임 소재가 될텐데
3번의 경우 아래의 소나소스라는 스위스의 오픈소스 업체에서 정리한 방식을 보면
소스에 하드코딩을 하지 않고 os의 환경변수로 빼서 한다.
라는 내용이었다. 나는 애초에 .env (환경변수) 로 빼두어 개발하였기에 문제 없었고
https://rules.sonarsource.com/secrets/tag/cwe/RSPEC-6708/
Secrets static code analysis | cwe
Unique rules to find Vulnerabilities in your source code and language agnostic config files
rules.sonarsource.com
4번의 경우 디스코드 측에서 당연하게도 막아 두었다..!
5번의 경우 일단 AWS RDS를 쓰고있긴하고 프라이빗 VPC에 두고 보안설정 잘하는게 베스트 같긴한데 프라이빗 VPC는 사용해보니 비용적인 면에서 백수인 나에게는 으마~~ 으마~~ 해서.. 일단 환경변수에 존재하는 키 값으로 AES256 암호화를 해둔 채로 DB에 저장중이다.
또한 다이나믹 쿼리 사용 시 prepared statement 방식을 지원해서 해당 방식을 사용중이기에 이정도 선에서 마무리하는게 좋다 싶다..
보안은 끝이 없으니 ㅠ..
https://blog.naver.com/skinfosec2000/220482240245
[SQL인젝션] Prepared Statement를 쓰면 SQL 인젝션 공격이 되지 않는 이유는?
Prepared Statement의 내부 원리 개요...
blog.naver.com
서버 ID 를 통해서 무언가를 하는데 제약이 많이 걸려있었는데 보안으로 인해 그랬구나 싶었다.
아무튼 개발, 배포, 보안 적정선에서 완료 하였고 결과를 보자면
서로 자극이 되면 좋겠다 라는 생각으로 랭킹을 만들게 되었고 30분주기로 푸시알람이 온다..
생각보다 학습 시간이 없다고 뜨면 죄책감이 많이 드는 편...

아래는 wakatime의 시간 기록인데

1주 총 7시간 -> 총 32시간 이라는 결과를 이뤄냈다..
의지박약을 스스로 해결한거같아 뿌듯하긴한데 (이게맞나..?)
예전부터 해보고 싶던 디스코드 봇을 다뤄본것도 괜찮은 경험이었고
RDB 를 다뤄서 하는 첫 사이드 프로젝트이기도 하며 트리거, 함수, 크론탭 등을 다룰 기회가 생긴것에 짧지만 얻은건 많은 느낌이었달까..
근데 생각보다 깊은 개발보다는 노가다성 개발이 이뤄지긴한다.. 메세지 하나하나 embed 라는 클래스를 가져와서 각 프로퍼티를 넣어주고 해야하는 번거로움쓰..
공통 함수로 embed를 쉽게쉽게 만들도록 빼도 되긴하는데 아직 뭐 크게 필요한건 아니니까!
꾸준히 유지보수 해보고 친구들이랑 같이 쓸 예정
고럼 이만
코드에 대한건 필요에 따라 올릴 예정!!
문서가 쉬운편이라서 올리지 않아도 괜찮겠지 싶긴하다.
'Back End' 카테고리의 다른 글
| postgresql 테이블 DDL 복사 (0) | 2024.04.11 |
|---|
백엔드는 못말려
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!