섹터나침반 v3 아키텍처 및 운영 가이드
1. 구조 개요
17개 섹터 / 108개 하위섹터
| 섹터 키 | 한글명 | 하위섹터 수 |
|---|---|---|
| semiconductor | 반도체 | 메모리, 비메모리, 장비, 소재, 파운드리, AI반도체 등 |
| display | 디스플레이 | OLED, LCD, 장비/부품 등 |
| shipbuilding | 조선 | LNG선, 컨테이너선, 방산선박, 해양플랜트 등 |
| shipping_logistics | 해운/물류 | 컨테이너 해운, 벌크, 항만, 물류 등 |
| energy_refinery | 에너지/정유 | 정유, E&P, LNG, 가스유통 등 |
| petrochemical | 석유화학 | 기초유분, 합성수지, 합성고무, 특수화학 등 |
| battery_ev | 배터리/EV | 광물/정련, 양극재/음극재, 전해질/분리막, 셀, EV OEM, 충전인프라 등 |
| defense_space | 방산/우주 | 무기체계, 우주발사체, 위성, 방산전자 등 |
| nuclear_power | 원전/전력인프라 | 원자로, 핵연료, 전력기기, 송배전 등 |
| bio_healthcare | 바이오/헬스케어 | CDMO, 바이오시밀러, 신약, 의료기기, 제약 등 |
| robot_auto | 로봇/자율주행 | 산업로봇, 서비스로봇, 자율주행, 센서/LiDAR 등 |
| consumer_discretionary | 경기소비재 | 자동차OEM, 부품, 의류, 면세/여행, 미디어 등 |
| consumer_staples | 필수소비재 | 식품, 음료, 생활용품, 농업 등 |
| financials | 금융 | 은행, 증권, 보험, 부동산/REITs 등 |
| comm_platform | 플랫폼/미디어 | 인터넷플랫폼, 게임, 광고, 엔터테인먼트 등 |
| infra_utilities | 인프라/유틸리티 | 전력, 가스, 수처리, 건설, 물류인프라 등 |
| materials | 소재/철강 | 철강, 비철금속, 시멘트, 특수소재 등 |
파일 구조
scripts/pipeline/webapp/blueprints/sector_compass.py (5376줄, 데이터+로직 통합)
scripts/pipeline/webapp/templates/market/sector_compass.html (UI)
scripts/pipeline/signal_synthesizer.py (582줄, 3축 시그널 합성)
scripts/pipeline/linkage_validator.py (1416줄, 연결 정량 검증)
sector_compass.py 내부에
_SECTOR_KR,_LINKAGE,_SUBSECTOR_LINKAGE,_SUBSECTORS,_WATCH_INDICATORS딕셔너리가 모두 포함. sector_data.py 분리 작업 진행 중.
데이터 흐름
analyst-fundamental (LLM 에이전트)
↓ memory/analyst-fundamental/*.json (섹터별 사이클/시그널)
sector_research.py (6단계 분석 집계)
↓ memory/sector-research/*.json
signal_synthesizer.py (3축 시그널 합성)
↓ memory/signal-synthesizer/latest.json
sector_compass.py → _load_sectors()
↓ 웹앱 렌더링
Moat 데이터 흐름
company_financials (DART + KIS API)
↓ 영업이익률/고객유지율/시장집중도 등 재무 지표
moat_scorer.py (기업별 정량 스코어, 주 1회)
↓ memory/moat-scores/{date}.json
company_valuations (3-Stage DCF Fair Value — 예정)
↓ Fair Value + Star Rating
sector_compass.py → 기업 상세 패널
↓ Moat 등급 + 밸류에이션 표시
2. 핵심 아키텍처 결정
볼트-나침반 독립 운영
- 볼트: GICS 11개 섹터 기반 (310~340 번호체계)
- 나침반: 독자 17개 섹터 분류
매핑 레이어를 만들지 않는다. 이유:
- GICS와 나침반의 분류 철학이 근본적으로 다름 (GICS=글로벌 표준, 나침반=한국 시장 특화)
- 매핑 테이블은 유지보수 지옥을 만듦 (분류 변경 시 양쪽 동기화 필요)
- 대신 gics_code 필드로 단방향 참조만 유지. 나침반 하위섹터마다 GICS 코드 태깅되어 있어 역추적 가능
17섹터 구조재편 (2026-03-20)
GICS 11개로는 한국 시장 분석이 불가능한 이유: - 반도체: GICS에서는 IT 안에 묻힘. 한국 시총 20%+ 차지하는 핵심 섹터 - 조선: GICS 산업재에 포함되나 한국 독보적 경쟁력, 독립 추적 필수 - 방산/우주: 글로벌 지정학 변화로 독립 모니터링 필요 - 디스플레이/해운물류: 신설 — 기존에 반도체나 산업재에 묻혀 있던 것을 분리 - 소비재 분리: consumer_discretionary(경기민감) vs consumer_staples(필수) 구분 - 부동산 흡수: real_estate → financials로 통합 (한국 REITs 시장 규모 고려)
종목 수 제한 없음 + 교차 배치
한 종목이 여러 하위섹터에 배치될 수 있음. exposure 태그로 관계 강도 표시:
- 핵심: 매출의 주요 부분이 해당 하위섹터
- 확장중: 신규 진출/투자 확대 중
- 부분: 매출 일부만 관련
- 간접: 밸류체인 간접 연결
예시: 포스코퓨처엠 → battery_ev/upstream_mineral(핵심) + battery_ev/cathode_anode(핵심)
3축 시그널
signal_synthesizer.py가 LLM 없이 순수 집계: 1. 주가 시그널: ETF/종목 가격 변동, 상대강도 2. 산업지표 시그널: _WATCH_INDICATORS의 실제 데이터 변화 3. 전후방 영향 시그널: _LINKAGE/_SUBSECTOR_LINKAGE 기반 연쇄 효과
연결 검증
linkage_validator.py (1416줄)가 정량 검증 수행: - Phase A: 그레인저 인과관계 검정 - Phase B: ETF 상관관계 분석 - Phase C: 스프레드/마진 연동 확인 - Phase D: DART 공시 기반 거래관계 확인 - Phase E-F: ECOS 산업연관표, 전파 모델 (미구현)
3. 크론 스케줄
| 파이프라인 | 스케줄 | 역할 |
|---|---|---|
| market_indicator | 평일 07:05 | 32개 시장 지표 수집 |
| signal_synthesizer | 평일 07:35 | 3축 시그널 합성 |
| analyst_fundamental | 평일 07:38 | LLM 에이전트 기반 사이클/시그널 분석 |
| sector_research | 평일 17:30 | 6단계 분석 + ETF 흐름 통합 집계 |
| linkage_validator | 일요 03:00 | 연결 정량 검증 (주 1회) |
| moat_scorer | 일요 04:00 | 기업별 Moat 정량 스코어 산출 (주 1회) |
4. Moat 분석 구조
_MOAT_ANALYSIS — 17섹터 정성 분석 (sector_data.py)
각 섹터에 대해 Moat 원천과 대표 기업의 해자 특성을 정성 기술. sector_data.py 내부에 딕셔너리로 정의.
_MOAT_ANALYSIS = {
"semiconductor": {
"dominant_moat_source": "switching_costs", # 5가지 원천 중 주력
"secondary_moat": "intangible_assets",
"sector_moat_comment": "장비/소재는 high switching cost. 메모리는 원가우위+규모. 팹리스는 IP+생태계",
"wide_moat_candidates": ["ASML", "엔비디아", "ARM"],
"narrow_moat_candidates": ["SK하이닉스", "삼성전자 반도체"],
"moat_risk": "기술전환기(HBM4→HBM5)에서 기존 해자 약화 가능",
},
"shipbuilding": {
"dominant_moat_source": "efficient_scale",
"secondary_moat": "intangible_assets", # 설계 노하우/선급 인증
"sector_moat_comment": "LNG선 건조 가능한 한국 3사가 사실상 과점. 규모+기술로 신규 진입 차단",
"wide_moat_candidates": ["한국조선해양", "삼성중공업"],
"narrow_moat_candidates": ["한화오션"],
"moat_risk": "중국 대형 조선소의 LNG선 기술력 추격",
},
# ... 17섹터 전체
}
moat_scorer.py — 기업별 정량 스코어 (주 1회)
| 스코어링 항목 | 가중치 | 측정 방법 |
|---|---|---|
| 영업이익률 지속성 | 25% | 5년 평균 vs 섹터 중앙값 — 지속적 초과이익 여부 |
| 고객 전환비용 프록시 | 20% | 장기계약 비중, 재계약율, 구독 매출 비중 |
| 시장 집중도 | 20% | HHI 또는 상위3사 점유율 — 효율적 규모 |
| R&D/특허 강도 | 20% | R&D비율, 특허 수 증가율 — 무형자산 |
| 네트워크 효과 프록시 | 15% | 사용자/거래량 증가율 vs 비용 증가율 — 레버리지 |
등급 기준: - Wide (80+): 20년 이상 지속 가능한 경쟁 우위 확인 - Narrow (60~79): 경쟁 우위 존재하나 지속성 불확실 - None (~59): 경쟁 우위 미확인 또는 단기성
5. 수정 가이드
종목/지표 추가
sector_compass.py의 _SUBSECTORS 딕셔너리에서 해당 하위섹터를 찾아 수정:
- representative_stocks → kr/global 배열에 종목 추가
- watch_indicators → 지표 추가
- exposure 태그 필수 지정 (핵심/확장중/부분/간접)
섹터 간 연결 추가
- 섹터 레벨:
_LINKAGE딕셔너리에 항목 추가 (sector, type, direction, structure, impact, what_to_watch 필드) - 하위섹터 레벨:
_SUBSECTOR_LINKAGE리스트에 항목 추가
새 섹터 추가 시 체크리스트
_SECTOR_KR— 영문키→한글명 매핑_SUBSECTORS— 하위섹터 배열 전체 정의 (key, gics_code, label, description, watch_indicators, representative_stocks, etf_proxy, cycle_independence)_WATCH_INDICATORS— 섹터 레벨 모니터링 지표_LINKAGE— 전후방 산업 연결 정의analyst_fundamental_prompt.md— AF 에이전트 프롬프트에 섹터 추가- sector_research.py — 집계 대상에 포함
GICS 오분류 수정
볼트 측 GICS 분류 수정 시:
- shared/vault_paths.py의 GICS_SUBFOLDER_MAP 수정 (GICS 코드→폴더 매핑)
- shared/vault_paths.py의 _SECTOR_PRIORITY_KEYWORDS 수정 (키워드 기반 우선 분류)
- 나침반의 gics_code 필드와는 독립적 — 양쪽 수정이 서로 영향 없음
6. 절대 하지 말 것
- 매핑 레이어/매핑 테이블 추가 금지 (볼트↔나침반 사이). 유지보수 지옥. gics_code 단방향 참조로 충분
- 나침반을 GICS 11개로 축소 금지. 한국 시장 분석 능력 상실 (반도체/조선/방산이 묻힘)
- _SUBSECTORS를 JSON 외부화 금지. 현재 유즈케이스 없음, Python dict의 타입 안전성과 IDE 지원 상실
- etf_tracker.py 수정 절대 금지 (사고 이력 있음)
7. Known Issues
| 이슈 | 상태 | 비고 |
|---|---|---|
| 필수소비재/디스플레이/해운물류 사이클 데이터 없음 | 대기 | AF 크론 다음 실행 시 자동 생성 예정 |
| linkage_validator Phase E-F 미구현 | 미착수 | ECOS 산업연관표 + 전파 모델 |
| sector_compass.py 5376줄 비대화 | 진행중 | sector_data.py 분리 작업 중 |
| analyst_fundamental 설명에 "12섹터" 표기 | 잔여 | 17섹터 재편 후 미갱신, 실동작은 17섹터 |