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 fetch → 필터 → 변환 → YAML / TOML / Markdown emit. 결합 조직이 jq + yq + 템플릿 단계. 아래: 오늘 적용 가능한 세 파이프라인.

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

gh 로 open PR 을 JSON 으로 fetch, 필터, Markdown 테이블로 포맷.

파이프라인 2 — pyproject.toml dependency 를 requirements 리스트로

pyproject.toml 파싱, [project.dependencies] 추출, 평탄한 requirements.txt emit.

파이프라인 3 — flat key-value YAML 파일에서 Kubernetes ConfigMap

env-var key/value 의 평탄한 YAML 읽고 K8s ConfigMap 모양으로 wrap.

원칙: Unix 철학 적용 — 작고, 합성 가능하고, 포맷 인식하는 도구. cat | yq | jq | python -c '...' > out 가 실제 워크플로우. 4 파이프 분리 명령이 일하는 곳에서 큰 스크립트 쓰려는 반사 저항. 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

현재 손으로 하는 routine 하나 골라: 의존성 audit, 상태 리포트, config 변환. 그걸 만드는 gh + jq + yq (또는 비슷한) 1-liner 파이프라인 작성. shell 함수 또는 Makefile target 으로 저장. 다음에 그 리포트 필요할 때 한 명령으로 준비됨.

Progress

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

댓글 0

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

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