책읽기

[데이터 분석을 위한 SQL 레시피][2장] 이 책에서 다루는 도구와 데이터

pythaac 2021. 7. 18. 17:44
이 글은 "데이터분석을 위한 SQL 레시피 (가사키 나가토, 다미야 나오토 지음)"을 읽고 주관적으로 작성된 글입니다.

출처 : https://www.hanbit.co.kr/store/books/look.php?p_code=B8585882565

 

1. 시스템

1) PostgreSQL

  • 오픈소스 RDB
  • MySQL등 다른 오픈소스 RDB에 비해 표준 SQL을 잘 준수하고 있음
    • 윈도 함수, CTE(WITH 구문) 등 분석에 필수적으로 사용하는 구문을 모두 구현
  • 특유의 확장 기능을 많이 제공하여 편리함
  • 소규모 데이터 분석 / SQL 학습 목적으로 사용

2) Apache Hive

  • 대용량 데이터에 대한 RDBMS의 한계(bottle neck)
    • 빅데이터 시스템에서는 일반적으로 저렴한 디스크를 사용
    • 따라서, 디스크의 데이터 I/O 속도와 CPU의 처리 속도의 gap이 큼
    • 이를 위한 아키텍처로 분산 파일 시스템이 고안됨
  • Apache Hive
    • HDFS 위의 데이터를 SQL 인터페이스로 처리하는 시스템
    • 분산 시스템 위의 데이터를 동시에 읽어 디스크 I/O bottle neck 해결
    • 그러나 분산 시스템에서 읽은 데이터의 순서를 제대로 맞춰야하는 문제가 있음
    • 이를 해결하기 위해 MapReduce 알고리즘을 사용
  • 장점
    • 쿼리 실행시 동적으로 데이터 정의가 가능
      - ex) "Korea, Seoul, GangseoGu"가 '국가','시','구'처럼 3개의 컬럼 혹은 1개의 문자열로 다룰 수 있음
      - 데이터를 어떻게 사용할지 모를 때, 일단 저장 후 필요시 동적으로 스키마 정의가 가능
    • 데이터 분석을 위한 풍부한 UDF(User-Defined Function)
      - SQL로 구현이 어려운 문자열 처리 등이 쉬움
  • 단점
    • 파일 시스템(HDFS)을 기반
      - 특정 레코드 하나에 대한 변경/제거가 어려움
      - 인덱스가 디폴트로 존재하지 않음
    • 리액턴시가 낮은 처리에 적합하지 않음
      - throughput을 위한 아키텍처
      - 쿼리 실행 과정
      1) HiveQL로 작성된 처리를 자바 코드로 변환
      2) 생성된 jar를 각 연산 노드에 배치 후 처리

3) Amazon Redshift

  • Redshift
    • AWS에서 제공하는 분산 병렬 RDB
    • Hive는 파일 기반 batch 처리를 SQL 인터페이스로 구현
    • Redshift는 RDB
      - 레코드 업데이트 / 제거
      - 트랜잭션 지원
      - PostgreSQL과 호환성
  • 장점
    • 일반적인 RDB에서 다룰 수 없는 대용량 데이터 쿼리에 효과적
      - Hive는 MapReduce로 분산 처리를 실행하면 가벼운 job도 10초 이상 걸림
    • 작은 규모로 시작하여 큰 규모로 쉽게 변경 가능
  • 단점
    • 전문 지식이 필요
      - 성능 튜닝 / 비용 최소화를 위해 최적의 노드 수 / 스펙을 예측하여 인스턴스를 실행 / 종료해야함
      - 컬럼 기반 스토리지로, 설계 / 쿼리 실행시 일반 RDB와 다른 발상 필요
    • 상업적인 이용
      - 사용 시간에 따라 비용 발생
  • 컬럼 지향 스토리지
    • 테이블의 데이터를 물리적으로 저장할 때, 레코드별로 저장하지 않고 컬럼별로 저장
      1. 데이터 압축율이 높음
      2. 쿼리 실행 때 디스크 I/O 감소
    • 일반 RDB의 정규화를 사용하지 않고, 분석에 필요한 데이터를 하나의 테이블 칼럼에 추가

4) Google BigQuery

  • Google BigQuery
    • 빅데이터 분석을 위해 구글이 제공하는 클라우드 서비스
    • 구글의 다른 서비스와 쉬운 연동
      - 구글 애널리틱스 등
    • 레거시 SQL과 표준 SQL 두 종류 지원
    • 컬럼 지향 스토리지 아키텍쳐
  • Redshift와 차이
    • 직접 노드 인스턴스를 관리할 필요 없음
    • 데이터 양으로 비용 발생
  • 단점
    • 데이터 사용량 기준으로 요금을 예측하기 어려움

5) SparkSQL

  • SparkSQL
    • Spark의 기능 중 SQL 인터페이스
    • Spark
      - MapReduce를 사용한 분산 처리 프레임워크
  • 장점
    • 빅데이터 관련 활용 / 처리를 한 번에 구현
    • 일반적인 경우
      - 데이터 추출을 파이썬 스크립트로 작업
      - 수집한 데이터를 SQL로 가공
      - 통계 분석과 기계학습을 R로 진행
      - 결과 리포트를 엑셀로 작성
    • 위 과정을 모두 Spark 프로그램 내부에 한 번에 구현 가능
  • DataFrames API
    • SQL 뿐만 아니라 절차적인 프로그래밍 비슷한 구현도 가능
      - 중간 과정을 확인하여 처리
      - 데이터 처리를 작은 모듈로 분할하여 다양한 처리

 

2. 데이터

  • 리포트를 만들 때, 데이터에 대한 이해가 필요
    • 어떤 데이터를 추출하는지
    • 데이터는 어떤 성질을 가지는지

1) 데이터의 종류

  •  데이터의 종류
    • 업무 데이터
      - 업무에 필요한 데이터
    • 로그 데이터
      - 직접적으로 업무 용도는 아닌 분석을 위해 추출하는 데이터
  • 업무 데이터
    • 서비스와 시스템을 운용하기 위한 목적으로 구축된 데이터베이스에 존재하는 데이터
    • 갱신형 데이터
      - 새로운 데이터 삽입이 아닌, 기존 데이터를 갱신
    • 트랜잭션 데이터와 마스터 데이터로 나뉨
      1. 트랜잭션 데이터
        - 서비스 / 시스템을 통해 사용자의 행동을 기록한 데이터
        - 트랜잭션 데이터를 기반으로 리포트를 만드는 경우가 많음
        - 그러나 리포트를 만들 때는 이를 설명하는 마스터 데이터가 필요
      2. 마스터 데이터
        - 서비스 / 시스템이 정의하고 있는 데이터
        - 트랜잭션 데이터만으로는 상품의 명칭, 카테고리 등을 알 수 없음
        - ex) <사용자 id>, <상품 id>, <개수> 로 이루어진 데이터 {170414, 82091, 2}로는 어떤 상품을 구매했는지 알 수 없음
        - 이를 명확하게 만들어야 리포트 업무의 폭을 넓힐 수 있음
  • 로그 데이터
    • 로그 데이터의 종류
      - 통계 / 분석 용도로 설계된 데이터
      - 특정 태그를 포함하는 데이터
      - 특정 행동을 서버에 출력하는 데이터
    • 누적형 데이터
      - 출력 시점의 정보를 축적해두는 데이터
      - 기존 데이터를 수정하지 않음

2) 업무 데이터

  • 업무 데이터
    • 빅데이터 기반 / 데이터 분석 기반 시스템이 없는 경우, 일반적으로 업무 데이터로 데이터 분석을 진행
  • 업무 데이터의 특징
    1. 데이터 정밀도가 높음
      - 여러 데이터 처리 중 문제 발생에 대한 내성이 강함 (트랜잭션, 롤백)
      - 데이터의 정합성이 보증됨
      - 정확한 값이 요구되는 경우 업무 데이터 활용 (매출 관련 리포트 등)
    2. 갱신형 데이터
      - 매일 다양한 데이터 추가 / 갱신 / 제거 등이 실행
      - 데이터를 추출하는 시점에 따라 추출 데이터가 바뀔 수 있음을 인지
      - 데이터 갱신의 예시
      • 사용자의 탈퇴로 인한 물리적 데이터 제거
      • 주문 취소로 인한 논리적 제거 (플래그 활용)
      • 이사 등 주소 변경으로 인한 사용자 정보 갱신
    3. 테이블의 수가 많음
      - 대부분 RDB 사용
      - 이는 데이터의 확장성 배제, 정합성을 쉽게 유지하며 데이터 저장을 위함 (정규화)
      - 따라서, 하나의 테이블 참조로 데이터의 상세 내용 파악이 어려움
      - ER 다이어그램 파악 / 여러 테이블 결합으로 전체 내용 파악 가능
  • 업무 데이터 축적 방법
    1. 모든 데이터 변경하기
      • 날짜 기반 / 누적만 되는 데이터가 아닐 경우
        - ex) 우편번호 마스터, 상품 카테고리 마스터
        - 데이터 전체를 한꺼번에 바꾸어 최신 상태로 만듦
      • 빈번하게 변경되는 테이블 / 날짜가 경과하면 상태가 바뀌는 테이블
        - ex) 사용자의 유료 서비스 신청
        - 한꺼번에 바꾸면 항상 최신 상태
        - 리포트를 만들 때는 편하지만, 과거 정보를 영구적으로 잃으므로 주의
    2. 모든 레코드 스냅샷을 날짜별로 저장하기
      - 날짜에 따라 상태가 변하는 데이터
      - 용량 측면에서 좋지 않으나, 모든 레코드를 날짜별로 누적하면 신뢰성을 어느 정도 보장함
    3. 어제와의 변경 사항만 누적하기
      - 트랜잭션 데이터 중 변경/삭제없이 추가만 일어나는 테이블은 한꺼번에 변경 가능
      - 그러나 데이터 전송량과 처리 시간을 줄여야할 경우, 어제 데이터와의 차이만 누적해도 됨
  • 업무 데이터 다루기
    1. 정확한 값을 요구할 경우 활용 (매출액, 사용자 수)
      - 트랜잭션 기능으로 데이터의 정합성이 보장
      - 로그 데이터는 전송 방법에 따라 중간 손실이 발생할 수 있음
      - 정확한 값을 요구할 경우 업무 데이터 사용
    2. 활용할 수 없는 분석 (서비스 방문 횟수, 페이지뷰, 사용자 유도)
      - 예를 들어, 구매 데이터의 경우 어떤 장치에서 구매했는지는 업무에 필요없는 정보
      - 필요없는 정보 저장은 서비스 처리에 영향을 줄 수 있음
      - 따라서, 위와 같은 분석에는 로그 데이터를 활용해야함
    3. 데이터 변경이 가능하므로 추출 시점에 따라 결과도 변동 가능
      - 업무데이터의 신뢰성은 서비스를 제공할 때임
      - 리포트를 만들 때는 데이터 정합성을 완벽히 보장할 수 없음

3) 로그 데이터

  • 로그 데이터의 특징
    1. 서비스 처리에 영향 없는 정보 저장
      - 시간, 사용자 엔드포인트, IP, URL, 레퍼러, Cookie 등
    2. 추출 방법에 따라 데이터 정밀도가 달라짐
      - 추출 방법, 집계 대상 데이터의 상태를 제대로 파악하지 않고 사용시 잘못된 판단을 할 수 있음
    3. 데이터 갱신/변경없이 추가
      - 출력 시점의 정보를 기록
      - 상품의 가격이 변하더라도, 과거의 로그 데이터는 변경되지 않음
  • 로그 데이터 축적 방법
    • 로그 데이터 활용시 고려할 사항
      1. 어떤 로그 데이터인지 파악
      2. 어떤 방법으로 사용할지 검토
      3. 리포트로 설명할 범위 결정
    • 로그 데이터 전송 / 축적 방법
      1. 태그, SDK를 통해 사용자 장치에서 데이터 전송 / 출력 (비컨 형태)
        - HTML에 특정 태그 삽입으로 데이터를 전송하는 방식
        - 웹사이트 개발시 활용하는 일반적인 방법
        - JS로 로그 데이터 전송시, 크롤러의 영향을 적게 받음
      2. 서버에서 데이터 추출 / 출력 (서버 형태)
        - 클라이언트 쪽에서 처리하지 않고, 서버에서 로그를 출력하는 방법
        - 크롤러의 접근을 막는 것은 거의 불가능
        - 따라서, 사용자의 행동을 집계 / 분석할 경우 잘못된 판단을 내릴 수 있음
  • 로그 데이터 다루기
    1. 사이트 방문 횟수, 페이지뷰, 사용자 유도 상황을 집계 / 분석할 때 사용
      - 업무 데이터로 관리할 수 없는 열람 페이지, 레퍼러, 사용자 에이전트 등을 저장
      - 방문 횟수, 페이지뷰, 액션 수, 장치별 방문 수 등의 지표로 사용
    2. 최신 상태를 고려한 분석에는 적합하지 않음
      - 당시 상황 분석시 편하지만, 이후 데이터 변경을 고려할 경우 별도 가공이 필요할 수 있음
      - ex) 상품 카테고리 변경, 사용자 주소 변경 등
    3. 변경 없이 누적만 하는 데이터로, 추출 결과가 변할 가능성이 적음
    4. 업무 데이터에 비해 데이터의 정확도는 낮음
      - 추출 방법에 따라 크롤러의 로그가 함께 포함되어 집계될 수 있음
      - 따라서, 정확한 값이 필요할 경우 적합하지 않음

4) 두 데이터를 사용해서 생성되는 가치

  • 업무 데이터와 로그 데이터의 가치
    • 업무 데이터
      - 매출액의 추이
      - 어떤 상품이 인기 있는지
      - 어떤 상품이 계절성을 가지는지
      - 특정 시간이 많이 팔리는지
    • 로그 데이터
      - 페이지뷰
      - 액션
      - 해당 데이터에 포함된 값(레퍼러, 사용자 에이전트, 사용자 정의 변수 등)
      - 접근 분석 도구의 리포트는 공통으로 사용할 수 있는 형식으로 설계
  • 두 데이터를 사용했을 때 발생하는 새로운 가치
    • 두 데이터를 함께 활용하라는 결론
    • 로그 데이터는 웹사이트에서의 행동을 기록
    • 업무 데이터는 웹사이트+오프리안 데이터도 기록
      - POS 데이터, 음식점 예약 데이터, 대응 이력 등
    • 웹사이트에서의 행동이 오프라인 행동에 어떤 영향을 미치는지 조사 가능
      - 특정 미디어 / 광고로 유입된 사용자의 오프라인 계약 가능성 확인
      - 음식점 방문 전 웹사이트에서 많이 본 상품이 실제 매장에서 많이 팔리는 경향 확인
  • 데이터 사용 가치
    • 목표 관리
      - 목표를 관리, 설계하고 서비스 / 조직의 성장에 기여
    • 서비스 개선
      - 대량 데이터 기반으로 사용자 경향 발견하고, 매출 / 서비스 개선에 기여
    • 미래 예측
      - 과거 경향 기반으로 미래 행동 예측
      - 특정 행동의 사용자가 탈퇴하는 경향이 있는지
      - 추천 시스템