대용량 트랜잭션 환경을 가정한 로그 설계부터 지표 시각화, 품질 모니터링까지 — DataOps 전 과정을 구현한 End-to-End 프로젝트
데이터 신뢰성, 파이프라인 자동화, 확장 가능한 모델링을 지향합니다
데이터 수집부터 시각화까지, 전체 파이프라인의 흐름을 한눈에
GitHub 코드 구조 기반, DataOps 직무 역량 어필 포인트
| 도메인 | 이벤트 예시 | 트리거 | 비즈니스 용도 |
|---|---|---|---|
| Auth | auth_signup_completed |
가입 완료 | 가입 완료율, DAU |
| Payment | payment_transfer_completed |
송금 성공 | 매출, GMV |
| Product | product_detail_viewed |
상품 상세 조회 | 상품 인기도 |
| Screen | screen_viewed |
화면 진입 | 트래픽 분석 |
| System | system_error_occurred |
에러 발생 | 에러 모니터링 |
{
"event_id": "550e8400-e29b-41d4-a716-446655440002",
"event_name": "payment_transfer_completed",
"event_timestamp": "2026-02-12T10:23:45.789Z",
"user_id": "usr_a1b2c3d4",
"platform": "ios",
"app_version": "3.2.1",
"event_properties": {
"amount": 50000,
"currency": "KRW",
"transfer_type": "instant",
"fee": 0,
"latency_ms": 342
}
}-- 일간 핵심 KPI 마트: Tableau 대시보드의 메인 데이터 소스 WITH daily_users AS ( SELECT activity_date, COUNT(DISTINCT user_id) AS dau, COUNT(DISTINCT CASE WHEN user_type = 'new' THEN user_id END) AS new_users, COUNT(DISTINCT CASE WHEN user_type = 'returning' THEN user_id END) AS returning_users FROM {{ ref('int_daily_active_users') }} GROUP BY 1 ), daily_transactions AS ( SELECT transaction_date, SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS gmv, SUM(CASE WHEN status = 'completed' THEN fee ELSE 0 END) AS total_fee_revenue FROM {{ ref('stg_transactions') }} GROUP BY 1 )
def _check_quality_result(**kwargs): """품질 점수에 따라 다음 작업을 분기""" report_dir = Path("/opt/airflow/.../reports") report_files = sorted(report_dir.glob("quality_report_*.json")) with open(report_files[-1]) as f: report = json.load(f) # 품질 점수 80% 미만이면 실패 경로 if report["quality_score"] < 80: return "notify_failure" else: return "export_tableau_data" branch_on_quality = BranchPythonOperator( task_id="branch_on_quality", python_callable=_check_quality_result, )
단순히 "완성했다"보다 "어려움을 극복했다"가 더 큰 성장입니다
프로젝트에 사용된 핵심 기술과 도구들
fintech-dataops-portfolio/ ├── README.md # 프로젝트 개요 ├── requirements.txt # Python 의존성 │ ├── 01_log_design/ # ① 서비스 로그 설계 │ ├── event_taxonomy.md # 이벤트 택소노미 (28개 이벤트) │ ├── log_schema.md # 로그 스키마 정의서 │ ├── event_schema.json # JSON Schema 유효성 검증 │ └── sample_events.json # 샘플 이벤트 데이터 │ ├── 02_metrics_definition/ # ② 핵심 지표 정의 │ ├── metrics_dictionary.md # KPI 정의서 (NSM → 5 KPIs → 10 OPs) │ ├── metrics_tree.md # 지표 트리 & 문제 진단 시나리오 │ └── data_lineage.md # 데이터 리니지 문서 │ ├── 03_data_generation/ # 시뮬레이션 데이터 생성 │ ├── generate_events.py # Faker 기반 이벤트 로그 생성 │ ├── generate_transactions.py # 거래 데이터 생성기 │ └── load_to_db.py # DuckDB/PostgreSQL 적재 │ ├── 04_dbt_mart/ # ③ dbt 데이터 마트 │ ├── models/staging/ # 스테이징: 타임존 변환, 필터링 │ ├── models/intermediate/ # 중간: DAU, 퍼널, 코호트 계산 │ ├── models/marts/ # 최종: KPI, 리텐션, 매출 마트 │ └── tests/ # dbt 테스트 (DAU>0, 매출≥0) │ ├── 05_sql_queries/ # ④ SQL 지표 추출 쿼리 │ ├── 06_tableau_dashboard/ # ⑤ Tableau 시각화 │ ├── dashboard_design.md # 대시보드 설계서 (4개 시트) │ └── exports/ # Tableau용 CSV (4종) │ ├── 07_data_quality/ # ⑥ 품질 모니터링 │ ├── great_expectations/ # GE 검증 스위트 │ ├── run_quality_checks.py # 15+ 품질 규칙 실행기 │ └── slack_alert.py # Slack Block Kit 알림 │ └── 08_airflow_dags/ # ⑦ 운영 자동화 ├── dag_daily_metrics.py # 일간 지표 파이프라인 ├── dag_data_quality.py # 6시간 주기 품질 검증 └── dag_tableau_refresh.py # Tableau 데이터 갱신