FE 엔지니어가 사내 데이터 파이프라인(
opn-data) 인수 가능한 수준까지 끌어올리기 위한 개인 커리큘럼.
opn-data 레포의 월간 병의원/매출 ETL 파이프라인을 혼자서 한 사이클 돌릴 수 있다.
구체적으로:
- HIRA/공공데이터 같은 외부 소스에서 데이터를 가져와
- pandas로 정제/매칭/중복제거 하고
- BigQuery에 적재하고
- 셸 스크립트/cron으로 자동화한다.
→ 이걸 위해 나만의 미니 ETL 파이프라인을 처음부터 끝까지 만들어본다.
- 하나만, 끝까지. 메뉴 늘리지 말고 한 프로젝트를 운영 단계까지 데려간다.
- 읽기 < 만들기. 책/강의는 막힐 때만. 손이 먼저.
- 회사 코드와 1:1로 매핑한다. 새로 배운 개념은 항상
opn-data의 어느 줄과 연결되는지 확인. - "매일 도는 것"을 만든다. 한 번만 돌리는 스크립트는 의미 없음. cron까지 가야 진짜.
"내 GitHub 활동 일일 트래커" — 매일 아침 9시에 어제 내 활동(커밋/PR/이슈)을 GitHub API로 받아 SQLite에 적재하고, 주간 리포트를 만든다.
왜 이거?
- 출처가 안정적(GitHub API) → 좌절 없음
- 내 데이터라 결과 보는 재미 있음
opn-data의 모든 패턴이 축소판으로 들어있음 (수집/정제/적재/스케줄)
각 주차 폴더에 코드 + NOTES.md(배운 점 / 막힌 점 / opn-data와의 연결고리)를 남긴다.
목표: pandas로 GitHub API 응답을 DataFrame으로 다루는 데 익숙해지기.
- Python 3.11 +
uv또는venv로 프로젝트 세팅 -
requests로 GitHub API에서 내 이벤트 가져오기 (/users/CodyMan0/events) - JSON → pandas DataFrame 변환
- 레포별/이벤트 타입별
groupby집계 - Kaggle Learn - Pandas 4시간 코스 완주
완료 기준: python fetch.py --date 2026-04-25 치면 어제의 내 활동 요약이 콘솔에 출력된다.
opn-data 연결: process_hospital_list.py의 pandas 조작 부분을 한 번 읽고, 어떤 함수가 익숙해졌는지 NOTES에 기록.
목표: 데이터를 "어딘가에 쌓고" "다시 꺼내오는" 사이클 만들기.
- SQLite 스키마 설계 (
events테이블: id PK, date, repo, type, payload JSON) -
INSERT OR REPLACE로 중복 방지 적재 - 매일 돌려도 깨지지 않게 idempotent하게 만들기
- SQL로 "이번 주 가장 활발한 레포 TOP 5" 쿼리 작성
- SQLBolt Lessons 1-12 완주
완료 기준: python load.py --date 2026-04-25를 두 번 돌려도 행이 중복되지 않는다.
opn-data 연결: utility.py의 write_table_to_db() 함수가 BigQuery에 어떻게 쓰는지 읽어보기. SQLite와의 차이점을 NOTES에 정리.
목표: "매일 자동으로 돈다"를 달성. 진짜 파이프라인의 첫 단계.
-
fetch.py+load.py합쳐run.sh작성 -
argparse로--date인자 받기 (어제 기본값, 백필 가능) - 실패 시 로그 남기기 (
logs/2026-04-25.log) - macOS
launchd또는cron으로 매일 09:00 실행 등록 - 실패하면 macOS 알림 띄우기 (보너스)
완료 기준: 일주일 동안 손대지 않아도 매일 데이터가 쌓여있다.
opn-data 연결: run_crawl_hira.sh, run_upload.sh 같은 셸 스크립트를 한 줄씩 읽고 패턴 비교.
목표: 인수인계 시 가장 큰 진입장벽인 BigQuery에 익숙해지기.
- GCP 가입 ($300 무료 크레딧) → BigQuery 샌드박스 활성화
- 서비스 계정 생성 + JSON 키 발급 (1Password에 저장)
-
google-cloud-bigquery라이브러리로 SQLite → BigQuery 적재 - 파티션 테이블(
PARTITION BY DATE(created_at)) 만들어보기 -
WRITE_TRUNCATEvsWRITE_APPEND직접 실험 - BigQuery 콘솔에서 SQL 짜서 결과 확인
완료 기준: BigQuery 콘솔에서 내 활동 데이터를 SQL로 조회할 수 있다.
opn-data 연결: 회사 BigQuery 권한 받으면 call_prod_db()가 실제로 어떤 테이블을 읽는지 직접 확인.
위 4주를 끝낸 뒤 동기 남으면:
SQLite/BigQuery → Next.js 대시보드. 차트로 내 GitHub 활동 시각화. 포트폴리오 1개 + "데이터 → UI" 풀 사이클 경험.
HIRA 공개 데이터 일부로 "내 동네 병의원 변화 트래커" 미니 버전 제작. 회사에서 하는 일의 소형 복제판 → 인수인계 시 강력한 시그널.
dbt로 SQL 모델링 / Prefect로 워크플로 관리 한 번 맛보기.
opn-data를 더 견고하게 만드는 방향성을 보고 싶다면.
| 주제 | 자료 | 분량 |
|---|---|---|
| pandas | Kaggle Learn - Pandas | 4h |
| SQL 기초 | SQLBolt | 2h |
| SQL 실무 패턴 | Mode SQL Tutorial | 4h |
| BigQuery | Quickstart | 1h |
| pandas 깊게 | 《파이썬 라이브러리를 활용한 데이터 분석》 (웨스 매키니) | 사전처럼 |
4주 끝났을 때 자가 점검:
- pandas로
groupby,merge, 결측치 처리를 막힘 없이 한다 - SQL로 JOIN, GROUP BY, 윈도우 함수 기본을 쓴다
- 셸 스크립트와 cron/launchd로 작업을 자동화할 수 있다
- BigQuery에 테이블 만들고 데이터 넣어봤다
-
opn-data레포의process_hospital_list.py를 끝까지 읽고 80% 이해한다 - 막혔을 때 어디(공식 문서/코드/AI)를 먼저 봐야 할지 안다
→ 5개 이상 체크되면 현 담당자 옆에서 다음 달치 같이 돌려볼 준비 완료.
매주 끝에 한 줄씩 추가.
| 주차 | 시작일 | 종료일 | 결과물 | 한 줄 회고 |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 |
- 막히면 2시간만 혼자 헤매고 AI/사람한테 묻는다 (자존심 < 진도)
- 매주 NOTES.md를 쓴다 (안 쓰면 다 잊어버림)
- "재미 없으면 그만둔다"도 옵션으로 열어둔다 (이것도 정보)