2026.02.20AI 개발 패턴
프롬프트 설계종목 리포트구조화 입력금융 AI자동 생성

JSON 데이터 하나로 AI 종목 분석 리포트 자동 생성하기 — 구조화된 입력이 만드는 일관된 금융 리포트

문제: 종목마다 들쭉날쭉한 AI 리포트 품질

LLM에게 "SK하이닉스 분석해줘"라고 던지면 매번 다른 구조, 다른 깊이의 답변이 돌아옵니다. 어떤 때는 재무 분석이 빠지고, 어떤 때는 시장 환경 언급 없이 결론부터 나옵니다. 종목 리포트처럼 일관된 포맷과 정량적 근거가 필요한 영역에서는 자유 형식 프롬프트가 치명적입니다.

핵심 원인은 명확합니다. LLM에게 "무엇을 분석할지"와 "어떤 데이터를 근거로 삼을지"를 구조화해서 전달하지 않기 때문입니다.

해결: 구조화된 JSON 입력 스키마 설계

종목 분석에 필요한 모든 정보를 하나의 JSON 객체로 정의했습니다.

json
{
  "stock_name": "SK하이닉스",
  "stock_data": {
    "name": "SK하이닉스",
    "code": "000660",
    "impacts": [
      {
        "issue_title": "코스피 5,600 돌파와 대형 기술주·증권주 동반 급등",
        "impact": "수혜",
        "impact_strength": "강",
        "timeframe": "즉시",
        "reason": "반도체 슈퍼사이클 국면에서 AI·HBM 수요 확대에 따른 시장 주도주",
        "relationship": "테마"
      },
      {
        "issue_title": "반도체 슈퍼사이클 진입과 업계 채용 확대",
        "impact": "수혜",
        "impact_strength": "강",
        "timeframe": "즉시",
        "reason": "HBM 메모리 수요 급증의 최대 직접 수혜",
        "relationship": "직접"
      }
    ],
    "financial_data": {
      "per": 32.41,
      "pbr": 8.35,
      "roe": 24.77,
      "operating_margin": 38.27,
      "debt_ratio": 72.31,
      "revenue_growth": 85.2
    }
  }
}

이 스키마의 핵심 설계 포인트는 세 가지입니다.

1. impacts 배열 — 이슈와 종목의 관계를 명시적으로 정의

단순히 "이 종목을 분석해줘"가 아니라, 현재 시장에서 해당 종목에 영향을 미치는 이슈를 구조화합니다. impact_strength(강/중/약), timeframe(즉시/단기/중기), relationship(직접/간접/테마) 같은 필드가 LLM이 분석의 깊이와 방향을 잡는 앵커 역할을 합니다.

2. financial_data — 정량적 근거의 강제 주입

PER, PBR, ROE, 영업이익률, 부채비율 등 핵심 재무 지표를 직접 넘깁니다. LLM이 "알아서" 찾아오는 것이 아니라, 검증된 데이터를 입력으로 고정하므로 할루시네이션을 원천 차단합니다.

3. 수혜/피해 구분 — 분석 프레임의 사전 결정

impact 필드가 "수혜"인지 "피해"인지에 따라 리포트 톤과 결론 방향이 달라집니다. 이를 입력 단계에서 결정하면 LLM이 일관된 논리 흐름을 유지합니다.

금융 데이터 분석 화면

프롬프트 설계: 출력 구조를 강제하는 시스템 프롬프트

JSON 입력만으로는 부족합니다. 출력 포맷까지 시스템 프롬프트에서 강제해야 리포트 품질이 일정해집니다.

text
아래 종목 데이터를 바탕으로 상세 리포트를 생성하세요.

## 출력 구조 (반드시 준수)
1. 핵심 요약 — 3~4문장으로 투자 포인트 압축
2. 현재 시장 환경 — 거시 경제·섹터 동향과 종목의 연관성
3. 재무 분석 — 입력된 financial_data 기반 정량 분석
4. 이슈 영향도 분석 — impacts 배열의 각 이슈별 상세 분석
5. 투자 판단 — 종합 등급과 근거

이 구조가 만들어내는 실제 리포트의 일부를 보겠습니다.

markdown
# SK하이닉스 (000660) 이슈 분석 리포트
> 생성일: 2026-02-19 KST

## 핵심 요약
SK하이닉스는 반도체 슈퍼사이클 진입과 AI용 HBM 메모리 수요 급증의
최대 직접 수혜주로, 코스피 5,600 돌파 랠리를 이끄는 시장 주도주 지위를
확고히 하고 있다. 영업이익률 38.27%, ROE 24.77%에 달하는 탁월한
퀄리티 지표를 보유하고 있으나, PBR 8.35배에 달하는 밸류에이션 부담이
공존한다.

## 재무 분석
| 지표 | 수치 | 평가 |
|------|------|------|
| PER | 32.41 | 업종 평균 대비 프리미엄 |
| PBR | 8.35 | 고밸류에이션 구간 |
| ROE | 24.77% | 최상위권 수익성 |
| 영업이익률 | 38.27% | 탁월 |
| 부채비율 | 72.31% | 안정적 |

같은 프롬프트와 스키마로 한화오션, 키움증권 등 다른 종목을 넣어도 동일한 구조의 리포트가 생성됩니다. 한화오션의 경우 PER 81.55배·부채비율 285.53%라는 입력값에 따라 "위험(26.6점/100점)"이라는 판단이 자동으로 도출되었고, 키움증권은 12개월 수익률 315.83%와 Value 0점이라는 상반된 지표로부터 "주의(44.7점)"라는 등급이 나왔습니다.

구조화 입력이 만드는 차이

자유 형식 프롬프트와 구조화된 JSON 입력의 차이를 비교하면 다음과 같습니다.

text
// 자유 형식 — 매번 다른 결과
"한화오션 분석해줘"
→ 때로는 재무 빠짐, 때로는 이슈 맥락 없음, 할루시네이션 위험

// 구조화 입력 — 일관된 결과
{ stock_data: { impacts: [...], financial_data: {...} } }
→ 동일 섹션 구조, 정량 근거 기반, 재현 가능한 분석

AI 자동화 시스템

실전에서 얻은 설계 팁

impacts 배열은 외부 시스템에서 자동 생성합니다. 뉴스 크롤링과 이슈 분석 파이프라인이 종목별 영향도를 JSON으로 산출하고, 이를 리포트 생성 프롬프트에 그대로 주입합니다. 사람이 매번 이슈를 정리할 필요가 없습니다.

financial_data는 증권 API에서 실시간으로 가져옵니다. LLM이 재무 데이터를 "기억"에 의존하는 것이 아니라, 항상 최신 데이터를 입력받으므로 정확도가 보장됩니다.

투자 매력도 점수(100점 만점)는 financial_data 필드들의 가중 평균으로 사전 계산합니다. LLM이 점수를 "느낌"으로 매기는 것이 아니라, 입력된 점수를 해석하고 등급(매력적/보통/주의/위험)으로 변환하는 역할만 수행합니다.

핵심 정리

  • 구조화된 입력 스키마가 LLM 출력의 일관성을 결정합니다. JSON으로 이슈·재무·관계성을 명시하면 리포트 품질 편차가 크게 줄어듭니다
  • 정량 데이터는 반드시 외부에서 주입하세요. LLM의 "기억"에 의존하면 할루시네이션이 발생합니다
  • 출력 구조를 시스템 프롬프트에서 강제하면 어떤 종목을 넣어도 동일한 포맷의 리포트가 나옵니다
  • impact_strength, timeframe, relationship 같은 메타데이터 필드가 LLM의 분석 깊이와 방향을 제어하는 핵심 레버입니다
  • 이 패턴은 종목 리포트뿐 아니라, 일관된 구조가 필요한 모든 LLM 생성 문서(기업 분석, 제품 리뷰, 기술 평가 등)에 동일하게 적용할 수 있습니다