Skip to content

DART API 특이사항

TLS 호환성 — Go 기본값으로 handshake 실패

DART (opendart.fss.or.kr) 서버는 낡은 스택 유지. Go 기본값으로 호출하면 tls: handshake failure.

  • TLS 1.2 전용 (1.3 미지원)
  • HTTP/1.1 전용 (HTTP/2 ALPN 협상 거부)
  • Cipher suite: AES128-GCM-SHA256 (= TLS_RSA_WITH_AES_128_GCM_SHA256, RSA key exchange). Go 1.17+ 기본 ciphers 에서 제외됨

해결책은 backend/internal/disclosure/dart_client.go:NewDartHTTPClient() 에 구현. 새 DART 엔드포인트 다른 패키지에서 호출 시 반드시 이 헬퍼 재사용.

corpCode.xml 필드 한계

1 회 호출로 전체 기업 (~116,000건) 받는 유일한 수단. 필드 빈약:

corp_code, corp_name, corp_eng_name, stock_code (공백이면 비상장), modify_date

시장 구분 (KOSPI/KOSDAQ/KONEX) 필드 없음. stock_code IS NOT NULL 로 필터해도 ~3,959 건 — 여기엔 과거 상장폐지 기업 도 포함 (DART 가 stock_code 안 지움).

시장 구분 필요 시 company.json 을 corp_code 별로 호출. 응답 corp_cls:

  • Y = KOSPI
  • K = KOSDAQ
  • N = KONEX
  • E = 기타

현재 종목 마스터 동기화는 이 방식 (internal/stock/master_sync.go).

Rate Limit

공식 문서 명시 X — 경험적으로 분당 1,000 건 안전. 현재 master_sync 12 req/s 제한 (golang.org/x/time/rate).

공시 수집 범위

백필 / 실시간 모니터 모두 corp_cls ∈ {Y, K} 만 (코넥스 / 비상장 스킵). backfill.go:115 하드코딩.