콘텐츠로 이동

데이터 파이프라인 실행과 갱신

11/9(월)

한 줄 요약: 파이프라인을 "돌린다"는 것은 정해 둔 프로그램을 한 번 실행해 출력 표를 다시 쓰는 일이다. 무엇이 실행 때마다 바뀌는 값인지 알아야 갱신 작업을 줄일 수 있다.

📍 만난 상황

  • 2026-11-09 — 2번 물음 → 그날 일지
  • 13:55 시니어에게 아키텍처를 설명할 순서를 받는 중이었다. 답에 "정규화 파이프라인을 돌리면 카탈로그 표도 갱신된다"는 말이 나왔다. 파이프라인을 돌리는 것과 표가 갱신되는 것이 무슨 관계인지 물었다.
  • 13:56 실행할 때마다 출력 표가 통째로 다시 쓰인다는(overwrite) 설명을 들었다. 그리고 다시 물었다. "강남구 = 11680 같은 정적 데이터만 들어가는데, 갱신할 이유가 있나?"
  • 결론: 메타데이터에는 정적인 값만 두고, 바뀌는 값(행 수·보유 기간)은 필요할 때 직접 묻기로 했다.

🧩 쉽게 말하면

파이프라인은 빵 공장의 생산 라인이다. 밀가루(원천 데이터)를 넣고 스위치를 누르면, 반죽·굽기·포장(단계들)을 거쳐 진열대(출력 표)에 빵이 놓인다.

"파이프라인을 돌린다"는 스위치를 한 번 누르는 것이다. 누를 때마다 진열대의 빵이 새 빵으로 바뀐다. 이것이 "표가 갱신된다"는 말이다.

라인이 없으면 사람이 매번 손으로 반죽하고 구워야 한다. 그러면 빠뜨리거나 순서를 틀리기 쉽다.

📖 제대로 알기

파이프라인

데이터 파이프라인은 데이터를 읽고 → 바꾸고 → 쓰는 단계를 순서대로 묶어 둔 프로그램이다. 흔히 ETL(Extract 추출 · Transform 변환 · Load 적재)이라고도 부른다.

  • 단계(노드·태스크): 라인의 기계 하나. 예: "강우 원천을 읽어 정규화하기".
  • 입력 표 / 출력 표: 단계가 읽는 표와 결과를 쓰는 표.
  • 실행(run): 파이프라인을 한 번 처음부터 끝까지 돌리는 것. 실행마다 기록(언제, 성공했나)이 남는다.

언제 실행되나

방식 뜻
수동 실행 사람이 버튼을 눌러 한 번 돌림
일정 실행 "매일 02시"처럼 정해진 시각에 자동으로 돌림(cron: 시각 규칙을 적는 형식)
이벤트 실행 앞 파이프라인이 끝나면 이어서 돌림

일정이 꺼져 있으면, 누가 돌리기 전까지 표는 마지막 실행 결과 그대로 멈춰 있다.

출력 표에 쓰는 방식

방식 하는 일
overwrite(통째 교체) 예전 내용을 지우고 새 결과로 바꿈
append(덧붙이기) 예전 줄은 두고 새 줄만 뒤에 붙임
upsert(있으면 고치고 없으면 추가) 키가 같은 줄은 고치고, 새 키는 추가

정적인 값과 바뀌는 값

메타데이터(데이터에 대한 설명 정보)에도 두 종류가 있다.

  • 정적인 값: 한 번 정하면 거의 안 바뀐다. 예: 11680 = 강남구, "대피시설은 norm_civil_shelter 표에 있다", 열 설명.
  • 바뀌는 값(파생 값): 데이터가 늘 때마다 달라진다. 예: 행 수, 보유 기간(가장 이른·늦은 날짜), 마지막 갱신 시각.

바뀌는 값을 어딘가에 적어 두면, 데이터가 바뀔 때마다 그 기록도 고쳐야 한다. 이게 "갱신 작업"이 생기는 이유다.

⚙️ 어떻게 동작하나

  1. 수집 파이프라인 실행: 원천 API에서 새 데이터를 받아 원천 표에 쓴다.
  2. 정규화 파이프라인 실행: 갱신된 원천 표를 읽어 위치·시간 형식을 맞춘 뒤 norm_* 표에 쓴다.
  3. (선택) 파생 값 기록: 같은 실행에서 행 수·보유 기간을 계산해 카탈로그에도 쓴다.
  4. 조회: 대시보드는 그 시점의 출력 표를 읽는다.
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: "파이프라인을 돌리면 표가 갱신된다"는 뜻과, 정적 메타데이터에 갱신이 필요한지 물음 → 일지

🕸️ 연결된 주제