IndexInfo vs IndexData

  • IndexInfo (지수 기본 정보):
    • 내용: 지수의 이름, 식별자, 카테고리(코스피/코스닥 등), 기준 시점 등 변하지 않거나 거의 변하지 않는 메타데이터
    • 역활: “이 지수가 무엇인가?”를 정의하는 기준 정보
  • IndexData (지수 시세 데이터):
    • 내용: 특정 날짜의 시가, 종가, 고가, 저가, 등락률, 거래량 등 매일 변하는 수치 데이터
    • 역활: IndexInfo에 연결된 구체적인 날짜별 가격 기록

OpenAPI로 데이터 수집

  1. IndexInfo (지수 기본 정보) 처리 과정
    • 목표: 지수의 목록(이름, ID) 관리 (예: 코스피, 코스닥, KRX 100 등)
    1. API 수신 (Fetch): 매일 7,000개 (전체 목록)를 받아옵니다.
    2. DB 저장 (Save): 0개 (대부분의 날)
      • 이유: 코드는 데이터를 하나씩 돌면서 “이 지수가 우리 DB에 이미 있나?” 확인합니다.
      • 어제 “코스피”를 저장했으면, 오늘 들어온 “코스피”는 중복이므로 저장하지 않고 건너뜁니다(Skip).
      • 만약 오늘 “코스피 200 신규 지수”가 새로 생겼다면, 그 1개만 새로 저장됩니다.
    • 예시 시나리오
      • 1월 1일: API에서 7,000개 옴 → DB가 비었으므로 7,000개 모두 저장.
      • 1월 2일: API에서 7,000개 옴 → DB에 이미 다 있음 → 0개 저장 (전부 Skip).
      • 1월 3일: API에서 7,001개 옴 (신규 지수 1개 추가됨) → 기존 7,000개는 Skip, 신규 1개만 저장
  2. IndexData (시세 데이터) 처리 과정
    • 목표: 우리가 “관심 지수”로 등록한 지수들의 오늘자 가격 저장
    1. API 수신 (Fetch): 매일 7,000개 (전체 목록의 오늘자 가격)를 받아옵니다.
    2. DB 저장 (Save): 사용자가 활성화한 개수만큼 (예: 5개 ~ 10개)
      • 이유: 코드에 filter 로직이 있습니다. 받아온 7,000개 중에서 내가 “수집하겠다”고 설정(Enable)한 지수 이름과 일치하는 데이터만 남기고 나머지는 버립니다.
    • 예시 시나리오
      • 상황: 나는 “코스피”, “코스닥” 딱 2개만 추적하고 싶어서 활성화해둠.
      • 동작:
        1. API가 7,000개의 오늘 가격 정보를 줍니다. (코스피, 코스닥, 섬유의복, 화학, 건설업 등등…)
        2. 코드에서 필터링을 돌립니다.
          • “섬유의복 지수” → 활성화 안 됨 → 버림.
          • “코스피” → 활성화 됨 → 저장.
          • “코스닥” → 활성화 됨 → 저장.
        3. 결과적으로 DB에는 오늘 날짜로 **2개 행(Row)**만 INSERT 됩니다.