지난 이야기
https://koilsdevelopment.tistory.com/5
디스코드 봇 만들기 대작전 (3) - 명령어 목록 출력
지난 이야기 https://koilsdevelopment.tistory.com/4 디스코드 봇 만들기 대작전 (2) - 메시지 출력 응용 지난 이야기 https://koilsdevelopment.tistory.com/3 디스코드 봇 만들기 대작전 (1) - 메시지 출력 https://koilsdeve
koilsdevelopment.tistory.com
지난번에는 오로지 명령어 목록을 출력시키겠다는 일념 하나만으로 별의별 짓을 다 해가며 겨우겨우 목록을 구현해냈다. 솔직히 지난 사태 이후로는 이제 꽃길만 남아있을 줄 알았는데, 어림없는 소리. 나는 오늘도 다시한번 별의별 짓을 다 해가며 고뇌의 시간에 빠져야만 했다.
오늘은 디스코드 봇을 24시간 구동시켜보고자 한다. 이전에는 내가 코드를 실행시키고 있을 때에만 코드가 실행되곤 했는데, 이제부턴 내가 노트북을 켜놓지 않더라도 명령어가 언제든 작동 가능하게 만들어보고자 한다.
[과정]
이 인간이 오늘의 정보를 알아내기까지의 여정이 궁금하다면 이 더보기를 클릭하면 되겠다. 갖가지 오류 케이스들도 많이 존재해서 만약 아래의 정리를 보고도 제대로 진행이 안된다면, 이 과정을 한번쯤은 봐두는 것도 좋을 것 같다.
좋아. 원래 계획대로라면 Heroku를 쓰는게 맞다. 수많은 강좌들에서도 Heroku를 권하고 있고, 나 역시도 이전에 Heroku에 대한 정보를 들었기 때문에 나는 Heroku를 선택하기로 했다.

일말의 망설임도 없이 Heroku로 직행. 처음 보는 신참에겐 그 어떤 정보도 보여줄 수 없다는 듯이 날 막아선다. 어림도 없지. 나는 바로 가입을 속행한다. 후후....
회원가입을 끝낸 후, 나는 바로 Heroku를 사용하고자 설정창에 들어갔다. 하지만 무언가 예사롭지 않은 버튼이 보였다.

Add payment method
어...?
분명 강좌에서는 저런 버튼따윈 존재하지 않았는데, 무언가 이상하게 흘러가고 있었다. 나는 조금 더 자료를 검색해보기로 했고, 알아보니 2022년 11월 28일부로 Heroku의 무료 지원이 종료됐다는 것이다.
아뿔사... 이러면 어떻게 무료로 디코봇을 24시간 돌려야 하지? 일단 나는 Heroku를 탈퇴한다.

함께해서 즐거웠고, 넌 네 갈길을 가라.
나는 여러 자료들을 찾아보던 중 유독 눈에 띄는 두 사이트를 발견했다. 바로 koyeb과 fly.io라는 사이트였다. 둘 다 비슷한 것 같은데, 조금 더 알아보니 fly.io쪽은 초기 결제가 필요하다는 이야기가 보였다. 난 완전 무결의 무료 웹서버를 이용하고 싶었기 때문에 koyeb 쪽을 선택한다.

사이트에 처음 들어가니 로그인창이란 이름의 장벽이 눈에 보인다. 하지만 아무도 날 막을 수는 없으리. 나는 일말의 고민도 없이 회원가입을 진행, 사이트에 들어간다.

가입을 완료한 이후에 자잘한 질문들이 나왔다. 직업이 뭐냐는 둥, 사용하는 목적이 뭐냐는 둥 이런저런 질문들이 나왔다. 원래라면 나는 대학생 신분으로서 Student를 골라야 했겠지만, 그 대신 프리랜서를 신분으로서 선택했다. 어차피 우리 과에서는 개발을 다루지도 않았기 때문이다. 은밀한 카타르시스가 느껴지는 순간이었다.

모든 정보를 기입한 뒤, 드디어 메인 페이지로 보이는 곳에 도착했다. 나는 바로 Create app부터 눌러본다. 이후에 내가 진행한 과정들은 아래 정리에서 자세히 다룰 예정이니 여기선 생략하겠다.
여차저차해서 모든 설정을 끝마무리한 뒤, 나는 본격적으로 서버에 내 코드를 돌려본다. 개발자로서 절대 이루어지지 않는 꿈에 대해 한가지 말해보라면 난 아무런 주저 없이 이 말을 고르고 싶다.
"한 번에 되겠지?"

역시나 에러부터 내뱉고 본다. 에러의 내용은 내 어플리케이션을 찾지 못했다는 것이다. 나는 이걸 이해하지 못하고 맨 아래의 Previous image with name~~ 부분부터 분석하기로 한다.
"아, 설마 Heroku 강좌에 있던 설정 파일이 여기서도 적용이 되는건가?"
나는 이렇게 생각하고, 파일을 다음과 같이 준비했다.

그리고 각 파일의 값들은 아래와 같이 설정했다.



위의 파일 양식은 Heroku에서 구동 시킬 때 기준으로 작성한 파일들이다. 지금 내가 구동하는 사이트가 Heroku였다면 아마 문제없이(솔직히 정말 문제가 없을지는 장담 못하지만) 작동했을 것이다. 하지만 나는 koyeb에서 코드를 돌려보고 있고, 이런게 정상작동하는데 도움이 되리라곤 상상도 못했다.

야무지게 커밋도 해줬다.

모든 준비도 끝냈겠다. 이제 Redeploy를 해본다.

에러. 나는 여기서 직감했다. 또 그 과정이 시작되는구나. 여기서 나는 고통받고 말겠구나.
심지어 이번 에러는 아까와 토씨하나 틀리지 않고 같은 에러가 그대로 출력됐다. 도대체 뭐가 문제일까. 나는 이런저런 koyeb 강좌를 찾아봤고, 그 어떤 강좌에서도 이에 대한 내용은 적혀있지 않았다. 그러다가, 나는 에러창에 있는 주소를 입력해서 공식 문서를 읽어봤다.

아, 여기도 Procfile이 필요하긴 하구나. 그런데 여기는 worker: 가 아니라 web: 으로 적어야 하는구나.
오류의 원인도 찾았겠다, 나는 바로 파일을 수정하기에 이른다.

Procfile도 야무지게 수정해주고, 이제 다시 서버를 돌려본다. 그리고 개발자로서 절대 이루어지지 않는 꿈에 대해 다른 한가지 더 말해보라면 난 아무런 주저 없이 이 말을 고르고 싶다.
"이거 고쳤으니 이제 되겠지?"

에러. 심지어 같은 에러다. 도대체 뭐가 잘못된거지...?
여기서 부끄러운 진심을 하나 고백해보겠다. 위에서 Procfile을 수정해놓고 이를 커밋까진 했는데, 이 수정본을 깃헙 리포지토리에 반영하지는 않았다. 그래서 지금까지 리포지토리에는 코드파일만 덩그러니 남아있는 상태였다. 수치심을 무릎쓰고, 나는 리포지토리에 파일을 반영시킨 뒤 다시 서버를 돌려본다.

에러. 그래도 이전과는 조금 차이가 발생하기 시작했다. 이는 무언가 진척이 이루어지고 있다는 뜻이었다.
Procfile도 고쳤는데 왜 안될까. 나는 에러 로그 저 아래에 적혀있는 예제 사이트로 들어가 언어별 예제들을 뜯어보았다. 이중 내 눈길을 끈 건 fastapi라는 예제였고, 그게 그나마 내가 처한 상황과 가장 유사했다. 해당 파일의 양식대로라면 난 지금 requirements.txt를 완전히 잘못 작성했고, runtime.txt는 필요하지도 않았다.

원인을 알았으면 이제 실행으로 옮겨야지. 나는 해당 예제파일처럼 내가 설치한 모듈들을 작성했다. 그런데 discord.py는 버전을 모르기 때문에 그나마 파이썬 버전이라도 적어서 저장했다. 이때까지만 해도 나는 여기서 파이썬 버전을 굳이 명시해야 한다고 믿고 있었다. 다음은 그 믿음의 결과다.

에러. 파이썬 버전을 찾을 수 없단다.

이번에는 서버가 설치한 최신버전을 그대로 따랐다.

에러. 최신 버전조차 찾을 수 없단다.

그래서 이번에는 버전명 표기도 지워버렸다. 이렇게 하면 서버에서 설치하는 버전을 알아서 따라간다.

에러. 이젠 파이썬을 찾을 수 없단다.
잠깐...파이썬을 찾을 수 없다고...? 이거 설마 파이썬은 적는게 아니라 설치한 모듈만 적는건가?

설마 싶은 마음으로 나는 설치했던 모듈만 적어서 저장했다. 이런 순간은 뭐랄까, 장문의 서술형 30번 문제를 마주했는데, 직접 풀어보니 정답이 생각보다 간단해서 오히려 불안해질 때와 같은 느낌이다. 분명 이렇게 간단하고 짧을 리가 없는데 설마 이게 정답일까 싶은 그 불안감이 엄습해왔다. 그래, 까짓거 아니라고 하면 다른 방법을 찾아야지. 이렇게 생각하면서도 침울한 마음으로 나는 코드를 실행한다.

그런데 짜잔~ 갑자기 코드가 실행됐습니다~
??????????????????????????????
나는 바로 개발자의 심금을 울리는 명대사를 부르짖었다.
"이게 왜 됐지??"
정말로 그 간단하게 적은 내용이 정답이었나보다. 나는 꽤 당황스러웠지만, 아무렴 장땡이었다. 나는 아직 작성한 코드도 별로 없었기 때문에 어찌보면 당연한 결과이기도 하다.

디스코드도 들어가보니, 봇이 제대로 돌아가고 있는게 확인됐다.
유레카!!!!!
나는 기쁜 마음으로 명령어도 작성해보았다.

너무 잘 작동해서 눈물이 나올 지경이었다. 이걸 위해서 꼬박 2시간을 태워먹다니... 나도 아직은 더 공부해야 할 주니어 개발자가 확실하다는 생각이 들었다.
서버는 잠시 구동을 멈춰놓고, 나는 여기서 오늘의 공부를 마무리하기로 했다.
[정리]
잡다한 과정은 넘어가고, 24시간 서버 구동을 하는 방법에 대해 알아보자.
나는 heroku 대신 koyeb이라는 사이트에서 진행했다. heroku의 무료 정책이 2022년 11월 28일 부로 종료되었기 때문이다.
사이트에 처음 접속하면 이런 화면이 반겨줄 것이다. 우선 회원가입 및 로그인을 진행해준다.
이후에는 사이트에서 이런저런 질문을 던지는데, 본인 성격에 맞게 적절히 대답해주자.
회원가입 및 자잘한 과정을 거치고 나면 위와 같은 화면이 반겨줄 것이다. 우리는 여기에 이전에 짜온 코드를 등록해 웹서버에서 구동시킬 예정이다.
화면 중앙의 [Create App +] 를 눌러주자.
기본 세팅
1. Select deployment method
여기서는 어떤 계정에 존재하는 파일을 끌어올 것인지 결정한다. 선택지는 Github와 Docker가 존재하고, 좀 더 편한 곳을 선택해주면 된다. 나는 Github 계정밖에 존재하지 않기 때문에 Github로 결정했다.
2. Import project
여기서는 깃헙에서 프로젝트를 가져올 예정이다. 만약 koyeb 사이트를 처음 이용하는 것이라면 위의 사진과 같이 깃헙 앱을 설치하라고 할 것이다. 이게 실제 프로그램을 설치한다기보다는 깃헙에 koyeb 을 연결하는 느낌으로 이해하면 될 것이다.
하라는대로 진행해준다.
앱을 연결하고 나면 본인의 깃헙에 존재하는 리포지토리 목록이 나온다. 이중에서 본인이 24시간 호스팅하려는 코드가 들어있는 리포지토리를 선택해준다. 참고로 해당 창이 나온 이후에 리포지토리를 새로 생성했다면 이전 과정으로 돌아가거나 새로고침 등을 해야 목록이 갱신되니 알아두도록 한다.
3. Configure service and deploy
3번째 과정이다. 여기서부터는 서버에서 코드를 실행할 때 설정할 갖가지 옵션을 정할 수 있는 곳이다.
Configure Service는 서버의 이름과 사용할 브랜치를 결정하는 곳이다.
Choose your builder는 서버를 빌드할 때 이용할 방식을 선택하는 곳이다. 나는 Buildpack을 선택했고, Buildpack 관련 설정 방법은 아래에 후술하겠다.
Choose your service type은 본인이 운영하고자 하는 서비스 방식을 결정짓는 곳이다. 무료를 택하면 어차피 웹서비스밖에 선택 못하니 웹서비스를 택한다.
Instance는 본인이 사용할 웹 서버의 종류를 결정짓는 곳이다. Standard의 비용도 무척 싸서 고려해볼만 하지만, 나는 간단한 명령어 봇을 굴릴 예정이기 때문에 완전 무료인 Eco를 선택하겠다.
Regions는 본인의 서버가 사용할 회선 국가를 결정하는 곳이다. Eco는 미국과 독일 중에서만 선택할 수 있다.
App은 앱 이름을 결정짓는 곳이다. 이 이름대로 도메인이 생성되는 듯 싶은데, 지금 여기서는 크게 중요하지 않으니 넘어가도록 하겠다.
여기까지 설정을 마무리했다면 화면 최하단에 있는 Deploy 버튼을 누르면 된다.
여기서 그대로 빌드를 하면 아마 에러를 뱉을 것이다. 왜냐하면 우리는 Buildpack 관련한 설정을 하나도 하지 않았기 때문이다. 지금부터는 그 설정을 하는 방법에 대해 논해보도록 하겠다.
Buildpack을 위한 준비
사실 별거 없다. 파일 몇가지만 생성해주면 끝이기 때문이다.
먼저, requirements.txt 파일과 Procfile 파일을 생성해준다. 여기서 중요한건 Procfile은 확장자가 없다는 것이니 주의하도록.
requirements.txt 파일에는 디스코드 봇을 만들기 위해 윈도우 cmd에 설치했던 모듈을 적어주면 된다.
나는 pip install discord.py의 방법으로 discord.py만 설치했기 때문에 위의 이미지대로 작성 후 저장했다.
다음으로 Procfile이다. Procfile에는 서버가 실행할 명령어를 적어주는 곳이다.
web: 실행할 명령어
의 양식에 맞춰서 작성 후 저장해주면 된다.
나는 디스코드 봇 코드파일을 실행해야 하기 때문에 이미지처럼 web: python bottest.py의 형식으로 작성했다.
그리고 이들 파일을 디스코드 봇 코드가 존재하는 리포지토리에 업로드해준다.
최종적으로 리포지토리는 다음과 같은 상태가 되어 있어야 한다.
다시 koyeb으로 돌아간 뒤, 우상단의 Redeploy를 눌러주면 된다. 해당 버튼은 아까의 에러로그에서 상위 항목으로 이동시 존재한다.
만약 제대로 따라왔다면 다음과 같이 빌드가 완료되고, 코드는 제대로 실행될 것이다. 그리고 잠깐을 기다리면...
우리의 사랑스런 봇에도 초록 불이 들어온다.
명령어도 잘 작동하는 모습을 보여준다. 이것으로 우리는 24시간 서버 구동에 성공한 것이다.
만약 서버 구동을 중단시키고 싶다면, 앱 설정에서 Cancel Deployment를 눌러주면 된다.
지금까지의 과정을 따라왔다면, 감히 장담하건데 이제 디스코드 봇을 만들기 위한 필수 과정은 전부 따라왔다고 생각한다. 이후부터는 API를 열심히 봐가면서 봇을 만들면 되기 때문이다. 필수 과정은 여기서 마무리짓고, 이후부터는 디스코드 봇으로 여러 기능들을 구현해보면서 새로 배운 사실들을 기록해둘까 싶다. 비록 장황하고 두서없는 글이지만, 누군가는 이 글을 보고 도움이 됐으면 좋겠다.
참고한 링크
koyeb에 대한 정보 - https://github.com/Bletcher-Project/bletcher_mix/issues/7
Heroku를 대체할 클라우드 서비스 비교 보고서 · Issue #7 · Bletcher-Project/bletcher_mix
Version 1.0을 배포했다는 기쁨에 취해 곧 일어날 에러를 예상하지 못했던 응애개발자는 좀더 나은, 저렴한 클라우드 서비스를 찾아 여정을 떠났다. (코딩의 신 @kimdg1105 님께서 발행한 이슈에 자세
github.com
koyeb 사용법 - https://cocobi.tistory.com/248
[Node] Koyeb으로 서버 무료로 배포하기 (헤로쿠 대체 플랫폼!!)
❔ Koyeb 이란 2022년 11월 28일부로 헤로쿠(Heroku)의 서비스가 유료로 전환되었다. 따라서 헤로쿠의 프리티어를 대체할 플랫폼을 찾던 중 Koyeb을 발견하여 사용법을 정리할 겸 포스팅하게 되었다. Koy
cocobi.tistory.com
koyeb 사용법2 - https://devbull.xyz/migrate-heroku-to-koyeb/
Heroku 프리 티어 종료로 Koyeb로 이전한 후기
굿바이 헤로쿠 이번 주에 헤로쿠에서 프리 티어 운영을 아예 중단한다고 발표가 나왔다. Heroku’s Next ChapterBack in May, I wrote (https://blog.heroku.com/we-heard-your-feedback) about my enthusiasm to be part of the Heroku
devbull.xyz
koyeb 빌드 방법 (공식문서) - https://www.koyeb.com/docs/build-and-deploy/deploy-with-git#choose-the-builder
Deploy with GitHub
Deploy your app directly from a git repository and enjoy native continuous deployment on Koyeb.
www.koyeb.com
koyeb 빌드팩 설정방법 (공식문서) - https://www.koyeb.com/docs/build-and-deploy/build-from-git
How We Build from Git
Everything you need to know about our build system.
www.koyeb.com
koyeb 빌드 예 - https://github.com/koyeb/example-fastapi
GitHub - koyeb/example-fastapi: Example to deploy a FastAPI application on Koyeb
Example to deploy a FastAPI application on Koyeb. Contribute to koyeb/example-fastapi development by creating an account on GitHub.
github.com
koyeb과 heroku간 빌드과정 비교분석을 위함 - https://lektion-von-erfolglosigkeit.tistory.com/97
디스코드 봇 만들기#12 - 서버 호스팅
자 벌써 디스코드 봇을 만든 지 12회차, 이제 끝낼 때가 되었다 곧 중간고사이기도 하고... 인생게임 봇으로 만들기에는 너무 시간이 오래걸릴 것 같기에 수능 끝난 나에게 맡기도록 하고 지금까
lektion-von-erfolglosigkeit.tistory.com
'프로그래밍 > Discord Bot' 카테고리의 다른 글
디스코드 봇 만들기 대작전 (3) - 명령어 목록 출력 (3) | 2024.01.13 |
---|---|
디스코드 봇 만들기 대작전 (2) - 메시지 출력 응용 (1) | 2024.01.10 |
디스코드 봇 만들기 대작전 (1) - 메시지 출력 (0) | 2024.01.09 |
디스코드 봇 만들기 대작전 (0) - 준비 (1) | 2024.01.09 |