페이지 캡쳐


서비스 개선점
- 이동 평균선과 정배열, 역배열이 없다. 240일선, 120일선, 60일선, 20일선 → API로 바로 구현 가능 혹은 계산 필요한지 판단 → 해결
- 실시간 통신(websocket)으로 관리가 가능한지 봐야함 → 차트/캔들 데이터는 항상 RestAPI로 제공, 나머지는 WebSocket으로 전환 가능
- 모든 API 데이터들이 숫자로 나오는지 확인해야 함
- 그 데이터가 가져온 매수조건에 해당한다면 트리거를 발생시켜야 함 ex)삼성전자의 30분봉이 이평성 혹은 정배열상 조건에 해당한다면 트리거 발동
- 트리거는 관심종목 창에 노란색 배경으로 깜빡임 + 해당 종목의 창으로 이동
- 홈페이지 창에서 상세 종목 페이지를 새로 띄워 보여주고, 트리거 대상이 되는 데이터 바로 밑에 화살표를 깜빡이는 방식으로 트리거 발동
UI/UX 개선점
- 홈페이지 이동 버튼 필요
- 이평선은 선만 나타내고 차트에는 글자가 나타나지 않게 수정
- 채결량의 스크롤이 화면에 방해되지 않게 수정
오늘의 트러블 슈팅
문제 1
- 현재가, 호가, 체결내역 API 호출 시 간헐적 500 에러 발생 (curl)
- 에러 메시지:
Internal server error,KIS API 요청 실패
문제 2
- 종목 상세 페이지 진입 시 차트가 빈 화면으로 표시 (브라우저)
- 브라우저에서 동시에 4개 API 호출 (candles, orderbook, price, executions)
- KIS VTS API가 동시 요청 중 일부/전체에 500 에러 반환
접근 1
- 원인 분석: KIS VTS(가상투자서비스) API의 속도 제한 또는 일시적 서버 오류
- 확인 방법:
- 백엔드 로그 확인:
docker logs trade-backend - KIS API 응답 코드 확인:
tr_id,msg_cd,msg1필드 분석
- 백엔드 로그 확인:
💡
tr_id: FHKST01010100 (현재가), FHKST01010200 (호가), FHKST01010300 (체결), FHKST03010100 (일봉 캔들). 각 API 요청마다 해당 TR ID가 로그에 출력되어 어떤 요청인지 추적 가능
msg_cd: 정상 응답 시 “0”, 에러 시 에러코드 반환. 로그에서 에러코드 확인 시 KIS 공식 문서에서 의미 확인 필요
msg1: 정상 시 “정상처리 되었습니다”, 에러 시 구체적인 에러 메시지. 현재 로그에서는 500 에러가 KIS 응답 전 백엔드 Rate Limiting 로직에서 발생하여 msg1이 출력되지 않음
접근 2
- 원인 분석:
- curl 단일 요청: ✅ 성공 (캔들 데이터 정상 반환)
- 브라우저 동시 요청: ❌ 500 에러 (Rate Limiting)
- 이유 : KIS VTS API는 초당 약 5회 요청 제한(Rate Limit)을 적용한다. curl로 단일 요청 시에는 순차적으로 처리되어 제한에 걸리지 않지만, 브라우저는 종목 상세 페이지 로드 시 4개 API(price, orderbook, executions, candles)를 거의 동시에 요청한다. 이로 인해 KIS API의 sliding window 방식 Rate Limit에 걸려 일부 요청이 500 에러를 반환한다. 현재 백엔드에 Semaphore(1) + 250ms 지연을 적용하여 에러율이 29%→9%로 개선되었으나, 동시 접속자 증가나 여러 종목 연속 조회 시 여전히 제한에 걸릴 수 있어 WebSocket 전환이 근본적인 해결책이다.
- 증거:
# 단일 요청 - 성공
curl "http://localhost:8000/api/v1/stocks/005930/candles?period=D&count=10"
# → [{"date":"20260106","open_price":135300,...}]
# 브라우저 동시 요청 - 실패
# candles, orderbook, price, executions 동시 호출 → 500 에러
해결 시도
- 근본 원인: KIS VTS API의 동시 요청 Rate Limiting (슬라이딩 윈도우, 초당 5건)
- 백엔드 시도:
- Semaphore(1)로 동시 요청 직렬화
- 요청 간 250ms 딜레이 추가 (초당 4건, 여유분 확보)
- TTL 캐싱으로 중복 요청 방지 (price: 2초, orderbook: 1초, executions: 3초, candles: 60초)
- 프론트엔드 시도:
- API 호출 시차 로딩 (price: 0ms → orderbook: 300ms → executions: 600ms → candles: 900ms)
- 차트 컴포넌트에 에러 상태 UI 추가
- 재시도 버튼 제공
결과
개선 효과 있음 - 에러율이 29% → 9%로 약 69% 감소
남은 9% 에러의 가능 원인:
- 캐시 미스 시 동시 요청 발생 ?
다음 시도 → WebSocket으로 접근(단, 차트,캔들 데이터는 Rest API)
1/7 문제 추가
하나의 종목으로도 이러한 에러가 지속적으로 발생하여, 조금 더 자세히 분석하기로 함
- 우선 분봉 차트들이, 상세 종목 페이지 갱신 시, 모두 요청되는 문제
- 하지만 진짜 문제는 이것이 아님
장외시간에는, RestAPI로 차트를 나타내면 됨 → 15:30~09:00
장 기간에 실시간으로 변하는 차트를 보려면….
웹소켓으로 수신하여 필수
따라서 반드시 RestAPI를 제거해야함