피드로 돌아가기
How I built the OSS alternatives directory: GitHub ETL, Turso, and the UPSERT trap I hit
Dev.toDev.to
Backend

Turso와 GitHub API 기반 ETL 파이프라인을 통한 OSS 디렉토리 자동화 설계

How I built the OSS alternatives directory: GitHub ETL, Turso, and the UPSERT trap I hit

MORINAGA2026년 6월 26일9intermediate

Context

SaaS 제품과 대응하는 Open Source 저장소의 메타데이터 및 비교 분석 콘텐츠를 효율적으로 관리해야 하는 상황. 정적인 JSON 시드 데이터와 동적인 API 데이터를 결합하여 최신성을 유지하는 데이터 모델 설계가 필요함.

Technical Solution

  • Turso libSQL 기반의 3-Table 스키마 설계를 통한 SaaS-Alternative-Content 간의 관계 정의
  • JSON 시드 데이터를 활용한 초기 DB 부트스트랩 과정에서 ON CONFLICT DO NOTHING 전략을 사용하여 기존 데이터 보호
  • GitHub REST API를 이용한 2단계 ETL 파이프라인 구축 및 ON CONFLICT DO UPDATE 적용을 통한 실시간 메타데이터 동기화
  • API Rate Limit(5,000 req/hr) 준수를 위해 호출 간 100ms Sleep 인터벌을 적용한 안정적 수집 구조 설계
  • Claude Haiku의 System-prompt Caching을 활용하여 반복적인 컨텍스트 전달 비용 최적화
  • 빌드 타임에 DB 연결을 배제하고 Astro가 JSON 파일을 읽도록 설계하여 런타임 의존성 제거

1. API 기반 데이터 수집 시 인증 토큰 사용 유무에 따른 Rate Limit 차이를 분석하여 Sleep 인터벌 설정

2. 초기 데이터 시딩 시에는 `DO NOTHING`을, 실시간 업데이트 시에는 `DO UPDATE`를 구분하여 데이터 덮어쓰기 방지

3. LLM 배치 처리 시 System-prompt Caching을 적용하여 입력 토큰 비용 절감 및 효율성 증대

4. API 404 응답 시 데이터를 즉시 삭제하지 않고 `deprecated_at` 필드로 상태를 관리하여 데이터 유실 방지

원문 읽기