← 프로젝트
운영 중2026.04 – 2026.06·기획 · 설계 · 개발 · 데이터 파이프라인

2026 지방선거 데이터 보도

Local Election 2026 — Data Desk

지도에서 내 지역을 고르면 후보·여론조사·지난 선거 결과·관련 뉴스가 한 화면에. 선거관리위원회 공식 데이터를 매일 자동 수집해 보여주는 노컷뉴스 선거 페이지.

서비스 열기비공개 저장소
  • React 19
  • Vite
  • react-simple-maps
  • Recharts
  • Python
  • GitHub Actions
  • Firebase Hosting
  • Cloudflare DNS
2026 지방선거 데이터 보도 아키텍처매일 갱신importruntime fetch선관위 여론조사심의위 — NESDC 크롤 + PDF 파싱선관위 여론조사심의위NESDC 크롤 + PDF 파싱중앙선관위 OpenAPI — 후보자 · 선거구중앙선관위 OpenAPI후보자 · 선거구8회 지방선거 개표 — xlsx8회 지방선거 개표xlsxPython 스크립트 — GitHub Actions cron 06:00 KSTPython 스크립트GitHub Actions cron 06:00 KSTsrc/assets/*.json — 커밋 → 빌드 포함src/assets/*.json커밋 → 빌드 포함React SPA — vote.nocut.newsReact SPAvote.nocut.newsGoogle Sheets — 관련 뉴스 큐레이션Google Sheets관련 뉴스 큐레이션
백엔드 없는 정적 SPA. 데이터는 봇이 매일 새벽 수집해 JSON으로 커밋하고, 빌드에 포함된다.

왜 만들었나

지방선거는 전국 단위 선거 중 가장 복잡합니다. 시·도지사, 시·군·구청장, 광역·기초의원, 교육감까지 한 사람이 7장 안팎의 투표용지를 받습니다. 그런데 뉴스는 대개 서울·경기 광역단체장 몇 곳의 여론조사에 집중됩니다. 독자가 사는 동네의 선거를 보여주는 페이지를 만들고 싶었습니다.

어떻게 동작하나

  1. 지도에서 고른다. 랜딩에서 시·도를 누르면 그 안의 시·군·구 지도로, 다시 누르면 선거구 상세로 내려갑니다.
  2. 공식 데이터만 쓴다. 여론조사는 중앙선거여론조사심의위원회(NESDC)에 등록된 조사만, 후보자는 중앙선관위 OpenAPI에서 가져옵니다. 조사 의뢰처·기관·표본·오차범위를 모든 그래프에 함께 표기합니다.
  3. 매일 새벽 스스로 갱신한다. GitHub Actions가 매일 06:00에 Python 스크립트를 돌려 새 여론조사 PDF를 파싱하고 JSON을 커밋합니다. 백엔드 서버가 없어서 선거 당일 트래픽에도 비용과 장애 걱정이 없었습니다.
  4. 선거 당일 밤에는 개표 현황을 15초 간격으로 폴링해 지도를 다시 칠했습니다.

배운 것

  • 선거법상 선거일 6일 전부터는 여론조사 공표가 금지됩니다. 데이터 페이지에서는 날짜 하나가 법 위반 여부를 가르기 때문에, 공표 기간을 늘 의식하며 화면을 설계해야 했습니다.
  • NESDC PDF는 조사마다 서식이 달라 자동 파싱이 종종 틀립니다. 파싱 결과에 출처 링크를 항상 붙여 독자와 데스크가 원문을 바로 확인하게 했습니다.
  • 광주·전남이 전남광주통합특별시로 합쳐진 첫 선거였습니다. 지도 경계 데이터는 아직 분리돼 있어 렌더 시점에 병합하는 처리가 필요했습니다.