카테고리 없음

[시즌 3 - 1화] "24시간 꺼지지 않는 봇 만들기" AWS 라이트세일(LightSail) 클라우드 배포와 백그라운드 구동 가이드

myaistories 2026. 5. 27. 06:52
반응형

안녕하세요! AI와 함께 나만의 트레이딩 전략을 세우고, 3개년 백테스팅 검증을 거쳐 리스크 관리 장치(Kelly 공식, ATR 손절선)까지 탑재한 지난 여정을 모두 기억하시나요? 백테스팅 결과를 보며 자신감에 차 실전 매매를 돌리려다 보니, 아주 현실적인 인프라 장벽에 부딪히게 되었습니다.

"설마 자동매매 봇을 돌리려고 내 개인 노트북과 데스크톱을 24시간 내내 켜두어야 하나?"

집에 있는 PC를 24시간 구동하는 것은 전기세 문제뿐 아니라, 운영체제 자동 업데이트로 인한 재부팅, 인터넷 일시 끊김, 하드웨어 수명 등 수많은 위험 요소를 안겨줍니다.

따라서 실전 자동 매매의 첫걸음은 내 개인 PC의 전원 공급 상태와 무관하게 전 세계에서 가장 안정적인 인프라 위에서 구동되는 **'클라우드 가상 서버(VPS)'**에 봇을 이주시키는 것입니다. 이번 시즌 3에서는 24시간 돌아가는 실전 봇의 안전한 배포와 실시간 긴급 제어 인프라 구축을 시작합니다!


1. 최저비용으로 시작하는 AWS 라이트세일 가상 서버 생성

가상 서버를 대여해주는 서비스(클라우드) 중 입문자에게 가장 직관적이고 요금이 정액제로 투명한 **AWS 라이트세일(LightSail)**을 선택합니다. 한 달에 커피 한 잔 가격 수준($3.5~$5)으로 24시간 리눅스 서버를 대여할 수 있습니다.

💻 가상 서버(Instance) 사양 설정 가이드

  1. AWS Console 로그인 후 LightSail 서비스 페이지로 이동합니다.
  2. [인스턴스 생성] 버튼을 누릅니다.
  3. 플랫폼 선택: Linux/Unix
  4. 블루프린트 선택: OS 전용 -> Ubuntu 22.04 LTS (가장 널리 쓰이며 정보가 많습니다)
  5. 인스턴스 플랜 선택: CPU 1vCPU, RAM 512MB 또는 1GB 플랜 (가장 저렴한 플랜으로도 파이썬 자동매매 봇 구동에는 차고 넘칩니다)
  6. 인스턴스 이름 입력 후 생성 버튼을 누르면 약 1분 만에 가상 서버가 활성화됩니다.

2. 보안 그룹 설정 및 터미널 원격 접속

인스턴스 생성이 완료되면 고유한 **공인 IP(Static IP)**가 부여됩니다. 외부에서 이 서버에 명령어를 입력하려면 원격 터미널 프로토콜인 SSH(포트 22)가 활성화되어 있어야 합니다.

🔑 고정 IP 및 방화벽 설정

  • 고정 IP 생성: 라이트세일 네트워킹 탭에서 [고정 IP 연결]을 실행하여 서버가 재부팅되어도 IP가 변경되지 않도록 고정합니다.
  • 포트 개방: 기본적으로 SSH(22포트)는 열려 있습니다. 이후 텔레그램이나 디스코드 웹훅 연동을 위해 아웃바운드(Outbound) 인터넷 포트는 모두 자유롭게 열려 있음을 확인해 둡니다.

3. 리눅스 서버 파이썬 환경 구축 및 코드 이주

서버 내부(Ubuntu)로 접속하기 위해 라이트세일 브라우저 터미널을 열거나 원격 SSH 툴을 사용합니다. 이제 아무것도 깔려있지 않은 빈 OS 위에 파이썬 개발 환경을 조립해 보겠습니다.

# Ubuntu 시스템 패키지 최신화
sudo apt-get update && sudo apt-get upgrade -y

# 파이썬 및 패키지 매니저(pip) 설치
sudo apt-get install python3 python3-pip -y

# 기존 자동매매 봇 구동에 필요한 라이브러리 일괄 설치
pip3 install ccxt pandas requests telegram

설치가 완료되면, SFTP 프로그램이나 git clone 명령어를 통해 로컬에서 개발한 main.py 파일과 token.json 등 필수 설정 자산을 서버 내부 폴더(/home/ubuntu/bot/)로 복사합니다.


4. nohup을 활용한 24시간 백그라운드 구동과 로그 관리

가상 서버 터미널에서 python3 main.py를 실행하면 봇이 작동하기 시작합니다. 하지만, 원격 터미널 창을 닫아버리는 순간 터미널 세션이 종료되면서 봇도 강제로 종료됩니다. 터미널 창을 꺼도 24시간 동안 백그라운드에서 코드가 홀로 실행되도록 제어해야 합니다.

🛡️ 백그라운드 실행 명령어: nohup

리눅스 표준 명령어인 nohup과 백그라운드 지시자 &를 결합하여 실행합니다.

# 터미널이 끊겨도 백그라운드에서 파이썬 스크립트를 24시간 계속 구동
# stdout/stderr 출력 로그는 realtime_trade.log 파일에 즉시 기록
nohup python3 -u main.py > realtime_trade.log 2>&1 &
  • -u: 파이썬 출력 버퍼링을 비활성화하여 로그 파일에 출력값이 지연 없이 실시간으로 즉시 기록되도록 강제합니다.
  • 2>&1: 에러 메시지(stderr)와 일반 출력(stdout)을 한곳에 합쳐서 파일로 받습니다.
  • &: 프로세스를 완전히 백그라운드로 밀어 넣습니다.

💡 고급 팁: 디스크 풀(Disk Full) 방지를 위한 파이썬 롤링 로그 설정

단순히 print 명령어로 로그를 무한정 쌓아두면 몇 달 뒤 가상 서버의 디스크 용량(최저 플랜은 20GB 내외)이 가득 차 서버가 다운되는 사태가 발생합니다. 파이썬의 내장 logging 모듈과 RotatingFileHandler를 사용해 파일 크기를 제한하는 롤링 로그를 설정하는 것이 프로덕션의 기본입니다.

import logging
from logging.handlers import RotatingFileHandler

# 로거 생성
logger = logging.getLogger("TradingBot")
logger.setLevel(logging.INFO)

# 롤링 파일 핸들러 설정: 파일 하나당 최대 10MB, 백업 파일은 최대 5개 유지
handler = RotatingFileHandler(
    "realtime_trade.log", 
    maxBytes=10 * 1024 * 1024, # 10MB
    backupCount=5,
    encoding="utf-8"
)

# 로그 포맷 정의
formatter = logging.Formatter('[%(asctime)s] %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

# 실전 사용
logger.info("자동매매 봇 백그라운드 구동이 개시되었습니다.")

📊 실시간 작동 로그 점검

서버 작동 중 봇이 잘 돌고 있는지 로그 파일을 실시간으로 모니터링하려면 tail 명령어를 활용합니다.

# 로그 파일의 마지막 20줄을 출력하고, 새로운 출력이 누적될 때마다 화면에 실시간 갱신
tail -f realtime_trade.log

⚠️ 리스크 경고: 클라우드 구동 시 쿼터와 오버헤드 주의

클라우드 서버는 로컬 컴퓨터와 네트워크 가동 환경이 완전히 다릅니다.

  • 시간 동기화 오차: 클라우드 가상 서버의 OS 시간(UTC)이 실제 한국 시간(KST)이나 거래소 서버 시간과 미세하게 일치하지 않으면 API 요청 시 타임아웃 서명 에러가 터집니다. Ubuntu 타임존을 한국 시간으로 강제 동기화하는 설정을 필수로 해두어야 합니다.
    sudo timedatectl set-timezone Asia/Seoul
    
  • 서버 사양에 따른 버퍼 오버플로우: 512MB RAM 요금제를 선택한 경우, 봇 내부에서 대량의 판다스 백테스팅 프레임을 상시 메모리에 띄워 계산하면 메모리 부족(OOM Killer)으로 프로세스가 OS에 의해 강제 살해당할 수 있습니다. 경량화된 실행 구조가 필수적입니다.

에필로그: 다음 단계는 'SQLite 데이터베이스 연동!'

내 봇이 이제 클라우드 인프라 위에서 24시간 밤낮없이 호가를 조회하고 거래 신호를 포착할 준비를 끝마쳤습니다.

  • 다음 편 예고 체크리스트:
    • [ ] 파일 데이터 저장 방식의 한계를 넘는 SQLite 가벼운 DB 설계
    • [ ] 봇이 체결한 실시간 주문 내역을 DB에 적재하는 SQL 쿼리 연동
    • [ ] 재부팅 후에도 기존 매매 상태(시드 배분 상태, 잔고) 복원 모듈 조립

다음 시간에는 리눅스 서버가 돌발 재부팅되더라도 데이터가 증발하지 않고 내 봇의 기억을 영구 보존해줄 'SQLite 데이터베이스 연동과 정보 기록 자동화' 편으로 찾아오겠습니다.

24시간 구동되는 나만의 개인 연금 봇 제작기! 오늘도 흥미로우셨다면 구독과 응원 댓글 부탁드립니다. 감사합니다!

반응형