데이터 파이프라인 실행과 갱신¶
한 줄 요약: 파이프라인을 "돌린다"는 것은 정해 둔 프로그램을 한 번 실행해 출력 표를 다시 쓰는 일이다. 무엇이 실행 때마다 바뀌는 값인지 알아야 갱신 작업을 줄일 수 있다.
📍 만난 상황¶
- 2026-11-09 — 2번 물음 → 그날 일지
- 13:55 시니어에게 아키텍처를 설명할 순서를 받는 중이었다. 답에 "정규화 파이프라인을 돌리면 카탈로그 표도 갱신된다"는 말이 나왔다. 파이프라인을 돌리는 것과 표가 갱신되는 것이 무슨 관계인지 물었다.
- 13:56 실행할 때마다 출력 표가 통째로 다시 쓰인다는(
overwrite) 설명을 들었다. 그리고 다시 물었다. "강남구 = 11680 같은 정적 데이터만 들어가는데, 갱신할 이유가 있나?" - 결론: 메타데이터에는 정적인 값만 두고, 바뀌는 값(행 수·보유 기간)은 필요할 때 직접 묻기로 했다.
🧩 쉽게 말하면¶
파이프라인은 빵 공장의 생산 라인이다. 밀가루(원천 데이터)를 넣고 스위치를 누르면, 반죽·굽기·포장(단계들)을 거쳐 진열대(출력 표)에 빵이 놓인다.
"파이프라인을 돌린다"는 스위치를 한 번 누르는 것이다. 누를 때마다 진열대의 빵이 새 빵으로 바뀐다. 이것이 "표가 갱신된다"는 말이다.
라인이 없으면 사람이 매번 손으로 반죽하고 구워야 한다. 그러면 빠뜨리거나 순서를 틀리기 쉽다.
📖 제대로 알기¶
파이프라인¶
데이터 파이프라인은 데이터를 읽고 → 바꾸고 → 쓰는 단계를 순서대로 묶어 둔 프로그램이다. 흔히 ETL(Extract 추출 · Transform 변환 · Load 적재)이라고도 부른다.
- 단계(노드·태스크): 라인의 기계 하나. 예: "강우 원천을 읽어 정규화하기".
- 입력 표 / 출력 표: 단계가 읽는 표와 결과를 쓰는 표.
- 실행(run): 파이프라인을 한 번 처음부터 끝까지 돌리는 것. 실행마다 기록(언제, 성공했나)이 남는다.
언제 실행되나¶
| 방식 | 뜻 |
|---|---|
| 수동 실행 | 사람이 버튼을 눌러 한 번 돌림 |
| 일정 실행 | "매일 02시"처럼 정해진 시각에 자동으로 돌림(cron: 시각 규칙을 적는 형식) |
| 이벤트 실행 | 앞 파이프라인이 끝나면 이어서 돌림 |
일정이 꺼져 있으면, 누가 돌리기 전까지 표는 마지막 실행 결과 그대로 멈춰 있다.
출력 표에 쓰는 방식¶
| 방식 | 하는 일 |
|---|---|
| overwrite(통째 교체) | 예전 내용을 지우고 새 결과로 바꿈 |
| append(덧붙이기) | 예전 줄은 두고 새 줄만 뒤에 붙임 |
| upsert(있으면 고치고 없으면 추가) | 키가 같은 줄은 고치고, 새 키는 추가 |
정적인 값과 바뀌는 값¶
메타데이터(데이터에 대한 설명 정보)에도 두 종류가 있다.
- 정적인 값: 한 번 정하면 거의 안 바뀐다. 예:
11680 = 강남구, "대피시설은norm_civil_shelter표에 있다", 열 설명. - 바뀌는 값(파생 값): 데이터가 늘 때마다 달라진다. 예: 행 수, 보유 기간(가장 이른·늦은 날짜), 마지막 갱신 시각.
바뀌는 값을 어딘가에 적어 두면, 데이터가 바뀔 때마다 그 기록도 고쳐야 한다. 이게 "갱신 작업"이 생기는 이유다.
⚙️ 어떻게 동작하나¶
- 수집 파이프라인 실행: 원천 API에서 새 데이터를 받아 원천 표에 쓴다.
- 정규화 파이프라인 실행: 갱신된 원천 표를 읽어 위치·시간 형식을 맞춘 뒤
norm_*표에 쓴다. - (선택) 파생 값 기록: 같은 실행에서 행 수·보유 기간을 계산해 카탈로그에도 쓴다.
- 조회: 대시보드는 그 시점의 출력 표를 읽는다.
flowchart LR
A["원천 API"] -->|"① 수집 실행"| B["원천 표"]
B -->|"② 정규화 실행"| C["norm_* 표"]
C -->|"필요할 때 SQL"| D["대시보드"]
M["정적 메타데이터<br/>코드표·태그·표 이름"] --> D
②는 ①이 끝난 뒤에 돌아야 한다. 정적 메타데이터는 이 흐름 밖에 있어서, 파이프라인이 돌아도 손댈 필요가 없다.
왜 순서가 중요한가: ②가 ①보다 먼저 돌면 어제 원천으로 정규화한다. 그래서 일정을 켤 때는 정규화를 수집보다 넉넉히 늦게 잡는다.
왜 overwrite를 쓰나: 같은 입력으로 몇 번을 돌려도 결과가 같다. 이 성질을 멱등성(여러 번 해도 한 번 한 것과 같은 성질)이라고 한다. 실패해서 다시 돌려도 줄이 두 배로 쌓이지 않는다.
🧪 예시¶
-
예시 1 · 일상에 빗대어: 빵집 칠판에 "오늘 식빵 30개"라고 적어 두었다. 오후에 20개를 더 구웠다. 칠판을 고치지 않으면 손님은 30개라고 믿는다. 칠판에 적지 않고 "몇 개 남았어요?" 물을 때마다 진열대를 세면, 칠판을 고칠 일 자체가 없다.
-
예시 2 · 실제로는: 그날 정규화를 다시 돌리자
norm_civil_shelter의normalized_at(정규화한 시각)이 10시대에서11:29:12로 바뀌었다. 표가 새로 쓰였다는 표시다. 바뀌는 값은 적어 두지 않고 이렇게 물으면 된다.
SELECT min(t_start), max(t_start), count()
FROM `disaster`.`norm_rainfall_10m`;
-- → 2026-11-05 00:09 | 2026-11-05 14:29 | 4159
min/max(t_start): 지금 가진 데이터의 처음과 끝 시각, 즉 보유 기간이다.
② count(): 지금 행 수다.
③ 이 질문은 매번 지금의 표를 보므로 항상 최신이다. 플랫폼 SQL 창구로 0.5초 안팎이 걸렸다.
⚖️ 비교 · 흔한 오해¶
| 방식 | 장점 | 단점 |
|---|---|---|
| 바뀌는 값을 표에 적어 둠 | 읽기가 아주 빠름 | 데이터가 바뀔 때마다 함께 고쳐야 함 |
| 필요할 때 계산 | 항상 최신, 갱신 작업 없음 | 묻는 시간이 듦 |
- 오해 1: "메타데이터 = 갱신해야 하는 것" — 그날 이렇게 헷갈린 이유는, 처음 제안된 카탈로그에 행 수·보유 기간이 섞여 있었기 때문이다. 정적인 값만 남기면 정기 갱신은 필요 없다. 손댈 때는 새 데이터셋을 추가할 때와 행정구역이 바뀔 때뿐이다.
- 오해 2: "파이프라인이 표를 조금씩 고친다" — 방식에 따라 다르다. overwrite면 통째로 바뀌고, append면 뒤에 붙는다. 어떤 방식인지 먼저 확인한다.
- 오해 3: "만들어 두면 알아서 최신이 된다" — 일정이 꺼져 있으면 수동으로 돌릴 때만 바뀐다.
🛠️ 실무에서는¶
- 체크리스트
- 출력 표의 쓰기 방식(overwrite·append·upsert)을 안다.
- 일정이 켜져 있는지, 앞 단계보다 늦게 도는지 본다.
- 두 번 돌려도 줄 수가 같은지(멱등성) 확인한다.
- 메타데이터에서 정적인 값과 바뀌는 값을 나눈다.
- 바뀌는 값을 적어 둬도 되는 때: 계산이 무겁고 자주 읽을 때다. 이때는 반드시 같은 실행 안에서 함께 쓴다. 따로 쓰면 데이터와 기록이 어긋난다.
- 문제가 생기면 먼저 볼 것: ① 마지막 실행 시각과 성공 여부 ② 출력 표의
normalized_at같은 처리 시각 열 ③ 앞 단계(수집)가 먼저 끝났는지.
❓ 자주 묻는 질문¶
- Q. 파이프라인을 돌리면 원본 데이터도 바뀌나? A. 아니다. 입력 표는 읽기만 하고, 출력 표만 쓴다.
- Q. overwrite 중에 누가 표를 읽으면 빈 표가 보이나? A. 플랫폼에 따라 다르다. 보통 새 결과를 다 만든 뒤 한 번에 바꿔 끼워 빈 순간을 줄인다. 처음 쓰는 플랫폼이면 문서로 확인한다.
- Q. 행 수를 매번 세면 느리지 않나? A. 분석용 DB(ClickHouse 등)는 개수 세기가 매우 빠르다. 실제로 1초 안쪽이었다. 느려질 때 캐시(잠시 기억해 두기)를 붙이면 된다.
🔭 더 깊이 보기¶
- 증분 처리(incremental)는 어떻게 하나? 데이터가 수백만 줄이 되면 매번 통째로 다시 쓰기 어렵다. 새로 들어온 부분만 처리하는 법이 다음 단계다.
- 파이프라인 의존성은 어떻게 관리하나? 수집이 실패하면 정규화를 멈추게 하는 방법이다. 이것이 Airflow 같은 워크플로 도구가 하는 일이다.
- 캐시와 최신성의 균형은? "언제 계산하고 언제 기억해 둘까"는 백엔드 설계 전반에 나오는 질문이다.
- 관련 주제: 프론트엔드와 백엔드 서버 구조 — 정기 작업을 어디서 돌릴지(Next.js는 정기 작업에 약함)
📚 참고 자료¶
- ETL이란 무엇인가요? (AWS 한국어) — 추출·변환·적재의 뜻과 흐름 · 링크
- 멱등성(Idempotent) (MDN 한국어 용어 사전) — 여러 번 해도 결과가 같은 성질 · 링크
- Apache Airflow Documentation (영문) — 파이프라인 일정·의존 순서를 다루는 대표 도구 · 링크
🗓️ 이력¶
- 2026-11-09: "파이프라인을 돌리면 표가 갱신된다"는 뜻과, 정적 메타데이터에 갱신이 필요한지 물음 → 일지