디버깅 · 모니터링 · 분석가에 인계
운영 중 실패한 파이프라인의 원인을 로그 · 노드 상태 · 데이터 미리보기 세 면으로 좁히고, 같은 표면에서 데이터셋 권한을 정리해 분석가에게 인계하기까지를 한 사이클로 닫습니다.
지금까지 만든 파이프라인이 매일 새벽에 알아서 돌고 있다고 합시다. 어느 날 알림이 옵니다 — "어제 새벽 실행이 실패했습니다." 이번 레슨은 그 실패의 원인을 어디서부터 보는지, 무엇을 다시 돌리는지, 마지막에 자기 데이터셋을 분석가에게 어떻게 깔끔히 인계하는지까지 한 번에 다루며 코스를 닫습니다.
실패의 세 면 — 로그 · 노드 상태 · 데이터 미리보기
포털의 실행 결과 화면은 세 면을 한 화면에 보여 줍니다.
- 실행 로그 — 시간순 텍스트 스트림. 보통 마지막 줄이 가장 중요합니다.
- 노드 상태 — 캔버스 위 각 노드가 녹색(성공)·빨강(실패)·회색(미실행)으로 표시됩니다.
- 데이터 미리보기 — 성공한 노드에 한해 출력 샘플 행을 우측 패널에서 볼 수 있습니다.
세 면을 같이 봐야 원인이 빨리 좁혀집니다.
디버깅 첫 5분 — 어디서 멈췄는가
다음 순서가 가장 짧은 길입니다.
- 실패 알림에서 실행 상세 링크를 누른다.
- 캔버스에서 빨간 노드 하나를 찾는다. 보통 하나. 그 앞 노드는 녹색, 뒤 노드는 회색.
- 빨간 노드를 클릭해 우측 패널의 로그 탭을 연다. 마지막 줄이 어떤 컬럼의 어떤 값에서 멈췄는지 자주 적시합니다.
- 같은 패널의 데이터 미리보기 탭에서 직전 녹색 노드의 출력을 본다. 보통 여기서 입력 데이터의 모양이 어제와 달라졌다는 사실이 한눈에 들어옵니다.
이 네 단계로 80% 이상의 실패는 입력 스키마 변경 또는 외부 시스템 일시 장애 두 갈래로 좁혀집니다.
흔한 실패 카테고리와 다음 행동
| 카테고리 | 신호 | 다음 행동 |
|---|---|---|
| 입력 스키마 변경 | 직전 녹색 노드 출력에 새 컬럼 또는 없어진 컬럼 | 02 레슨의 커넥터 매핑을 다시 펴서 명시적 컬럼 선택으로 잠그기 |
| 타입 불일치 | 로그에 could not cast '...' to int64 같은 메시지 | 04 레슨의 코드 노드에 try/except 후 행 격리 추가 |
| 외부 시스템 일시 장애 | 로그가 timeout 또는 5xx로 끝남 | 본문 변경 없이 재실행 한 번. 분 단위로 정상화되면 그대로 종료 |
| 권한 회수 | 로그가 401/403 또는 permission denied | 시크릿 저장소에서 자격증명 갱신, 또는 운영팀에 권한 회복 요청 |
| 데이터 품질 임계치 미달 | 데이터 품질 체크 노드가 빨강 | 임계치 자체가 너무 빡빡한지, 입력에서 실제로 빠진 게 있는지 결정 |
판단이 끝나면 둘 중 하나입니다 — 재실행 또는 코드·매핑 변경 후 재실행.
부분 재실행 — 같은 파이프라인의 일부만 다시 돌리기
전체를 처음부터 다시 도는 비용이 클 때 포털은 빨간 노드부터 재실행 옵션을 제공합니다.
- 캔버스 우상단 재실행 버튼의 작은 화살표를 누르면 처음부터 / 실패 노드부터 둘이 뜹니다.
- 실패 노드부터를 고르면 직전 녹색 노드의 출력이 캐시처럼 다시 입력으로 들어가고, 빨간 노드와 그 뒤만 다시 돕니다.
source 단계가 외부 시스템에 대량 read를 거는 형태라면 이 옵션이 운영 부담을 크게 줄여 줍니다.
운영 중에 항상 보는 두 신호
실패가 알려질 때까지 기다리지 않으려면 다음 두 신호를 대시보드 하나에 둡니다.
- 파이프라인 실행 이력 — 최근 N일 실행 결과를 시각화로 보여 주는 위젯. 같은 시각에 늘 녹색이 찍히고 있는지 한눈에.
- 각 마트 데이터셋의 행 수 추세 — 어제와 오늘의 행 수가 ±N% 이상 변하면 색이 바뀌는 위젯. 실행은 성공했지만 데이터가 비어 들어오는 silent failure를 잡습니다.
둘 다 분석가 코스 04·05 레슨의 기본 위젯으로 만들 수 있습니다. 권한·감사 측면의 조직 수준 모니터링(누가 무엇을 실행했는지, 자격증명이 언제 갱신됐는지)은 별도 관리자 코스가 다룹니다.
분석가에게 인계 — 데이터셋 권한 두 줄
운영이 안정되면 마지막 한 단계는 본인이 만든 마트 데이터셋을 분석가에게 인계하는 일입니다. 인계는 짧습니다.
- 마트 데이터셋이 떨어지는 컬렉션을 분석가용 컬렉션으로 분리 (02 레슨에서 원본은 엔지니어 컬렉션으로 격리한 것의 짝).
- 그 컬렉션에 분석가 그룹의 Reader 권한 부여.
- 데이터셋 페이지의 설명 한 줄에 어떤 시점, 어떤 단위, 어떤 빈도를 적기 (예: "매일 03:07 갱신 · 어제까지의 누적 주문 · 통화 KRW").
- 데이터셋 페이지의 소유자를 본인으로. 위젯이 깨졌을 때 분석가가 누구에게 핑할지 알게 됩니다.
이 네 줄이면 분석가의 컬렉션 탐색기에 내가 만든 마트 데이터셋이 떠 있고, 그 위로 위젯이 쌓이기 시작합니다. 엔지니어의 출력 = 분석가의 입력이 한 포털 안에서 닫히는 구조의 마지막 매듭.
코스 완료 — 다음에 무엇을 할까
여기까지 왔다면 외부 시스템에서 출발해 분석가의 위젯 입력까지 도달하는 한 사이클을 직접 만든 것입니다. 다음 학습 후보.
- 워크숍: 리테일 재고 인텔리전스 — 이 코스의 모든 표면이 시나리오 한 건 안에서 한 번에 엮입니다. 분석가 시점과 엔지니어 시점이 같은 컬렉션 안에서 만나는 흐름이라, 직전 레슨의 인계 단계가 실제로 어떻게 도는지 확인할 수 있습니다.
- 튜토리얼: 시나리오 빠른 import —
dhub2-examples의 한 시나리오를 자기 환경에 1줄로 적재. 워크숍 1단계와 같은 도구를 미리 만져 봅니다. - 분석가 코스 — 자기가 만든 데이터셋이 분석가의 컬렉션 트리에 어떻게 보이는지 직접 확인. 인계의 받는 쪽 시점을 한 번 거치면 다음 마트 작업이 한층 짧아집니다.
모든 레슨 옆 체크박스를 채우면 코스가 완료로 기록됩니다. 이후 학습은 홈의 "이어서 학습하기" 패널에 추천 흐름으로 떠 있습니다.
수고하셨습니다.