본문 바로가기

분류 전체보기167

Airflow 레포에 Claude 하네스 엔지니어링 적용하기 TL;DR범용 코딩 에이전트에게 매번 팀 컨벤션을 설명하는 대신, Airflow 레포 자체에 규칙·도구·워크플로를 심어서 에이전트가 알아서 따르게 만들었다.컨텍스트 2계층 분리, 도메인별 규칙 모듈화, 책임을 나눈 서브에이전트, 훅/MCP 자동화, 벤더링+자체 스킬. 이렇게 다섯 레이어로 짠다.사람이 리뷰에서 매번 잡던 retry·실패 콜백·동시 실행 제한 같은 운영 안정성 장치가, 코드를 짜는 단계에서 자동으로 박힌다.다만 레이어가 늘면 규칙 중복과 유지보수 비용도 같이 는다. 그래서 단일 진실의 출처를 정해두는 게 중요하다.들어가며Claude Code 같은 범용 코딩 에이전트는 똑똑하다. 그런데 우리 팀이 DAG을 어떻게 짜는지는 모른다. 그래서 처음엔 프롬프트마다 "타임존은 KST로", "실패 콜백.. 2026. 6. 9.
GCP Cloud Functions로 MySQL(AWS RDS) → BigQuery 동기화 파이프라인 구축하기 멀티 호스트 MySQL 데이터를 BigQuery로 동기화하는 파이프라인을 Cloud Functions(2세대)로 구축한 과정을 정리한다. Airflow 같은 오케스트레이터 없이 가볍게 운영할 수 있는 구성이며, DB가 GCP가 아닌 AWS RDS에 있는 경우의 네트워크 구성(고정 송신 IP)까지 다룬다. 이 글의 명령어와 코드만 따라 하면 동일한 파이프라인을 띄울 수 있다.환경: GCP 프로젝트 my-project, 리전 asia-northeast3(서울), MySQL은 AWS RDS(ap-northeast-2). 실제 값은 각자 환경에 맞게 치환하면 된다.1. 아키텍처와 선택 이유MySQL (AWS RDS, 호스트 여러 대) │ ▼Cloud Function (Python, gen2) ←─ Cl.. 2026. 6. 7.
[DW 구축] dbt + Airflow로 Gold(=mart) Layer 설계하기 TL;DRBronze는 원본을 적재만, Silver는 표준화만, Gold는 의미를 담는다 — 레이어를 끊는 것만으로도 분석가가 매번 같은 JOIN을 다시 짜는 통증이 사라진다.Gold 레이어는 스타 스키마(d_*/f_*/m_*)로 구성한다.dbt docs 하나의 문서에서 스키마, 리니지, ERD, 서빙 중인 마트 정보를 모두 파악할 수 있도록 한다. 마트 레이어 설계는 분석가만을 위한 작업이 아니라 대시보드·자동 분석 리포트·LLM 분석 챗봇 등의 기반층이 된다. 들어가며분석가 입장에서 가장 어려운 부분은 사실 서비스 테이블에 대한 파악이다. 수백개의 테이블이 어떤 기능과 연결되어있고, 각 컬럼들의 용도와 로직이 무엇인지 등등 이 모든 것을 파악하기 위해서는 백엔드 개발자의 도움도 필요하고, 이에 더해서.. 2026. 4. 28.
Claude Code 슬래시 커맨드로 티스토리 글쓰기 자동화 — 5분 개요 TL;DR/write-post "" --source 한 줄로 목차 → 본문 → 이미지 → 티스토리 임시저장까지 끝낸다단계마다 별도 에이전트가 돌고, 산출물은 posts// 폴더 하나에 모인다--refs로 구글 시트·Jira·URL을 함께 끌어와 코드 외부 자료까지 인용 가능다이어그램은 기본 16:9 가로형으로 자동 패딩되어 본문에 자연스럽게 박힌다무슨 문제를 풀고 싶었나기술 글을 한 편 올리려면 보통 네 단계를 거친다. 어떤 구조로 풀지 정하고, 코드를 다시 들여다보면서 본문을 채우고, 동작을 설명할 그림을 따로 만들고, 마지막으로 티스토리 에디터에 옮겨 임시저장을 누른다. 각 단계가 짧지 않다. 더 큰 문제는 단계가 끊기면 컨텍스트가 사라져서 다음 날 다시 흐름을 잡는 데만 30분이 깨진다는 점이다... 2026. 4. 25.
[DW 구축] dbt로 Staging Layer 설계 자동화하기(with. BigQuery) 목차핵심 메시지: 왜 Staging Layer가 데이터 웨어하우스의 근간인가1. 전체 아키텍처: 3-Layer 메달리온 구조 이해하기 1.1. Bronze → Silver → Gold, 왜 이렇게 나누는가 1.2. BigQuery Project 구조: dev/prod 분리 1.3. BigQuery Project 전체 구조 및 IAM 권한 설정2. 폴더 구조 설계: 소스 시스템 기반 디렉터리 2.1. 왜 소스 시스템별로 나누는가 2.2. 실전 폴더 구조 2.3. base 레이어: 조인이 불가피할 때3. 네이밍 규칙: 일관성이 생산성이다 3.1. 파일 네이밍: 접두사 + 소스 + 엔터티 3.2. 컬럼 네이밍: 데이터 타입별 접두사/접미사 체계4. 표준 Staging.. 2026. 3. 29.
[2026년 1분기 회고] 측정하지 않으면 관리할 수 없다. 측정하지 않으면 관리할 수 없다. 기록한 것만 돌아볼 수 있다. 1분기 한눈에 영역결과저축률1월 미달 / 2월 목표 근접투자 수익률1·2월 연속 목표 초과누적 자산목표의 99.6%업무 세부계획 완료율21/45 (47%)자기개발 달성 시간100.2/208시간 (48%)이사 완료율핵심 단계 전부 완료 ✅ 1. 재정✅ Keep투자 수익이 두 달 연속 목표를 초과했다. 작년 하반기에 마이너스를 반복했던 것과 비교하면 확실히 달라진 흐름이다. 시장 환경 도움도 있었지만, 흔들리지 않고 포지션을 유지한 결과이기도 하다.전세 포함 누적 자산이 목표의 99.6%에 달했다. 분기 시작점 대비 의미 있는 성장이 있었고, 방향은 계획대로 가고 있다.2월 소비 구조가 증명됐다. 불필요한 지출을 줄이면서, 목표 저축률 달성이 .. 2026. 3. 28.
Airflow 입문자용 실무 상세 가이드 목차1. 스케줄러, 웹서버, 익스큐터, 메타데이터베이스, 워커2. DAG (Directed Acyclic Graph) 2.1. Airflow UI 상의 DAG 2.2. 운영 안정성을 위한 DAG 옵션들3. Task 3.1. Airflow UI 상의 Task4. XCom (Cross-Communication) 4.1. XCom 사용 시 주의사항 4.2. XCom 데이터가 저장되는 곳5. Context 5.1. ds, execution_date 사용 시 주의사항 5.2. ti의 역할 및 사용법6. Operator7. TaskFlow API8. Catchup 8.1. Catchup + execution_date 조합 활용9. Backfill10. Variable11. Connection12. 강.. 2026. 2. 1.
[DW 구축] Airflow로 MySQL→BigQuery 마이그레이션 하기 들어가며1. 마이그레이션 전략 수립 1.1 마이그레이션 대상 테이블 선정 1.2 YAML 기반 테이블 설정 관리 및 3가지 마이그레이션 모드 설계2. Airflow DAG 구현 2.1 동적 DAG 생성 패턴 2.2 full_refresh 모드 상세 구현 2.3 incremental 모드 구현 2.4 init 모드 구현3. PythonOperator 함수 설계 3.1 Task1: MySQL 스키마 동기화 함수(sync_schema_from_mysql) 3.2 Task2: 동적 쿼리 생성 함수(build_mysql_query) 3.3 Task4: 데이터 로드 함수(load_to_bigquery)4. 기술적 고려사항 구현 4.1 파티션 및 클러스터링 설정 .. 2026. 1. 17.
Astronomer CLI 로 Airflow와 dbt 통합 가이드 with Cosmos 데이터 파이프라인을 운영하다 보면 Airflow로 오케스트레이션하고, dbt로 데이터 변환 작업을 수행하는 경우가 많습니다. 하지만 dbt 모델을 Airflow DAG로 변환하는 과정은 번거롭고, 유지보수도 어렵습니다.Astronomer Cosmos는 이 문제를 해결해주는 라이브러리입니다. dbt 프로젝트를 자동으로 Airflow DAG로 변환하여, dbt 모델 간의 의존성을 Airflow Task 의존성으로 표현합니다.이 글에서는 기존 Airflow 환경을 Astro CLI 기반으로 마이그레이션하고, Cosmos를 활용해 dbt와 통합하는 전체 과정을 다룹니다.1. Astro CLI 설치 및 프로젝트 초기화1.1 Docker 설치 확인Astro CLI는 Docker를 기반으로 동작하므로 먼저 Docke.. 2025. 11. 17.
Git Remote 연결 문제 해결 가이드 로컬에서 Git 리포지토리와의 연결이 끊어진 문제가 발생했을 때, 대처 방안에 대해 알아보겠습니다.초기 증상git branch# fatal: Unable to read current working directory: Operation not permitted터미널이 현재 작업 디렉토리를 읽을 수 없는 상태가 되었습니다.해결 과정1단계: Git Remote 상태 확인먼저 현재 Git remote 설정을 확인했습니다.git remote -v결과:origin https://{개인id}@github.com/{개인id}/{Repository}.git (fetch)origin https://{개인id}@github.com/{개인id}/{Repository}.git (push)개인 계정으로 연결되어 있었고, 회사.. 2025. 11. 13.
윈도우 함수(ROWS BETWEEN, UNBOUNDED PRECEDING) 이해하기 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING 쿼리를 문제 상황을 설정하여, 실제 실무 데이터를 예시로 시각적으로 이해해보겠습니다.문제 상황유료 서비스 이용 데이터에서 순수 이용 기간을 계산해야 하는 상황입니다. 문제는 중복되거나 겹치는 기간들이 있다는 것이죠.예시 데이터SELECT 1 AS uidx, DATE('2022-01-01') AS valid_start, DATE('2022-03-01') AS valid_endUNION ALLSELECT 1 AS uidx, DATE('2022-02-01') AS valid_start, DATE('2022-05-01') AS valid_endUNION ALLSELECT 1 AS uidx, DATE('2022-03-01') .. 2025. 11. 12.
바바라민토, 논리의 기술 (피라미드 구조 문서 작성 기법) 1. 피라미드 구조1.1. 피라미드 내부의 관련성피라미드 내의 메시지는 독자로부터 질문을 유도할 수 있도록 기술한다.메시지는 수직적으로 관련되어 질의응답 형식으로 독자와 대화를 이끌어간다.메시지는 수평적으로 관련되어 연역적, 귀납적 추론을 통해 독자의 질문에 답변한다. 그러나 이 두 가지 방법을 동시에 적용할 수는 없다.도입부에서는 독자로 하여금 질문을 유발하게 하는 메시지를 기술한다.도입부는 본문에서 답변할 수 있도록 질문을 유발하는 구조로 전개되어야한다.수직적 질의응답 형식의 대화, 수평적 연역적 추론과 귀납적 추론 그리고 스토리 형식의 도입부 구성, 이 세 가지 기본 구조를 이용하면 생각을 명확하게 정리하여 피라미드 구조를 만들 수 있다.1.2. 피라미드의 구성요소는 상호 보완 관계다피라미드 정상의.. 2025. 10. 17.