프로젝트/[퀀트]자동트레이딩
#9 [바이낸스 선물]Flask서버,웹훅 문제해결
SeokjunMan
2023. 11. 17. 18:23
오늘은 지난시간에 이어 트레이딩뷰에서 웹훅을 내 웹서버 url을 통하여 post 요청하여 트뷰 알람을 내 파이썬으로 가져와보도록 하겠다.
< 지난 포스팅 >
https://jayindustry.tistory.com/71
#8 [바이낸스 선물]Flask서버생성,웹훅,포트포워딩
오늘은 지난시간에 고민했던 트레이딩뷰와 내 자동매매봇을 연동시켜보려고 한다. < 지난 포스팅 > https://jayindustry.tistory.com/70 #7 [바이낸스 선물] 코드 리팩토링 3 + 트레이딩뷰 연동 오늘은 지난
jayindustry.tistory.com
지난 단계까지는 트레이딩뷰에서 트리거 알람메시지를 웹훅으로 계속 보냈으나, 아무런 변화가 없었다.
즉, 제대로 전송이 안되었다는 뜻이다.
어디서 잘못되었는지 몇 가지 가능성을 생각해보았다.
[ 고민 ]
1. JSON 데이터 형식
JSON 데이터가 서버에서 요구하는 형식과 정확히 일치하는지.
만약, 내 서버코드에서 특정 키나 값의 형식만을 원한다면 그 형식에 맞아야 들어오는지?
2. 서버 코드 문제
코드문제로 요청 처리 과정에서 오류가 발생하였는지
-> 로깅으로 요청 처리 중 발생하는 오류가 있는지 검토
-> 내 터미널환경에서 테스트용으로 메시지를 한번 보내보기
3. 네트워크 설정 확인
1) 외부 IP 확인
2) 포트 확인
: 80번 포트가 외부에서의 접근에 열려 있는지 확인.
터미널을 열고 sudo lsof -i :80 명령어로 해당 포트를 사용 중인 프로세스를 확인.
4. 보안 설정 확인
방화벽 설정: 맥OS의 방화벽 설정을 확인하여 80번 포트로의 인바운드 연결이 허용되고 있는지 확인
시스템 환경설정 > 네트워크 > 방화벽 옵션에서 확인
5. 로컬 네트워크 설정 검토
1) 라우터 설정
: 사용 중인 라우터의 설정을 점검. 내 외부IP로 들어오는 인터넷 트래픽이 맥북의 로컬 IP 주소(예: 192.168.x.x)로 포워딩되고 있는지 확인. -> 라우터의 포트 포워딩 설정에서 이루어짐
2) 포트 포워딩
: 라우터 설정 페이지에서 포트 포워딩 섹션을 찾아 80번 포트를 맥북의 IP 주소로 포워딩하는 규칙을 추가.
[ 내용 ]
위에서 고민한 부분들을 하나하나 확인해본다.
1. JSON 데이터 형식
JSON 데이터가 서버에서 요구하는 형식과 정확히 일치하는지.
만약, 내 서버코드에서 특정 키나 값의 형식만을 원한다면 그 형식에 맞아야 들어오는지?
일단 트레이딩뷰에서 메시지를 '{'key': 'value'}'로 바꿔보았다.
여전히 메시지가 전달되지 않는다..
어떻게 처리하면 좋을까.. 고민하다가
if, else문으로 처리하면 간편하겠다고 생각했다.
받은 메시지가 Json이면 request메서드로 처리하고 data에 저장하며
문자열일 경우, data변수에 저장한다.
2. 서버 코드 문제
코드문제로 요청 처리 과정에서 오류가 발생하였는지
1) 로깅으로 요청 처리 중 발생하는 오류가 있는지 검토
2) 내 터미널환경에서 테스트용으로 메시지를 한번 보내보기
먼저 로깅하여 에러를 보여주도록 코드를 추가하였다.
트레이딩뷰에서 웹훅을 보냈으나, 아무런 메시지도 뜨지 않았다..
이번엔 내 터미널 환경에서 테스트 목적으로 메시지를 보내보았다.
터미널에서 localhost/webhook URL로 보냈더니 vscode해당 서버코드로 메시지가 잘 전송되었다.
일단 localhost에서 보내는 메시지에 대해서 서버코드는 문제가 없어보인다.
3. 네트워크 설정 확인
1) 외부 IP 재확인
2) 포트 확인
: 80번 포트가 외부에서의 접근에 열려 있는지 확인.
터미널을 열고 sudo lsof -i :80 명령어로 해당 포트를 사용 중인 프로세스를 확인.
1) 외부포트는 구글에 내 아이피를 서칭하여 찾아보니 내가 사용중인 외부 ip가 맞았다.
2) 포트확인은 저번포스팅에서 포트포워딩을 해놔서 열려있을 것이다.
한번 더 확인해보았다.
터미널에서 sudo lsof -i :80을 쳐보니 80번포트가 잘 열려있다.
4. 보안 설정 확인
시스템 환경설정 > 네트워크 > 방화벽 옵션에서 확인해 보았더니 방화벽은 비활성화 상태로 열려있었다.
5. 로컬 네트워크 설정 검토
1) 라우터 설정
: 사용 중인 라우터의 설정을 점검.
내 외부IP로 들어오는 인터넷 트래픽이 맥북의 로컬 IP 주소(예: 192.168.x.x)로 포워딩되고 있는지 확인.
2) 포트 포워딩
: 라우터 설정 페이지에서 포트 포워딩 섹션을 찾아 80번 포트를 맥북의 IP 주소로 포워딩하는 규칙을 추가.
[ 해결방법 ]
5번 라우터 설정에서 문제를 해결하였다..!
저번 #8 단계에선 2) 포트포워딩을 내 로컬터미널 환경에서만 진행했었다.
공유기 라우터설정페이지에서 설정할 생각을 못했다.
회사에서는 포트포워딩을 할 때 항상 192.168.0.1 페이지(라우터 설정페이지)에서 진행했었다.
1) 라우터 설정은 보안상 우리집 공유기환경에서 하면 좋지만, 일단 카페에서 포트포워딩을 하고 지우는 방법으로
진행해보기로 한다.
구글링해보니 대부분 라우터설정페이지가 192.168.0.1, 192.168.1.1, 10.0.0.1 중 하나라고한다.
맥에서는 터미널을 열고 "sudo lsof -i :80" 명령어를 사용하여 라우터의 주소를 찾을 수 있다.
참고로 netstat -nr | grep default는 내부아이피 주소 조회이다.
192.168.0.1로 접속!
카페의 공유기라 그런가 iptime이 떳다.
처음 사용해보았지만 회사에서 해봤던 경험을 토대로 외부포트와 내부포트를 설정 후 추가해보았다.
SJtradingView로 이름을 짓고
현재 접속된 내부ip주소를 체크하였다.
트레이딩뷰에서 URL포트를 80번으로 제한해놓아서 외부포트를 80으로 설정하였다.
내부포트는 5000번이상인 10080번으로 설정하였고, 서버코드의 포트도 10080으로 바꾸었다.
서버코드를 디버깅으로 실행해놓고
트레이딩뷰 트리거 알람 URL을 다음과 같이 설정하고
메시지를 설정 후 적용해보았다.
[ 결과 ]
파이썬 터미널에서 잘 출력되었다..!
data변수에 잘 저장되어 출력된모습이다.