📚 국립중앙도서관 API로 25년치 도서 데이터 백필 파이프라인 만들기

에어플로우 없이, 끊겨도 자동으로 이어받는 신뢰성 높은 ETL을 설계한 이야기 1. 만들게 된 이유 국립중앙도서관(NLK) 은 서지정보API를 통해 한국에 등록된 모든 도서의 서지 데이터를 공개하고 있다. 나는 2000년 1월부터 2024년 12월까지, 즉 25년치 전체 데이터를 PostgreSQL(Supabase) 에 저장해 보고 싶었다. 처음엔 단순히 “API를 루프 돌리면 되겠지” 싶었다. 하지만 실제로는 아래 문제들을 해결해야 했다. 호출 제한(rate limit)과 연결 끊김(timeout) 25년 × 12개월 = 300개월 분량의 데이터 EC2 연결이 중간에 끊기는 문제 수백만 건 JSON의 중복 삽입 방지 2. NLK API 이해하기 참고: 국립중앙도서관 서지정보 API 문서 ...

10월 22, 2025

🚀 핀테크 배치 ETL 파이프라인 — 모듈식으로 구축하기

👉 Code, Portfolio, Blog, and LinkedIn 🎯 거래 데이터 배치 파이프라인 어느날 K-pop 데몬 헌터들이 핀테크 스타트업을 만들었다고 가정하자. 이제 그들은 매일 수백만 건의 신용카드 거래를 처리하고 이해해야 한다. ...

9월 12, 2025

PostgreSQL의 의외의 함정: Boolean, 텍스트 I/O, 그리고 ETL 이슈

PostgreSQL은 강력하고 표준을 잘 따르는 데이터베이스입니다. 하지만 의외의 작은 함정들도 있죠. 그중 하나는 바로 boolean 값을 다루는 방식, 특히 데이터를 텍스트 형식으로 내보낼 때의 이야기입니다. 🧠 PostgreSQL의 Boolean 처리 방식: 생각과 다르다 PostgreSQL은 boolean 값을 내부적으로 1비트(bit) 만으로 효율적으로 저장합니다. 예상한 대로죠. 하지만 그 값을 텍스트로 변환하거나 COPY 같은 방식으로 내보내면, 결과는 좀 다릅니다: SELECT true::text; -- 결과: 't' SELECT false::text; -- 결과: 'f' 맞습니다 — true는 't', false는 'f' 로 표현됩니다. 이건 PostgreSQL의 텍스트 I/O 기본 동작 방식인데, 이 동작 때문에 시스템 간 데이터를 주고받을 때 미묘한 버그가 생기기도 합니다. ...

6월 10, 2025

🔧 왜 Airflow는 init, scheduler, webserver를 따로 띄울까?

Airflow 조금 만지다 보면, 대부분 이렇게 서비스가 나뉘어 돌아가는 걸 보게 됩니다. airflow-init airflow-scheduler airflow-webserver “이걸 굳이 왜 이렇게 쪼개?” 라는 생각이 들 수 있는데요. 이게 바로 실전 운영 방식입니다. 1️⃣ airflow-init — 준비 담당 다른 이름으로 airflow-db-migrate 나 airflow-bootstrap 이라고 부르기도 합니다. 딱 한 번만 실행되는 프로세스입니다. 하는 일: airflow db upgrade → DB 스키마 최신화 (DB 구조 최신으로 맞춰줌) 최초 admin 유저 생성 중요 포인트: 이건 계속 도는 서비스가 아닙니다. 할 일 다 하면 바로 종료 (exit code 0). ...

5월 30, 2025