[토스증권 OpenAPI] 네트워크 에러 예외 처리 및 안전한 시뮬레이션 모드 구축 (3일차)

[토스증권 OpenAPI] 네트워크 에러 예외 처리 및 안전한 시뮬레이션 모드 구축 (3일차)

지난 2일 차에 실시간 시세를 추적하고 조건 충족 시 주문을 넣는 코어 엔진을 완성했습니다. 하지만 이를 장시간 무인 구동 환경에 그대로 방치하는 것은 매우 위험합니다. 인터넷이 아주 잠깐 끊기거나 서버가 비정상 응답을 뱉으면 프로그램이 즉시 강제 종료되기 때문입니다.

오늘 3일 차에는 어떤 악조건 속에서도 프로그램이 죽지 않고 버티는 ‘네트워크 예외 처리(Exception Handling)’와, 실제 자산을 완벽히 보호하며 로직을 검증할 수 있는 ‘안전한 시뮬레이션(Dry Run) 모드’를 구현했습니다.

1. 무중단 봇을 위한 네트워크 예외 처리(Try-Except)

서버와 통신할 때 발생하는 타임아웃(Timeout)이나 네트워크 단절(ConnectionError)은 개발자가 제어할 수 없는 외부 변수입니다. 파이썬의 requests 라이브러리를 사용할 때 이러한 에러를 잡아내지 않으면 트레이딩 봇은 그 즉시 다운됩니다.

이를 방지하기 위해 시세 조회 함수와 주문 송신부에 강력한 예외 처리 구조를 설계했습니다. 에러가 발생하면 프로그램을 종료하는 대신, 에러 메시지를 출력하고 10초의 백오프(Backoff) 대기 시간을 가진 후 다시 안전하게 루프를 재개하도록 만들었습니다.


try:
    response = requests.get(url, headers=headers, timeout=3)
except requests.exceptions.Timeout:
    print("⏳ [타임아웃] 토스 시세 서버 응답 지연 발생!")
except requests.exceptions.ConnectionError:
    print("🔌 [연결 에러] 인터넷 연결이 불안정합니다.")
except requests.exceptions.RequestException as e:
    print(f"💥 [네트워크 에러]: {e}")

2. 내 자산을 지키는 3중 안전장치: 시뮬레이션(Dry Run) 모드

자동매매 프로그램을 개발할 때 가장 무서운 것은 ‘코드 버그로 인한 의도치 않은 실전 주문 매수’입니다. 로직이 완벽하게 검증되기 전까지는 실제 자본이 집행되는 것을 물리적으로 차단해야 합니다. 이를 위해 시스템에 3중 안전장치를 이식했습니다.

  • DRY_RUN 플래그 도입: DRY_RUN = True 상태일 때는 조건이 만족되더라도 실제 토스 서버로 주문 패킷을 날리지 않고 가상 체결 로그만 남깁니다.
  • 목표가 1원 설정: 시뮬레이션 모드가 풀리더라도 시장에서 절대 체결될 수 없는 1원을 매수 목표가로 두어 호가 진입을 차단합니다.
  • 실제 주문 코드 주석 처리: 서버 호출부 자체를 물리적으로 주석(#) 처리하여 실행 가능성을 원천 봉쇄했습니다.

3. 3일 차 실전 가동 테스트 결과

업그레이드된 코드를 터미널에서 실행한 결과, 시스템이 시뮬레이션 모드로 안전하게 진입하여 실시간 현재가를 추적하는 것을 확인했습니다. 예시 종목인 삼성전자의 시세를 끊김 없이 피딩받는 안정적인 무한 루프가 구현되었습니다.

[터미널 구동 로그]
📱 [알림 발송] 🤖 자동매매 엔진 가동 (모드: ⚠️시뮬레이션(안전)), 목표가: 1원
⏰ [09:55:54] 현재가: 71,500원 (목표가: 1원)
⏰ [09:56:00] 현재가: 71,500원 (목표가: 1원)
👋 사용자에 의해 안전하게 감시가 종료되었습니다.

장시간 가동 중 Ctrl + C를 입력했을 때도 예외 처리 핸들러를 타고 내려가 행 걸림(Hanging) 없이 👋 사용자에 의해 안전하게 감시가 종료되었습니다.라는 로그를 남기며 프로세스가 깔끔하게 반환되었습니다.

마치며 & 4일 차 예고

이제 봇의 끈질긴 생명력(예외 처리)과 안전한 가상 실험실(Dry Run)이 준비되었습니다. 시스템의 기초 인프라가 완전히 자리를 잡았다고 볼 수 있습니다.

다음 4일 차에는 시뮬레이션 모드에서 실제로 가상 매수가 일어났을 때, 내 스마트폰으로 실시간 팝업을 띄워주는 ‘텔레그램 API 알림 봇 연동’ 작업을 본격적으로 완료해 보겠습니다!

댓글 남기기