← 목록
기타 2026-07-20 3KB 읽기 3분

crowny-trader dc 핸드오프 → 바닐라 단일 HTML 픽셀포팅

개요

/Users/ef/Downloads/design_handoff_trading/작업_dc앱_slim.html (React 기반 dc 컴포넌트, 52KB)를 의존성 0의 바닐라 JS 단일 HTML로 변환해 /Users/ef/crowny-trader/public/index.html에 배포. 기존 index.html은 이미 landing.html로 백업 이전된 상태였음.

무엇을 했는지

  • 원본 마크업(발견/차트/훈련/체크/내 결 5탭)과 로직(state, profile, frame, settle, enter, draw, renderVals)을
React 클래스 → 순수 함수 + 전역 state/App 네임스페이스로 이식. 수식·초기값·상수(volMult=1.272818, spikeRate=0.028, demoRest=true) 한 글자도 변경 없음.
  • sc-if/sc-for/{{ }} 템플릿 문법 → JS 템플릿 리터럴(${cond?...:''}, ${list.map(...).join('')})로
기계적 변환. 전사 오류(곡선따옴표 “ ” ‘ ’, em-dash —, 가운뎃점 ·, 마이너스 기호 − 등) 방지를 위해 원본 파일에서 sed로 정확한 바이트 블록을 추출한 뒤 Python 스크립트(ASCII 앵커만 사용, 한글 텍스트는 절대 재입력하지 않음)로 치환하는 방식을 사용.
  • sc-camel-on-clickdata-action/data-arg 속성 + 단일 이벤트 위임(delegated click listener)으로 대체.
  • 캔버스는 매 250ms 재렌더에도 고정 DOM 노드(chartCanvas)를 재사용 — 렌더 시 placeholder
#canvas-slotreplaceWith()로 교체해 비트맵·크기 상태 보존.
  • Pretendard/JetBrains Mono는 CDN link로 대체(React/CDN 스크립트는 사용 안 함).

검증

  • {{/sc-if/sc-for/sc-camel-on-click/hint-placeholder 잔재 grep 0건
  • doctype/charset/viewport 골격 확인
  • node --check로 추출 스크립트 문법 검증 통과
  • Node vm으로 DOM 스텁 얹어 실제 로직 실행: init/frame/enter/settle/renderVals/doM2Win/doM2Loss/
doSaveCheck 전부 정상 동작 확인 (가격틱 생성, 세션 라벨, 레벨/스타, m2 사다리, m3 계정 수, 체크 로그 등)
  • 서버 :7741 재기동 없이 정적 파일 갱신, HTTP 200 확인

관련 파일

  • 산출물: /Users/ef/crowny-trader/public/index.html (약 50KB)
  • 원본: /Users/ef/Downloads/design_handoff_trading/작업_dc앱_slim.html
  • 스펙 문서: /Users/ef/Downloads/design_handoff_trading/크라우니 트레이딩 설계서.md,
크라우니 트레이딩 개발자 문서.md
  • 빌드 스크래치(1회성, 저장소 밖): /private/tmp/.../scratchpad/{transpile.py,transpile_logic.py,assemble.py}

잔여 이슈 / 예외 사항

  • 산출물이 브라우저 단일 HTML(JS/DOM/canvas)이라 태스크 지시(바닐라 JS, React/CDN 프레임워크 금지)와
한선씨 우선 원칙이 직접 충돌 — 브라우저 실행 도메인은 "외부 시스템 호환" 예외로 판단해 한선씨 동반 없이 진행. 빌드용 1회성 Python 스크립트(scratchpad, 저장소 밖)도 동일 사유로 한선씨 미동반.
  • 다음 단계(주간 거래장 리플레이·모드3 계정별 실시간 P&L 등)는 설계서 §6 "다음 단계" 참고, 이번 작업 범위 밖.