사용자가 증가함에 따라 서버가 불안정 하여 로그를 일일히 찾는것이 어려워 졌다.
그래서 SSAS(SQL Server Analysis Services) 를 도입하기 위해서
이것 저것 알아보다가 ETL 파이프라인으로 데이터 추출 / 변환 / 적재 에 관해 알아 보게 되었다.
ETL 파이프라인 설계는 데이터를 추출(Extract), 변환(Transform), **적재(Load)**하는 일련의 프로세스를 설계하고 구현하는 것을 의미합니다. ETL 파이프라인은 데이터를 다양한 소스에서 가져와 변환한 뒤, 분석 또는 저장에 적합한 형식으로 데이터 웨어하우스나 데이터베이스에 적재하는 과정을 자동화합니다.
ETL 파이프라인 설계의 핵심 요소
- 데이터 소스 정의 (Extract)
- 데이터를 어디에서 가져올지 정의합니다.
- 일반적인 데이터 소스:
- 데이터베이스 (MySQL, PostgreSQL, Oracle 등)
- 파일 시스템 (CSV, JSON, Excel 등)
- 클라우드 스토리지 (AWS S3, Google Cloud Storage 등)
- API
- 스트리밍 데이터 (Kafka, RabbitMQ 등)
- 데이터 변환 설계 (Transform)
- 데이터 클렌징:
- 결측값 처리
- 이상치 제거
- 데이터 표준화:
- 데이터 형식 통일 (날짜 형식, 숫자 형식 등)
- 비즈니스 로직 적용:
- 데이터 매핑
- 계산 및 집계
- 스키마 설계:
- 데이터를 원하는 구조로 변환 (예: 테이블, JSON 객체 등)
- 데이터 클렌징:
- 데이터 적재 설계 (Load)
- 데이터를 적재할 대상 정의:
- 데이터 웨어하우스 (Snowflake, BigQuery, Redshift 등)
- 데이터베이스 (OLTP/OLAP)
- 분석 툴 (Tableau, Power BI 등과 연동 가능)
- 적재 방식 결정:
- 전체 덮어쓰기 (Overwrite)
- 증분 로드 (Incremental Load)
- 실시간 스트리밍 (Streaming)
- 데이터를 적재할 대상 정의:
- 워크플로 설계
- 프로세스 자동화 도구:
- Apache Airflow, Prefect, Luigi
- 작업 순서 및 의존성:
- 예: 데이터 추출 → 변환 → 적재 순서 정의
- 스케줄링:
- 주기적 실행 (예: 매일, 매시간)
- 실시간 실행 (이벤트 기반)
- 프로세스 자동화 도구:
- 에러 처리 및 로깅
- 실패 시 재시도 정책 설정 (예: 3회 시도 후 알림)
- 데이터 검증 및 품질 점검
- 작업 로그 기록 및 모니터링 시스템 (예: ELK Stack, Grafana)
- 성능 최적화
- 대용량 데이터를 처리하기 위한 병렬 처리 또는 배치 처리
- 스트리밍 데이터와 실시간 처리를 위한 이벤트 기반 설계
- 캐싱 및 데이터 압축 기술 활용
ETL 파이프라인 설계 시 고려 사항
- 데이터 볼륨
- 데이터 크기에 따라 배치 처리 또는 스트리밍 처리 방식을 선택해야 합니다.
- 데이터 품질
- 데이터의 정확성, 일관성, 완전성을 유지하기 위해 클렌징 및 검증 단계를 설계합니다.
- 실시간 vs 배치 처리
- 실시간 처리: IoT, 실시간 분석 등 즉각적인 데이터 활용이 필요한 경우
- 배치 처리: 정기적으로 대량의 데이터를 처리하는 경우
- 확장성
- 데이터 양이 증가할 경우 파이프라인을 확장할 수 있어야 합니다.
- 도구 선택
- 데이터 추출: Apache Kafka, AWS Glue, Talend
- 데이터 변환: Apache Spark, Pandas (Python), DBT
- 데이터 적재: Snowflake, BigQuery, Data Warehouse
- 보안 및 규정 준수
- 데이터 암호화 및 접근 제어
- GDPR, HIPAA 등 데이터 규정 준수
ETL 파이프라인 설계 예시
예제 시나리오
- 목표: 여러 소스에서 고객 데이터를 가져와 분석 가능한 데이터 웨어하우스로 적재.
- 데이터 소스:
- MySQL 데이터베이스 (고객 기본 정보)
- API (고객 행동 로그)
- CSV 파일 (고객 구매 내역)
- 대상: Google BigQuery
파이프라인 설계
- 추출
- MySQL에서 고객 기본 정보를 가져오는 SQL 쿼리 작성.
- API에서 RESTful 요청으로 행동 로그 수집.
- S3에 저장된 CSV 파일에서 데이터를 읽어오기.
- 변환
- 기본 정보와 행동 로그를 고객 ID 기준으로 조인.
- 구매 내역 데이터에서 날짜 형식을 표준화.
- 총 구매 금액을 계산하여 새로운 필드 추가.
- 적재
- 변환된 데이터를 Google BigQuery의 고객 분석 테이블로 업로드.
- 증분 로드 방식 사용 (새로운 데이터만 추가).
- 자동화
- Apache Airflow를 사용하여 매일 자정 파이프라인 실행.
- 실패 시 슬랙(Slack) 알림을 보내도록 설정.
시나리오: 온라인 쇼핑몰 분석 파이프라인 설계
목표
- 고객 행동 로그(웹사이트 방문 기록)와 주문 데이터를 통합하여 고객 행동 분석과 매출 추이 분석을 가능하게 하는 데이터 파이프라인 구축.
1. 사용 도구
아래는 주요 도구들입니다. (이 도구들은 확장성과 유지보수 용이성을 고려해 선택됨.)
데이터 추출 (Extract)
- Apache Kafka
- 실시간 고객 행동 로그 스트리밍 (이벤트 기반 데이터 처리)
- AWS Glue
- S3에 저장된 주문 데이터를 추출
- PostgreSQL
- 고객 정보를 정기적으로 SQL로 쿼리
데이터 변환 (Transform)
- Apache Spark
- 대규모 데이터 처리 및 병렬 변환
- DBT (Data Build Tool)
- SQL 기반 변환 작업과 스키마 관리
- Pandas (Python)
- 작은 데이터셋 처리 및 분석 (간단한 변환 작업에 활용)
데이터 적재 (Load)
- Google BigQuery
- 데이터 웨어하우스 역할로 사용 (대규모 쿼리와 분석 지원)
- Amazon Redshift
- 고성능 데이터 적재 및 BI 툴 연동
워크플로 관리
- Apache Airflow
- 파이프라인 자동화 및 스케줄 관리
- Prefect
- 파이프라인 코드화 및 상태 모니터링
모니터링 및 로깅
- ELK Stack (Elasticsearch, Logstash, Kibana)
- 파이프라인 상태와 로그 시각화
- Grafana
- 실시간 데이터 대시보드 제공
2. ETL 파이프라인 단계
2.1 데이터 추출 (Extract)
- 고객 행동 로그 수집
- 도구: Apache Kafka
- 방법:
- 웹사이트와 모바일 앱에서 발생하는 이벤트 데이터를 Kafka 토픽에 전송.
- 예: 페이지 조회, 버튼 클릭, 검색 쿼리 등.
- JSON 형식의 메시지를 Kafka 클러스터에 저장.
- 주문 데이터 수집
- 도구: AWS Glue
- 방법:
- S3 버킷에 업로드된 CSV 파일 (일별 주문 기록)을 Glue 작업으로 추출.
- Glue Crawler를 통해 스키마 자동 생성.
- 고객 기본 정보 수집
- 도구: PostgreSQL + JDBC
- 방법:
- SQL 쿼리로 PostgreSQL에서 고객 정보를 정기적으로 추출.
2.2 데이터 변환 (Transform)
- 행동 로그 변환
- 도구: Apache Spark
- 작업:
- Kafka 토픽에서 실시간 데이터 스트림 수신.
- 이벤트 데이터를 표준화 (예: timestamp, user_id 형식 변환).
- 중복 이벤트 제거.
- 주문 데이터 변환
- 도구: Pandas (Python)
- 작업:
- CSV 파일에서 결측값 및 이상값 처리.
- 매출 합계 계산 및 날짜별 그룹화.
- 데이터 조인 및 스키마 변경
- 도구: DBT
- 작업:
- 고객 정보(PostgreSQL), 행동 로그(Spark), 주문 데이터(Pandas)를 고객 ID 기준으로 조인.
- 최종 테이블 스키마를 생성:
- sql 코드 복사 user_id | session_id | total_spent | last_activity | product_category | timestamp
2.3 데이터 적재 (Load)
- Google BigQuery로 적재
- 도구: Google BigQuery + Python Client
- 방법:
- 변환된 데이터를 customer_analytics 테이블에 증분 로드.
- API 또는 CLI를 사용해 Spark 결과를 BigQuery로 업로드.
- Amazon Redshift로 적재
- 도구: AWS Glue + Redshift
- 방법:
- Glue ETL 작업으로 최종 데이터를 Redshift 테이블로 적재.
- BI 툴 (Tableau, Power BI)와 연결해 시각화 가능.
2.4 자동화 및 스케줄링
- Apache Airflow DAG 구성
- 작업 단계 정의:
- DAG (Directed Acyclic Graph)을 생성해 각 단계를 순차적으로 실행.
- 예:
- rust 코드 복사 extract_logs -> transform_logs -> join_data -> load_to_bigquery
- 스케줄링:
- 행동 로그: 실시간 스트리밍
- 주문 데이터: 매일 자정
- 고객 정보: 매주 월요일 오전 9시
- 작업 단계 정의:
2.5 모니터링 및 에러 처리
- 로그 수집 및 모니터링
- 도구: ELK Stack
- 방법:
- 각 ETL 단계의 로그를 Elasticsearch에 저장.
- Kibana 대시보드로 실패율 및 처리 속도 시각화.
- 실패 재시도
- 도구: Apache Airflow
- 방법:
- 실패 시 최대 3회 재시도.
- 실패한 작업은 Slack으로 알림 전송.
3. 결과
- 데이터 웨어하우스 구성
- customer_analytics 테이블은 Google BigQuery에 적재.
- 대시보드 예:
- 매출 추이 분석
- 고객 행동 분석
- 인기 제품 카테고리
- 실시간 분석
- Kafka와 Spark로 실시간 고객 행동 데이터를 분석.
- 예: 특정 제품 클릭 수 실시간 집계.
1. SSAS를 모니터링 도구로 활용하기 위한 주요 역할
- OLAP(Online Analytical Processing) 모델 구축
- 복잡한 데이터를 다차원 큐브로 구성하여 효율적으로 쿼리 및 분석.
- KPI(예: 처리 속도, 실패율, 작업 성공률 등) 모니터링.
- Tabular 모델 활용
- SSAS Tabular 모델은 메모리 기반 데이터 분석을 위한 고속 데이터 처리와 실시간 모니터링을 지원.
- 보고서 생성
- SSAS 데이터를 Power BI, Excel, 또는 Reporting Services(SSRS)와 연동하여 시각화.
- 실시간 데이터 피드 통합
- 실시간 ETL 파이프라인의 결과를 SSAS에 통합하여 모니터링.
2. SSAS 도입 절차
2.1 SSAS 설치 및 설정
- SSAS 인스턴스 설치
- SQL Server 설치 마법사에서 Analysis Services를 선택하여 설치.
- 설치 시 Multidimensional and Data Mining 또는 Tabular 모델 중 선택.
- 관리 도구 설치
- SQL Server Management Studio (SSMS): SSAS 서버와 데이터 모델 관리.
- SQL Server Data Tools (SSDT): SSAS 프로젝트 설계 도구.
2.2 SSAS 데이터 모델 설계
- 데이터 원본 준비
- ETL 파이프라인에서 생성된 데이터를 SSAS로 전달:
- 데이터 소스: 데이터 웨어하우스(SQL Server, BigQuery 등) 또는 데이터베이스(PostgreSQL 등).
- 데이터가 정규화되어 있을 경우, 모델링 시 디노말라이즈(denormalize)하여 큐브에 적합한 구조로 변환.
- ETL 파이프라인에서 생성된 데이터를 SSAS로 전달:
- 다차원 큐브 설계 (Multidimensional)
- 측정값(Measure):
- KPI나 집계 데이터 정의 (예: 처리된 작업 수, 평균 처리 시간).
- 차원(Dimension):
- 데이터를 분석할 기준 정의 (예: 시간, 지역, 작업 유형).
- 계층 구조(Hierarchy):
- 차원의 논리적 계층 설정 (예: 년 → 월 → 일).
- 측정값:
- 처리 속도: 초당 처리된 레코드 수.
- 에러율: 실패한 작업 수 / 전체 작업 수.
- 차원:
- 시간: 일, 주, 월.
- 작업 유형: 추출, 변환, 적재.
- 측정값(Measure):
- Tabular 모델 설계 (Modern Approach)
- DAX(Data Analysis Expressions)로 계산된 필드 정의.
- 대규모 데이터를 처리할 경우 DirectQuery 모드를 활성화하여 실시간 데이터를 분석.
2.3 SSAS와 ETL 파이프라인 통합
- ETL 데이터를 SSAS로 로드
- ETL 도구(Airflow, Talend, SSIS 등)에서 SSAS 데이터 원본에 데이터 전달.
- SSAS 데이터 소스를 ETL 파이프라인에서 자동으로 갱신하도록 설정.
- 처리 작업 자동화
- SSAS 큐브 또는 데이터 모델을 정기적으로 처리(Processing)하도록 스케줄링.
- SQL Server Agent 또는 Windows Task Scheduler를 활용하여 SSAS 큐브 갱신 자동화.
2.4 SSAS 데이터 시각화 및 모니터링
- Power BI 연동
- SSAS 큐브를 Power BI의 데이터 원본으로 연결.
- 주요 KPI를 대시보드에 표시:
- ETL 처리 속도, 작업 실패율, 시간별 작업 수.
- Excel에서 분석
- Excel의 피벗 테이블 기능으로 SSAS 큐브 데이터를 분석.
- 실시간 데이터를 기반으로 보고서 생성 가능.
- SQL Server Reporting Services (SSRS)
- SSAS 큐브 데이터를 기반으로 SSRS에서 사용자 정의 보고서 생성.
2.5 SSAS 모니터링 자동화 및 유지보수
- 큐브 상태 모니터링
- SSAS에서 큐브 처리 상태, 처리 시간, 오류를 모니터링.
- SSMS의 Activity Viewer로 실시간 상태 확인.
- 성능 최적화
- 큐브 파티션(Partition) 설정으로 대규모 데이터를 효율적으로 관리.
- 메모리 및 쿼리 성능을 개선하기 위해 집계 설계 사용.
- 알림 및 로깅
- SQL Server Agent와 연동해 큐브 처리 실패 시 알림 전송.
- SSAS 로그를 ELK Stack 또는 다른 모니터링 도구로 통합.
3. SSAS 도입 사례
사례: ETL 파이프라인 모니터링
- 목표: ETL 파이프라인의 성능과 오류 상태를 시각화하고 분석.
- 구현 단계:
- 데이터 수집: Apache Airflow 로그를 PostgreSQL에 저장.
- 큐브 설계:
- 처리 속도, 실패율, 성공 작업 수를 측정값으로 정의.
- 시간 차원을 사용해 날짜별 ETL 성능 추이 분석.
- 보고서 생성:
- Power BI로 ETL 작업 성공률과 처리 시간 대시보드 구축.
- 주기적으로 SSAS 데이터를 갱신해 실시간 분석.
4. 결론
SSAS를 모니터링 시스템에 도입하면 대규모 데이터의 분석 속도를 높이고 복잡한 KPI를 다차원적으로 분석할 수 있습니다. SSAS와 Power BI 같은 도구를 연계하면 직관적인 대시보드를 생성해 실시간 모니터링이 가능합니다.
'개발공부 > DevOps' 카테고리의 다른 글
Github + Jenkins + Docker로 빌드 (0) | 2025.02.13 |
---|---|
데이터 웨어하우스 도입이나 ETL 설계가 필요한 상황 (0) | 2025.02.13 |
Github + Jenkins 연동 (0) | 2025.02.13 |
데브옵스(DevOps) 설정방법 (0) | 2025.02.13 |
데브옵스(DevOps)란? (0) | 2025.02.12 |