주식이
오프라인
v0.1 · 2최종 갱신 2026-09-11api 연결 안 됨

주식이 — 서비스 구조 & 패치노트

상한가 다음 날부터 5분봉 CCI 눌림에서 사서 과매수 꺾임에 파는 매매를, 각자 본인 한투 계좌·앱키로 자동 실행하게 해주는 서비스입니다. 이 페이지는 무엇이 실제로 돌고 무엇이 아직 아닌지를 있는 그대로 적습니다.

1. 시스템 맵

브라우저jusike.krCloudflareDNS · 프록시 · TLSVercelNext.js · shadcn · 화면만HostHatch 서울api · worker · SQLite한국투자증권REST · WebSocketCaddy :443 → api :8000 · worker(07:50~15:40) · 이벤트 테이블 → SSE

프론트(Vercel)에는 비밀이 없습니다. 로그인·설정·조회는 api, 장중 시세·판정·주문은 worker 프로세스가 맡고, 둘은 SQLite 를 공유합니다.

2. 역할별 여정

👤 방문자
  1. /apply 에서 이메일·이름 제출
  2. 관리자 승인 대기
  3. 임시 비밀번호를 직접 전달받음
📈 사용자
  1. 로그인 → 비밀번호 변경
  2. 본인 한투 앱키·계좌 등록
  3. 연결 테스트 4/4
  4. 모드 선택: 관제 → 반자동 → 자동
  5. 대시보드에서 감시·보유·카드
🛡️ 관리자
  1. 가입 승인 · 임시비밀번호 1회 표시
  2. 사용자 정지·역할
  3. 워커·WS·커버리지 감시
  4. 시세키 지정 · 전체 비상정지

3. 매매 파이프라인

상한가 이벤트(+29% · 대금 100억 · 배수 10)감시목록 D+1~D+65분봉 (크레온 표기)2차신호 EMA 10/60 데드크로스CCI 과매도(<−100) → 반등 · 1차는 ≤ −150매수 · 물타기 −1% (1:2:3)과매수(>100) 후 CCI 꺾임 · 순익 ≥ +1% 매도9일째 09:00 기한청산

계산은 종목당 한 번, 판정은 계좌별. 봉·지표·신호는 시장 데이터라 누가 보든 같습니다. 규칙 정본은 원저자의 백테스트 엔진이고, 웹은 그 엔진을 그대로 불러 「다음 봉 시가에 무엇을 하나」만 묻습니다.

4. 인증·키 파이프라인

  • 비밀번호는 서버에서만 argon2id 로 검증. 세션은 서버 테이블 · HttpOnly 쿠키 12시간 · 5회 실패 10분 잠금
  • 한투 앱키·시크릿은 AES-256-GCM 으로 DB 에, 마스터키는 서버 로컬 파일에만. 화면엔 끝 4자리
  • 프론트엔 어떤 비밀도 없습니다. 브라우저는 api.jusike.kr 에만 말을 겁니다

5. 모드와 안전장치

관제
신호·판정만 보여준다. 주문 0건. 페이퍼 단계.
반자동
신호가 뜨면 카드. 사람이 누르면 서버가 규칙을 다시 검증하고 보낸다.
자동
프로그램이 낸다. 확인 문구를 입력해야 켜지고, 비상정지 버튼이 항상 보인다.

비상정지는 두 겹(계좌·전체)입니다. 매도선은 「목표가」가 아니라 최저 방어선입니다 — 그 값에 미리 팔면 백테스트가 잡은 수익의 대부분을 놓칩니다.

6. 실동작 vs 준비중

기능상태설명
상한가 이벤트 · 감시목록(D+1~D+6)✅ 실동작매일 07:50 네이버 일봉 증분 → 이벤트원장 → 감시목록. 2026-09-11 실서버 7종목
5분봉 조립(크레온 표기) · 백필✅ 실동작KIS 과거분봉 → 5분봉. 크레온 CSV 와 봉 단위 일치 검증
CDN 업로드 (cdn.jusike.kr · B2)✅ 실동작API 로 올린 파일이 Cloudflare 캐시를 거쳐 서빙. 2026-09-11 업로드→HIT 점검 통과
2차신호 · CCI 판정 (관제)🟡 페이퍼판정로그·신호 알림까지. 주문 0건. 2주 페이퍼 진행
반자동 카드 → 주문⚪ 준비중카드 생성·승인·재검증·발송·체결 반영까지 코드 완료. 모의투자 키로 왕복 E2E 대기
자동 주문⚪ 준비중코드 완료. 실계좌는 관리자 설정 실계좌주문허용=1 전까지 발송 안 함(R-35)
3차신호(RSI·OBV)⚪ 준비중스위치(설정 신호모드=2차+3차) 준비 완료 · 리플레이 24/24. 페이퍼 뒤 사용자 승인으로 켠다
결제 · 공개 가입⚪ 준비중초대제. 유사투자자문 검토 후

「실동작」은 페이퍼·소액 단계를 통과한 것만 표시합니다. 워커 상태 배지는 실시간(/api/health)입니다.

7. 배포·운영

  • 웹: Vercel (Next.js 16 · shadcn/ui · 퍼플/다크)
  • API·DB: HostHatch 서울 1 vCPU/2GB (FastAPI · SQLite WAL · systemd · 워커는 평일 07:50 timer 기동, 15:40 자진 종료)
  • 보안: Cloudflare 프록시 · Caddy TLS · ufw 22/80/443 · fail2ban · 키 전용 SSH
  • 알림: 텔레그램 (신호·체결·기한청산·워커 이상)
  • 비용: 월 $4

8. 패치노트

v0.1 · 22026-09-11주문 실행 코드와 안전장치 — 실계좌 게이트 · 반자동 재검증 · 환경파일
이전
관제만 있었다. 카드는 만들어지지만 주문은 나가지 않았다
이후
모드=자동 이면 워커가 주문을 낸다 — 단 실계좌는 관리자 설정 실계좌주문허용=1 일 때만(R-35). 반자동 승인은 서버가 규칙을 다시 계산해 같을 때만 발송(R-29). 체결은 30초 폴링(R-36)
  • worker주문실행기 — 수량(1:2:3 · 미수없는매수금액 캡 · 0주 스킵) · 봉 넘긴 매수 취소(R-1) · 부분체결(R-4) · 08:20 기한청산 접수(D-8)
  • api반자동 카드 승인 → 명령큐 → 워커 재검증 → 발송. 만료·모드·정지·차수 조작 전부 거부
  • web대시보드·원장·판정로그·계좌·설정·관리자 3·/about — Next.js 16 · shadcn 퍼플 다크 · SSE + 폴링 폴백
  • infra환경변수는 web/.env.production 파일이 정본(공개값 커밋). Vercel 프로덕션 배포 jusike-opal.vercel.app
  • qaPlaywright 12/12 · pytest 44 · 오브젠 골든 · 리플레이 24/24 · 실서버 curl 26/26
v0.1 · 12026-09-11서버·API·워커 골격과 실서버 배치
이전
설계서와 백테스트 엔진만 있었다
이후
api.jusike.kr 에 FastAPI 가 뜨고, 워커 배치가 오늘 감시목록을 실데이터로 만든다 (관제 모드)
  • infraHostHatch 서울 서버 정비 — Asia/Seoul · ufw 22/80/443 · 키 전용 SSH · fail2ban · venv · Caddy
  • engine꾸러미 3 반영 · 청산기한 8일 · 백테스트 587매매/승률 89.4%/연 +133.8%/MDD 35.2% 재현 (2차+3차 합산)
  • engine2차신호 전용 정답지 586/89.1%/+96.2%/33.0% (1차 릴리스 기준)
  • worker봉 조립: KIS 1분봉(시작시각) → 크레온 표기 5분봉(종료시각). 4종목-일 308봉 OHLC 100% 일치
  • worker어댑터 리플레이 24/24 이벤트 = 엔진 일괄 백테스트 (기한청산 케이스 포함)
  • worker무거래 구간(hollow) 봉은 엔진 입력에서 제외 — 크레온이 그런 봉을 내지 않는다 (R-34)
  • api가입 신청→관리자 승인→임시비밀번호(1회 표시) · 계좌 등록(앱키 AES-GCM 암호화) · 연결 테스트 · 모드 · 비상정지 · SSE
  • qa실서버 curl E2E 26/26 · api 테스트 14 · core 11 · worker 7
v0.3 · 32026-09-11도메인 실연결 · CDN(cdn.jusike.kr) · 3차신호 스위치
이전
jusike-opal.vercel.app 와 SSH 터널로만 접근했다. 대용량 파일을 둘 곳이 없었다
이후
https://jusike.kr · https://api.jusike.kr 이 Cloudflare 를 거쳐 실제 도메인으로 뜬다. 이미지·영상은 cdn.jusike.kr(B2) 에 올린다
  • infraCloudflare 존 jusike.kr 활성 · hosting.kr 네임서버 변경 · DNS api(프록시)/cdn(프록시)/@·www(Vercel) · SSL Full(strict) · Always HTTPS · TLS 1.2+
  • infraCaddy 가 Let's Encrypt 인증서를 http-01 로 발급(Cloudflare 프록시 경유) · api.jusike.kr HSTS · CORS 는 jusike.kr·www 만
  • infracdn.jusike.kr = Backblaze B2 버킷 jusike-cdn + Cloudflare 규칙 3건(경로 재작성 · x-bz 헤더 제거+CORS · 엣지 30일/브라우저 1년 캐시). B2→Cloudflare 전송료 0원
  • api저장소 모듈(S3 SigV4 · 표준 라이브러리) · POST /api/me/upload(200MB · 확장자 화이트리스트) · 관리자 목록/삭제. 점검 도구 tools/cdn_점검.py (HIT 확인)
  • engine설정 신호모드 = 2차 | 2차+3차 스위치(관리자). 3차 켠 리플레이 24/24 일치. 실장 전환은 페이퍼 뒤 사용자 승인
  • admin관리자 시스템 설정에 실계좌주문허용(R-35) · 신호모드 노출 — 바꾸면 이벤트로 남는다