DART API로 종목 프로필 자동 보강하기 — 기업 정보에 AI 분석을 얹는 방법
문제: 종목 코드만으로는 투자 판단이 안 된다
주식 분석 시스템을 만들 때 가장 먼저 부딪히는 벽은 기업 정보의 빈약함입니다. DART API에서 가져올 수 있는 데이터는 업종코드, 설립일, 대표이사, 결산월 정도가 전부입니다. 이것만으로는 "이 가 뭘 하는 곳인지", "어떤 섹터에 속하는지", "주요 제품이 뭔지" 파악할 수 없습니다.
종목 수가 수백 개를 넘어가면 하나하나 수작업으로 프로필을 채우는 것은 불가능합니다. DART 공시 데이터를 AI에 넘겨서 투자자 관점의 기업 프로필을 자동 생성하는 방식을 설계했습니다.
핵심 아이디어: 최소 입력으로 최대 인사이트 뽑기
DART API가 제공하는 데이터는 다음이 전부입니다.
{
"corp_name": "비지에프리테일",
"stock_code": "282330",
"induty_code": "47122",
"est_dt": "20171101",
"ceo_nm": "민승배",
"acc_mt": "12"
}
이 6개 필드만으로 AI가 사업 요약, 주요 제품, 투자 섹터 분류를 생성해야 합니다. 핵심은 업종코드와 기업명의 조합입니다. 업종코드 47122는 "소매점(음료, 담배 제외)"을 의미하고, 기업명 "비지에프리테일"에서 BGF Retail(CU 편의점)이라는 정보를 추론할 수 있습니다.
프롬프트 설계: 구조화된 출력을 강제하는 방법
프롬프트의 핵심 설계 원칙은 세 가지입니다.
1. 역할과 출력 형식을 먼저 고정합니다.
# 종목 프로필 AI 보강 프롬프트
DART 기업 정보를 바탕으로 투자자 관점의 기업 프로필을 작성하세요.
## 출력 규칙
- 반드시 JSON 형식으로만 응답 (설명 텍스트 없이)
- 확인된 사실만 기술, 추측 금지
- 정보가 부족하면 해당 필드를 간결하게 작성
JSON 전용 응답을 강제하면 후처리 파싱이 간단해집니다. "설명 텍스트 없이"라는 제약이 없으면 AI가 앞뒤로 부연 설명을 붙여서 파싱이 깨집니다.
2. 각 필드별 작성 지침을 구체적으로 명시합니다.
## 작성 지침
1. **business_summary**: 투자자 관점에서 2~3문장으로 사업 내용을 요약
- 주력 사업 영역, 시장 내 위치, 핵심 경쟁력 포함
- 업종코드와 기업명을 단서로 판단
2. **main_products**: 주요 제품/서비스 목록 (3~5개)
3. **sector**: 투자 섹터 분류
(반도체, 2차전지, 바이오, IT, 금융, 소비재, 에너지, 소재, 산업재, 유틸리티 등)
business_summary에 "투자자 관점에서"라는 한정어를 넣은 것이 중요합니다. 이 문구가 없으면 AI는 백과사전식 설명을 생성합니다. 투자자 관점을 명시하면 시장 점유율, 경쟁 구도, 성장성 같은 투자 관련 정보가 자연스럽게 포함됩니다.
3. 입력 데이터를 명확한 구조로 전달합니다.
## 입력 데이터
- 기업명: 비지에프리테일 (282330)
- DART 업종코드: 47122
- 설립일: 20171101
- 대표이사: 민승배
- 결산월: 12
실제 출력 결과
위 프롬프트로 비지에프리테일을 보강한 결과입니다.
{
"business_summary": "CU 브랜드 편의점 프랜차이즈 운영을 통해 국내 유통 시장에서 주요 지위를 차지하고 있는 소매 유통업체입니다. 편의점 가맹점주와 소비자를 연결하는 플랫폼 역할을 수행하며, 점포 운영 지원, 상품 공급, POS 시스템 등 종합 서비스를 제공합니다.",
"main_products": [
"CU 편의점 프랜차이즈",
"PB 상품 개발 및 공급",
"편의점 물류 서비스",
"가맹점 운영 지원"
],
"sector": "소비재"
}
업종코드 47122(소매점)와 기업명 "비지에프리테일"만으로 CU 편의점이라는 핵심 정보와 프랜차이즈 비즈니스 모델까지 정확하게 추론한 결과입니다.
자동화 파이프라인 구성
이 프롬프트를 시스템에 통합하는 구조는 다음과 같습니다.
DART API → 기업 기본정보 수집 → 프롬프트 생성 → AI 호출 → JSON 파싱 → DB 저장
실제 구현에서 주의할 점은 배치 처리 시 rate limiting입니다. 수백 종목을 한꺼번에 보강하면 API 호출 제한에 걸리므로, 큐 기반으로 순차 처리하거나 적절한 딜레이를 두어야 합니다.
프롬프트 설계에서 얻은 교훈
섹터 분류 목록을 직접 제시하세요. sector 필드에 가능한 값을 열거하지 않으면 AI가 매번 다른 분류 체계를 사용합니다. "유통", "리테일", "소비재", "생활소비재" 같은 유사 값이 혼재하면 이후 필터링이 불가능해집니다.
"추측 금지"는 필수 제약입니다. 이 문구가 없으면 AI가 매출 규모나 시장 점유율 같은 수치를 지어내는 경우가 있습니다. DART 데이터만으로 확인할 수 없는 정량 정보는 생성하지 않도록 명시적으로 제한해야 합니다.
출력 형식 예시를 포함하세요. 프롬프트 끝에 기대하는 JSON 스키마를 보여주면 필드명 오타나 구조 불일치가 크게 줄어듭니다.
## 출력 형식
\```json
{
"business_summary": "string",
"main_products": ["string"],
"sector": "string"
}
\```
핵심 정리
- DART API의 최소 데이터(업종코드 + 기업명)만으로 투자자 관점의 기업 프로필 자동 생성이 가능합니다
- 프롬프트에 **"투자자 관점"**이라는 한정어를 추가하면 출력 품질이 달라집니다
- JSON 전용 응답 강제 + 추측 금지 + 섹터 목록 열거가 안정적인 출력의 핵심입니다
- 배치 처리 시 API rate limiting 대응이 필요합니다