Skip to content

[Refactor] siglens-core indicator constants barrel 분리 — tree-shaking 회복 #468

Description

@y0ngha

무엇을 리팩토링하는가

@y0ngha/siglens-coredist/domain/indicators/constants.js barrel 파일을 관심사별 파일로 분리한다. 현재 이 단일 파일에는 RSI/MACD/BOLLINGER/STOCHASTIC/KELTNER/ICHIMOKU/SMC/SQUEEZE 등 60+ 개의 indicator 상수가 한꺼번에 묶여 있다.

왜 리팩토링이 필요한가

  • 응집도 낮음 (한 모듈에 관련 없는 로직이 섞여 있음)
  • 결합도 높음 (레이어 간 의존 방향이 잘못됨)
  • 도메인 로직이 컴포넌트/훅에 누수됨
  • 중복 코드 (동일 패턴이 여러 곳에 분산됨)
  • 테스트 불가능한 구조
  • Best Practice 미준수
  • 기타: Tree-shaking 실패로 인한 번들 사이즈 증가

단일 상수 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.tsxHIGH_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.tsxHIGH/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는 다음 두 방식 중 선택 가능:

  1. import { HIGH_CONFIDENCE_WEIGHT } from '@y0ngha/siglens-core/domain/indicators/constants/confidence' — tree-shaking 최적
  2. 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.jsonexports/sideEffects 점검
  • siglens (본 레포)
    • src/components/home/SkillsShowcase.tsx — 로컬 미러 제거 후 @y0ngha/siglens-core 에서 직접 import로 복귀
    • src/components/analysis/AnalysisPanel.tsx — 동일하게 tree-shake-friendly 경로로 import 정리 가능

참고 문서

  • docs/ARCHITECTURE.md
  • docs/DOMAIN.md
  • docs/API.md
  • docs/CONVENTIONS.md
  • docs/FF.md
  • docs/DESIGN.md

추가 참고:

완료 조건

  • siglens-core 측 domain/indicators/constants/ 가 관심사별 파일로 분리됨
  • siglens-core barrel(index.ts)이 backward-compat 유지
  • siglens-core package.jsonsideEffects: falseexports 경로가 tree-shaking 가능하도록 설정됨
  • siglens 측 SkillsShowcase.tsxHIGH_CONFIDENCE_WEIGHT 로컬 미러 제거 → 직접 import로 복귀
  • siglens 측 AnalysisPanel.tsx import 경로 확인 (불필요한 unused JS 회귀 없음)
  • landing chunk 의 unused JS 가 33 KB 만큼 감소함을 Lighthouse / Coverage 로 확인
  • 동작 변경 없음 (기존 테스트 전부 통과)
  • 리팩토링 후 테스트 커버리지 유지 또는 향상
  • docs/ 업데이트 (구조 변경 시)

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions