본문 바로가기
C.W.K.
Stream
Lesson 07 of 08 · published

파이프라인 — 포맷 가로지르는 데이터 wrangling

~10 min · interop, pipelines, yq, jq

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

실제 파이프라인이 포맷 잇음

전형적 파이프라인 모양

실무 워크플로우는 대개 이런 모양이야. JSON 을 받아와서 → 거르고 → 바꾼 다음 → YAML 이나 TOML, Markdown 으로 뱉기. 그 사이를 이어주는 게 jq 와 yq, 그리고 템플릿 단계고. 아래에 당장 오늘 써먹을 수 있는 파이프라인 세 개를 뒀어.

파이프라인 1 — GitHub PR 목록을 Markdown 리포트로

gh 로 열린 PR 을 JSON 으로 받아와서, 거르고, Markdown 테이블로 찍어.

파이프라인 2 — pyproject.toml 의 의존성을 requirements 목록으로

pyproject.toml 을 파싱해서 [project.dependencies] 만 뽑고, 평평한 requirements.txt 로 내보내.

파이프라인 3 — 평평한 key-value YAML 에서 Kubernetes ConfigMap 으로

env-var 를 key/value 로만 늘어놓은 YAML 을 읽어서 K8s ConfigMap 모양으로 감싸.

원칙: 여기서도 Unix 철학이 그대로 먹혀. 작고, 이어 붙일 수 있고, 포맷을 아는 도구들. cat | yq | jq | python -c '...' > out 이 진짜 실무 워크플로우야. 파이프 네 개면 끝날 일에 커다란 스크립트부터 짜고 싶은 충동은 참아. 대신 shell 함수로 한 번 저장해두고 두고두고 다시 써.

Code

파이프라인 1 — PR 리스트 → Markdown·bash
# Open PR JSON fetch, 필터, Markdown 테이블 emit
gh pr list --json number,title,author,createdAt --limit 50 \
  | jq -r '
      ["| # | Title | Author | Created |",
       "|---|---|---|---|"] +
      (. | map("| #\(.number) | \(.title) | @\(.author.login) | \(.createdAt[:10]) |"))
      | join("\n")
    ' > pr-report.md

# macOS 에선 클립보드로 직접 파이프
# ... | pbcopy
파이프라인 2 — pyproject 의 deps → requirements.txt·bash
# pyproject.toml 에서 deps 추출, requirements.txt 작성
yq -p toml '.project.dependencies[]' pyproject.toml > requirements.txt

# 또는 [tool.poetry.dependencies] 형태 (Poetry 프로젝트):
yq -p toml -o json '.tool.poetry.dependencies' pyproject.toml \
  | jq -r 'to_entries | map("\(.key)==\(.value)") | .[]' \
  > requirements.txt
파이프라인 3 — flat YAML → K8s ConfigMap·bash
# env.yaml — flat key/value 리스트
cat env.yaml
# DATABASE_URL: postgresql://localhost/pippa
# LOG_LEVEL: info
# PORT: "8000"

# ConfigMap emit (jq 스타일 yq 필터)
yq '
  {"apiVersion": "v1",
   "kind": "ConfigMap",
   "metadata": {"name": "pippa-env"},
   "data": .}
' env.yaml > configmap.yaml
재사용 가능한 shell 함수·bash
# dotfiles 에 추가
yaml2json() { yq -o json "$@"; }
json2yaml() { yq -p json -o yaml "$@"; }
toml2yaml() { yq -p toml -o yaml "$@"; }
yaml2toml() { yq -o toml "$@"; }

# 사용
yaml2json config.yaml > config.json
toml2yaml pyproject.toml | less

External links

Exercise

지금 손으로 반복하고 있는 일을 하나 골라. 의존성 점검이든 상태 리포트든 config 변환이든. 그걸 만들어내는 gh + jq + yq 한 줄 파이프라인을 써봐. 비슷한 도구 조합이어도 좋고. 그러고 나서 shell 함수나 Makefile target 으로 저장해. 다음에 그 리포트가 필요할 땐 명령 하나면 끝이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.