디스코드 봇 만들기 (3)

GwangSoo·2024년 9월 24일
0

개인공부

목록 보기
10/34
post-thumbnail

지난 글에서는 디스코드 봇에서 사용할 스프레드시트를 조작하는 작업까지 했었다.

현재는 로컬에서 node index.js를 사용해야만 봇이 디스코드에 로그인을 하고 스크립트를 종료하면 로그아웃을 한다.

블로그 글을 제출할 때마다 봇을 로그인 시키는 것은 여간 귀찮은 일이 아니다. 따라서 서버를 하나 생성하여 봇을 항상 로그인 상태로 만들어야겠다고 생각했다.

이번 글에서는 NAVER CLOUD PLATFORM을 이용해서 서버를 생성하고 원격 접속까지 하는 과정에 대해 이야기해보겠다.

VPC 세팅

NAVER CLOUD PLATFORM에 접속해서 우측 상단에 콘솔 → Services → All → Networking → VPC 혹은 콘솔 → Services → Free Tier → VPC로 VPC 탭에 접속해 준다.

상단에 VPC 생성을 통해 VPC를 생성해 준다.

그다음 Subnet management 탭으로 가서 Subnet 생성을 해준다.

이렇게 하면 VPC 세팅은 모두 완료됐다.

서버 생성

Services → Compute → Server로 들어가서 서버 생성을 눌러준다.

서버 이미지는 작성일(24.09.14) 기준 ubuntu-22.04로 선택한다.

서버 설정은 위와 같이한다.

서버 스펙을 Micro로 하면 결제 수단 등록 기준 1년간 무료로 사용할 수 있다.

스토리지의 경우 기본을 선택하고 인증키에서 새로운 키를 발급받는다.

네트워크 접근 설정에서 ACG의 경우도 default로 생성된 것을 고른다.

그리고 서버를 생성하고 몇 분 뒤 상태가 운영 중으로 나오면 성공적으로 생성이 된 것이다.

Public IP 할당

왼쪽 메뉴에서 Public IP로 이동 후 공인 IP 신청을 눌러 IP를 할당해 준다. 이는 월에 약 4천 원 정도의 요금이 부가된다.

ACG 설정

ACG는 네이버 클라우드 플랫폼에서 다음과 같이 이야기하고 있다.

ACG는 서버 그룹에 대한 네트워크 접근을 제어, 관리할 수 있는 상품입니다. 고객이 개별적으로 방화벽을 구축할 필요 없이 ACG에 서버 그룹별로 방화벽 규칙을 설정하면 인프라 보안 정책을 손쉽고 효율적으로 적용할 수 있습니다.

쉽게 말해 보안 관련 설정을 하는 곳이다. 이 프로젝트의 경우 InboundOutbound 규칙을 아래 사진과 같이 설정했다.

Inbound에서 IP 주소의 경우 ssh 접속을 허용할 IP 주소만 적어두었다.

관리자 비밀번호 확인

다시 Server로 돌아가서 본인이 생성한 서버를 선택 후 서버 관리 및 설정 변경 → 관리자 비밀번호 확인을 누른다.

서버를 만들며 생성한 키로 인증을 하면 비밀번호를 확인할 수 있다. 이는 ssh 원격접속 시 쓰인다.

원격 접속

터미널을 사용하는 방법도 있지만 vscode를 이용해서 원격 접속을 하기 때문에 vscode 기준으로 설명하겠다.

우선 Remote-SSH라는 Extension이 있어야 한다.

다운 받은 후 맥 기준 command + shift + P를 눌러 명령어 팔레트를 열고 Remote-SSH: Open SSH Configuration File을 통해 config 파일을 열어준다.

HostName에는 공인 IP 주소를, User에는 비밀번호 확인에 나왔던 관리자 이름을 입력해 준다.

IdentityFile의 경우 인증키의 위치를 나타낸다.

Remote-SSH: Connect to Host로 연결을 한다.

그러면 새 창이 열리면서 상단에 비밀번호를 입력하는 곳이 나오는데, 이거는 비밀번호 확인 때 나온 비밀번호를 입력해 주면 된다. 만약 비밀번호를 입력했는데 Permission denied (publickey)가 나오면 아래 명령어를 입력해 주면 된다.

chmod 400 "인증키 경로"

이렇게까지 하면 접속이 정상적으로 된다.

고민했던 점

원격 접속한 서버에서 봇을 실행시키고 원격 접속을 끊으니 봇이 로그아웃하는 현상이 있었다.

discord.js는 8000번 포트를 띄우는 것이 아닌 웹소켓을 이용한 통신을 하기 때문에 원격 접속을 끊을 때 봇도 같이 꺼졌다.

따라서 pm2를 이용하여 백그라운드에서 봇을 켜놓도록 스크립트를 하나 작성했다.

  "scripts": {
    "start:prod": "pnpm dlx pm2 start index.js --name vig",
  },

배포 환경에서 vig라는 이름의 프로세스로 봇을 실행시키는 스크립트이다.

마무리하며

AWS만 쓰다가 네이버 클라우드 플랫폼을 처음 써보았는데 AWS보다 설정도 쉽고 나가는 요금이 조금 더 저렴한 것 같아 선택하게 되었다. 이 기회에 네이버 클라우드 플랫폼을 조금 더 공부해 보면 좋을 것 같다는 생각도 들었다.

MVP 개발은 모두 끝냈기 때문에 이후에는 친구들이 이야기해 준 기능을 추가적으로 넣을 것 같다. 올바른 블로그 글 url 인지 마감 하루 전 노티 기능 등이 있다.

앞으로 새로운 기능이 추가되거나 만드는 도중 이슈가 있으면 또 써야겠다.

참고

레포지토리: https://github.com/gs0428/VIG-Discord

1개의 댓글

안녕하세요, 네이버 클라우드 플랫폼입니다.
네이버클라우드의 기술 콘텐츠 리워드 프로그램 ‘이달의 Nclouder(9월)’ 도전자로 초대합니다 🙂
네이버 클라우드 플랫폼 서비스와 관련된 모든 주제로 10/1(화) 23시까지 신청 가능합니다.
(*9월 작성 콘텐츠 한정 신청 가능)
Ncloud 크레딧을 포함한 다양한 리워드가 준비되어 있으니 많은 관심 부탁드립니다!

자세한 내용은 아래 링크에서 확인부탁드립니다.
https://blog.naver.com/n_cloudplatform/223577474387
신청 링크
https://navercloud.typeform.com/to/lF8NUaCF

답글 달기