
처음 VPS를 선택할 때 했던 실수
2021년 말 첫 VPS를 구축할 때 가장 큰 실수는 사양을 과소평가한 것이었다. 당시에는 단순히 Python 스크립트 몇 개만 돌리면 된다고 생각했다. 1코어 1GB RAM으로 시작했는데, 바이낸스 API 호출과 데이터 처리가 동시에 일어나자 서버가 멈췄다.
메모리 사용량을 모니터링해보니 평상시에도 80% 이상 사용하고 있었다. 백테스트를 돌리면 100%를 넘어서 시스템이 다운됐다. 결국 한 달 만에 2코어 4GB로 업그레이드했다. 지금 생각해보면 처음부터 여유 있게 잡았어야 했다.
SSH 접속이 안 될 때 겪었던 당황
운영 6개월차에 갑자기 SSH 접속이 안 되는 상황이 발생했다. 매매봇은 돌아가고 있는데 서버에 들어갈 수 없었다. 처음에는 네트워크 문제인 줄 알았다. 다른 인터넷으로 시도해도 마찬가지였다.
호스팅 업체 콘솔로 확인해보니 CPU 사용률이 100%였다. 로그를 보니 어떤 프로세스가 무한루프에 빠져있었다. 콘솔로 강제 재부팅을 했고, 그 후부터는 시스템 모니터링을 더 꼼꼼히 하게 됐다.
모니터링 시스템 구축
이 사건 이후 서버 상태를 실시간으로 확인할 수 있는 시스템을 만들었다. htop, iotop, netstat 같은 기본 명령어로 확인하는 것부터 시작했다. 나중에는 간단한 스크립트로 CPU, 메모리, 디스크 사용률을 텔레그램으로 받아보도록 설정했다.
- 5분마다 시스템 리소스 체크
- 임계치 초과 시 알림 발송
- 프로세스별 리소스 사용량 기록
- 일일 리포트 자동 생성
데이터 백업의 중요성을 깨달은 순간
운영 1년 반쯤 됐을 때 디스크 용량이 부족해졌다. 로그 파일들이 계속 쌓여서 용량이 꽉 찼다. 급하게 파일들을 정리하다가 실수로 중요한 설정 파일을 삭제했다. 다행히 코드는 Git에 있었지만 환경 설정 파일들은 따로 백업하지 않았다.
결국 처음부터 다시 설정해야 했다. API 키 재발급부터 시작해서 모든 환경을 다시 구축하는데 이틀이 걸렸다. 그동안 매매는 중단됐고, 놓친 기회들이 있었다.
백업 자동화 시스템
이후부터는 백업을 자동화했다. crontab으로 매일 새벽 3시에 중요 파일들을 압축해서 클라우드 스토리지에 업로드한다. 데이터베이스 덤프, 설정 파일, 로그 등을 분류해서 보관한다. 일주일치는 서버에, 한 달치는 클라우드에 저장한다.
보안 설정에서 놓쳤던 부분들
초기에는 보안보다 기능 구현에만 집중했다. SSH 포트를 기본값 22번 그대로 쓰고, 패스워드 인증도 활성화해뒀다. 방화벽 설정도 대충 했다. 다행히 큰 문제는 없었지만 로그를 보니 무차별 공격 시도들이 계속 있었다.
서버 관리 관련 글을 찾아보면서 보안의 중요성을 깨달았다. SSH 포트 변경, 키 인증 전용 설정, fail2ban 설치 등을 차례대로 적용했다. ufw로 방화벽도 다시 설정했다.
현재 적용 중인 보안 설정
- SSH 포트 변경 및 키 인증만 허용
- fail2ban으로 무차별 공격 차단
- 불필요한 서비스 비활성화
- 정기적인 시스템 업데이트
- 로그 모니터링 및 분석
매매봇 운영하면서 겪은 서버 이슈들
매매봇이 안정적으로 돌아가는 것 같았는데, 가끔 API 응답이 느려지거나 타임아웃이 발생했다. 처음에는 바이낸스 서버 문제인 줄 알았다. 그런데 로그를 자세히 보니 우리 서버의 네트워크나 시스템 리소스 문제인 경우가 많았다.
특히 시장 변동성이 클 때 API 호출이 급증하면서 서버 부하가 올라갔다. 동시 처리 개수를 제한하고 요청 간격을 조정해서 해결했다. 또한 메모리 누수가 있는지 정기적으로 프로세스를 재시작하도록 설정했다.
안정성을 위한 추가 조치들
현재는 서버 이중화까지는 하지 않지만, 한 대 안에서라도 안정성을 높이려고 노력한다. systemd를 사용해서 프로세스가 죽으면 자동으로 재시작되게 했다. 로그 로테이션으로 디스크 용량 관리도 자동화했다. 무엇보다 정기적인 점검과 모니터링이 가장 중요했다.
VPS 관리는 처음에는 복잡해 보이지만 기본기만 탄탄히 해놓으면 생각보다 안정적이다. 백업, 모니터링, 보안 이 세 가지만 제대로 해도 큰 문제는 피할 수 있다. 다만 문제가 생겼을 때 빠르게 대응할 수 있도록 기본 명령어들은 익혀놓는 것이 좋다.