(REST와 WS, 키 불필요)
저희가 직접 만들어 운영하는 서비스입니다. 웹서비스 규모의 일을 맡기면 어디까지 만들어지는지 보여 드리려고 사례에 넣었습니다. 바이낸스 USDⓈ-M 선물 약 350종목의 6개 시간봉을 서버가 계속 훑다가 다이버전스나 삼박자 신호가 뜨면 텔레그램과 웹으로 알립니다. FastAPI 서버 한 대에 차트 화면, 회원과 플랜, AI 브리핑, 무중단 배포까지 붙였고 2026년 8월에 열었습니다.
파동에너지 다이버전스 지표를 만들고 나서 든 생각에서 시작했습니다. 지표는 차트를 열어야 보이는데, 350종목의 6개 시간봉을 사람이 다 열어 볼 수는 없습니다. 그래서 서버가 대신 보게 했습니다. 신호 계산부는 트레이딩뷰 원본과 결과가 일치하는지 검증한 파이썬 사본입니다. 이 부분은 수정 금지로 묶어 두어 서비스 코드가 바뀌어도 그대로입니다.
2년, 7년, 횡보장, 상승장 네 구간으로 백테스트를 돌렸더니 전부 기계적 우위가 없다는 결과로 모였습니다. 그래서 확률, 승률, 수익률은 계산하지도 표기하지도 않습니다. 신호 문구도 매수와 매도 대신 바닥형과 천정형으로 씁니다. 이 서비스가 하는 일은 차트를 지켜보는 수고를 덜어 주는 데까지입니다. 한 구간에 맞춘 설정이 다른 구간에서 뒤집힌 실측 기록도 열 건 남아 있습니다. t값이 +6.04에서 −9.02로 바뀐 경우도 있었습니다.
배포 직후 DB가 손상됐다는 오류와 함께 서버가 계속 죽었습니다. 서버 DB가 35MB에서 147KB로 잘려 있었고 회원과 세션 정보는 영영 사라졌습니다. 원인은 SQLite가 DB 옆에 만드는 보조 파일이었습니다. 배포 스크립트는 DB 파일 하나만 제외했는데, 로컬에서 앱을 한 번 띄우기만 해도 생기는 보조 파일이 배포 묶음에 실려 올라갔습니다. 이 파일이 서버 DB와 짝을 이루자 SQLite가 서버 DB를 로컬 크기로 잘라 버렸습니다.
복구는 불가능했습니다. 신호는 다시 계산하니 사고 전과 정확히 일치했지만 회원 정보는 잃었습니다. 지금은 배포 묶음을 만든 뒤 목록을 검사해서 DB 관련 파일이 하나라도 있으면 배포를 멈춥니다. 재시작 직전에는 서버에서 DB 스냅샷을 떠서 14개까지 보관합니다. 다시 계산할 수 있는 신호와 그럴 수 없는 회원 정보도 서로 다른 파일로 나눴습니다. 사고보다 백업이 없었던 것이 더 큰 문제였습니다.
국내망에서 바이낸스 실시간 서버에 접속은 정상으로 되는데 데이터만 한 건도 오지 않았습니다. 오류도 끊김 신호도 없어서 연결 상태로는 알 수 없습니다. 그래서 후보 서버 두 곳을 동시에 열어 실제 데이터가 먼저 온 쪽을 씁니다. 마지막으로 데이터를 받은 시각에서 20초가 지나면 다시 접속하고, 그동안은 저희 서버에서 3~5초마다 가격을 받아 옵니다. 연결이 살아 있는지는 데이터가 실제로 도착하는지로 판단해야 한다는 걸 여기서 배웠습니다.
재시작하면 345종목의 6개 시간봉을 전부 다시 받느라 바이낸스의 분당 요청 한도(가중치 2,400)를 두 배 넘겼고, 사용자 요청까지 거절됐습니다. 캔들 데이터를 디스크에 스냅샷으로 남겨 두었다가 기동할 때 되살리고, 스냅샷 이후에 마감된 시간봉만 스캔하게 바꾸니 기동 때 API 호출이 0회가 됐습니다. 여기에 blue-green 배포를 붙였습니다. 대기 인스턴스를 먼저 띄운 다음 교체하는 방식이고, 배포 중 요청 745건에서 실패는 0건이었습니다.
이 서비스에서 만든 부품은 의뢰 프로젝트에 그대로 들어갑니다. 요청 한도를 스스로 지키는 바이낸스 공개 API 연결부, 범용 다이버전스 엔진, DB 보조 파일 검사가 들어간 blue-green 무중단 배포 세트가 있습니다. 쿠키 없는 자체 유입 통계, 검색엔진용 서버 렌더링, 성과 주장 표현 검사기, 헤드리스 크롬 화면 검증 도구도 같이 씁니다. 비슷한 계보의 의뢰 사례가 14거래소 김치프리미엄 스캐너 웹서비스입니다.
알림만 보내는 작은 규모부터 회원제 웹서비스까지, 이 사례에서 쓴 부품으로 만듭니다.
어떤 것을 지켜보고 싶으신지 상담에서 말씀해 주세요.