무엇을 리팩토링하는가
@y0ngha/siglens-core 의 dist/domain/indicators/constants.js barrel 파일을 관심사별 파일로 분리한다. 현재 이 단일 파일에는 RSI/MACD/BOLLINGER/STOCHASTIC/KELTNER/ICHIMOKU/SMC/SQUEEZE 등 60+ 개의 indicator 상수가 한꺼번에 묶여 있다.
왜 리팩토링이 필요한가
단일 상수 1개(HIGH_CONFIDENCE_WEIGHT)만 import해도 전체 barrel 모듈이 chunk에 끌려오고, Turbopack tree-shaking이 실패해 landing chunk(0amtymn_fy3uf.js)에 ~33 KB unused JS가 발생한다.
PR #467 (perf/lighthouse-audit-cleanup) 에서 이 문제를 임시 회피하기 위해 src/components/home/SkillsShowcase.tsx 에 HIGH_CONFIDENCE_WEIGHT = 0.8 을 로컬 미러로 인라인했다. 두 리뷰 봇(claude + gemini) 모두 이를 flag:
- gemini: domain logic 상수가 application에 중복 = coupling/predictability 리스크. siglens-core의 barrel 구조 자체를 재정비할 것을 권장
- claude: 미러를 제거할 수 있는 시점을 명시적으로 트래킹할 것을 요청
현재 구조 (AS-IS)
@y0ngha/siglens-core/
domain/indicators/
constants.js ← 60+ 상수가 단일 파일에 모두 포함
(RSI/MACD/BOLLINGER/STOCHASTIC/KELTNER/
ICHIMOKU/SMC/SQUEEZE/CONFIDENCE 등)
Consumer 측 (siglens):
src/components/home/SkillsShowcase.tsx — 현재 HIGH_CONFIDENCE_WEIGHT 를 로컬 미러로 인라인 (PR #467에서 임시 적용)
src/components/analysis/AnalysisPanel.tsx — HIGH/MIN_CONFIDENCE_WEIGHT 직접 import 중 (동일 tree-shaking 문제 가능성)
목표 구조 (TO-BE)
@y0ngha/siglens-core/
domain/indicators/constants/
confidence.ts (HIGH/MEDIUM/MIN_CONFIDENCE_WEIGHT,
UNMATCHED_SKILL_CONFIDENCE_WEIGHT)
rsi.ts (RSI_DEFAULT_PERIOD, RSI_OVERBOUGHT_LEVEL,
RSI_OVERSOLD_LEVEL)
macd.ts
bollinger.ts
stochastic.ts
ichimoku.ts
keltner.ts
smc.ts
squeeze.ts
...
index.ts (barrel for backward-compat —
explicit per-file imports become tree-shake-friendly)
관심사별 파일 분리 후, consumer는 다음 두 방식 중 선택 가능:
import { HIGH_CONFIDENCE_WEIGHT } from '@y0ngha/siglens-core/domain/indicators/constants/confidence' — tree-shaking 최적
import { HIGH_CONFIDENCE_WEIGHT } from '@y0ngha/siglens-core' — barrel 경유 (번들러가 sideEffects:false 와 함께 잘 동작할 경우)
영향 범위
크로스 레포 영향:
@y0ngha/siglens-core (본체 작업) — constants 디렉토리 재구성, barrel 분리, package.json 의 exports/sideEffects 점검
siglens (본 레포)
src/components/home/SkillsShowcase.tsx — 로컬 미러 제거 후 @y0ngha/siglens-core 에서 직접 import로 복귀
src/components/analysis/AnalysisPanel.tsx — 동일하게 tree-shake-friendly 경로로 import 정리 가능
참고 문서
추가 참고:
완료 조건
무엇을 리팩토링하는가
@y0ngha/siglens-core의dist/domain/indicators/constants.jsbarrel 파일을 관심사별 파일로 분리한다. 현재 이 단일 파일에는 RSI/MACD/BOLLINGER/STOCHASTIC/KELTNER/ICHIMOKU/SMC/SQUEEZE 등 60+ 개의 indicator 상수가 한꺼번에 묶여 있다.왜 리팩토링이 필요한가
단일 상수 1개(
HIGH_CONFIDENCE_WEIGHT)만 import해도 전체 barrel 모듈이 chunk에 끌려오고, Turbopack tree-shaking이 실패해 landing chunk(0amtymn_fy3uf.js)에 ~33 KB unused JS가 발생한다.PR #467 (perf/lighthouse-audit-cleanup) 에서 이 문제를 임시 회피하기 위해
src/components/home/SkillsShowcase.tsx에HIGH_CONFIDENCE_WEIGHT = 0.8을 로컬 미러로 인라인했다. 두 리뷰 봇(claude + gemini) 모두 이를 flag:현재 구조 (AS-IS)
Consumer 측 (siglens):
src/components/home/SkillsShowcase.tsx— 현재HIGH_CONFIDENCE_WEIGHT를 로컬 미러로 인라인 (PR #467에서 임시 적용)src/components/analysis/AnalysisPanel.tsx—HIGH/MIN_CONFIDENCE_WEIGHT직접 import 중 (동일 tree-shaking 문제 가능성)목표 구조 (TO-BE)
관심사별 파일 분리 후, consumer는 다음 두 방식 중 선택 가능:
import { HIGH_CONFIDENCE_WEIGHT } from '@y0ngha/siglens-core/domain/indicators/constants/confidence'— tree-shaking 최적import { HIGH_CONFIDENCE_WEIGHT } from '@y0ngha/siglens-core'— barrel 경유 (번들러가 sideEffects:false 와 함께 잘 동작할 경우)영향 범위
domain/(siglens-core 측이 본체이며, siglens local domain은 영향 없음)infrastructure/app/components/크로스 레포 영향:
@y0ngha/siglens-core(본체 작업) — constants 디렉토리 재구성, barrel 분리,package.json의exports/sideEffects점검siglens(본 레포)src/components/home/SkillsShowcase.tsx— 로컬 미러 제거 후@y0ngha/siglens-core에서 직접 import로 복귀src/components/analysis/AnalysisPanel.tsx— 동일하게 tree-shake-friendly 경로로 import 정리 가능참고 문서
docs/ARCHITECTURE.mddocs/DOMAIN.mddocs/API.mddocs/CONVENTIONS.mddocs/FF.mddocs/DESIGN.md추가 참고:
src/proxy.ts의TICKER_RE로컬 미러 (동일 root cause — siglens-core barrel tree-shaking 실패)완료 조건
domain/indicators/constants/가 관심사별 파일로 분리됨index.ts)이 backward-compat 유지package.json의sideEffects: false및exports경로가 tree-shaking 가능하도록 설정됨SkillsShowcase.tsx의HIGH_CONFIDENCE_WEIGHT로컬 미러 제거 → 직접 import로 복귀AnalysisPanel.tsximport 경로 확인 (불필요한 unused JS 회귀 없음)