SQL_Analysis 1-1

안재영·2024년 4월 22일
  • 데이터 관련 3개의 직군과 필요능력
    • 데이터 엔지니어
      • 파이썬, 자바/스칼라
      • SQL, 데이터베이스
      • ETL/ELT(Airflow, DBT)
      • Spark, Hadoop
    • 데이터 분석가
      • SQL, 비지니스 도메인에 대한 지식
      • 통계(AB테스트 분석)
    • 데이터 과학자
      • 머신 러닝
      • SQL, 파이썬
      • 통계

데이터 직군에서 일을 하는한 SQL에 대한 지식은 필수

관계형 데이터베이스란?

구조화된 데이터를 저장하는데 사용되는 스토리지

비구조화된 데이터는 관계형 데이터베이스에 저장할수 없다

  • 관계형 데이터베이스
    • 구조화된 데이터를 저장하고 질의할수 있도록 해주는 스토리지
      • 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
        • 테이블에는 컬럼과 레코드가 존재
    • 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
      • 테이블 정의를 위한 DDL(Data Definition Language)
        • 테이블 자체에 접근하는 Language
      • 테이블 데이터 조작/질의를 위한 DML(Data Manipulation Language)
        • 테이블의 데이터에 접근하는 Language
  • 대표적 관계형 데이터베이스
    • 프로덕션 데이터베이스: MySQL, PostgreSQL, Oracle, ….
      • OLTP(OnLine Transaction Processing)
      • 빠른 속도에 집중. 서비스에 필요한 정보저장
    • 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive, ….
      • OLAP(OnLine Analytical Processing)
      • 처리 데이터 크기에 집중 데이터분석 혹은 모델 빌딩등을 위한 데이터 저장
        • 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장

관계형 데이터베이스의 구조

  • 관계형 데이터베이스는 2단계로 구성됨
    • 가장 밑단에는 테이블이 존재( 테이블은 엑셀의 시트에 해당)
    • 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성 (엑셀에서는 파일)
  • 테이블의 구조(테이블 스키마)
    • 테이블은 헤코드들의 구성(행)
    • 레코드는 하나이상의 필드(컬럼)로 구성(열)
    • 필드는 이름과 타입과 속성으로 구성됨

SQL이란?

SQL : Structured Query Langage

  • 관계형 데이터베이스에 있는 데이터를 질의하거나 조작해주는 언어

두종류의 언어로 구성됨

  • DDL
    • 테이블의 구조를 정의하는 언어
  • DML
    • 테이블에서 레코드를 조작하는 언어

SQL의 단점

  • 구조화된 데이터를 다루는데 최적화가 되어있음
    • 정규 표현식을 통해 비구조화된 데이터를 어느정도 다루는것이 가능은 하지만 제약이 심함
    • 많은 관계형 데이터베이스들이 플랫한 구조만 지원함(No nested like JSON)
      • 구글 빅쿼리는 nested structure를 지원함
    • 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
      • 즉 SQL만으로는 비구조화 데이터를 처리하지 못함
  • 관계형 데이터베이스마다 SQL 문법이 조금씩 다름

데이터 모델링 방법

Star schema

  • Production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
  • 데이터를 논리적 단위로 나눠 저장하고 필요시 조인. 스토리지의 낭비가 덜하고 업데이트가 쉬움

Denormalized schema

  • 데이터 웨어하우스방식에서 사용하는 방식
    • 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요없는 형태를 말함(그냥 한번에 다때려박는 형태임)
  • 이는 스토리지를 더 사용하지만 조인이 필요없기에 빠른 계산이 가능

데이터 웨어하우스

회사의 필요한 모든 데이터를 저장

  • 프로덕션 데이터베이스와는 별도여야함
    • OLAP(OnLine Analytical Processing) vs OLTP(Online Transasction Processing)
  • AWS 의 Redshift,Google Cloud의 Big Query, Snowflake등이 대표적
    • 고정비용 옵션 vs 가변비용 옵션
  • 데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스
    • 처리속도가 아닌 처리 데이터의 크기가 더 중요해짐
  • ETL 혹은 데이터 파이프라인
    • 외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 코드들이 필요해지는데 이를 ETL 혹은 데이터 파이프라인이라고 부름

고객이 사용하지않기때문에 속도에 큰 의미를 두지않음 오히려 데이터 크기에 상관없이 원하는 데이터분석을 수행할수 있냐가 더 중요함

데이터 웨어하우스들의 차이

  • RedShift:

    • 고정비용 옵션
    • 비용이 고정적이기 때문에 비용관리가 쉬움

    Big Query, Snowflake

  • 가변비용 옵션

  • 가변비용이기에 저렴하게 사용할수있지만 사용이 커지면 급격한 가격상승이 있을수있음

데이터 인프라란?

  • 데이터 엔지니어가 관리함
    • 여기서 한단계 더 발전하면 Spark과 같은 대용량 분산처리 시스템이 일부로 추가됨
  • 데이터 순환구조

사이트 방문 트래픽과 외부 데이터 → 데이터 팀 → 비즈니스 인사이트 → 제품 서비스 개선

Cloud와 AWS

클라우드의 정의

  • 컴퓨팅 자원(하드웨어, 소프트웨어 등등)을 네트워크를 통해 서비스형태로 사용하는것
  • 키워드
    • No Provisioning
      • 내가 준비할 필요가 없다
    • Pay As You Go
      • 쓴만큼 지불한다
  • 자원(예를 들면 서버)을 필요한만큼(거의) 실시간으로 할당하여 사용한만큼 지불
    • 탄력적으로 필요한만큼의 자원을 유지하는것이 중요

결국 클라우드의 장점이란 시간과 노력의 사용을 줄여준다는것이다

클라우드 컴퓨팅이 없이 작업한다면

  • 서버/네트워크/스토리지 구매와 설정등을 직접 수행해야됨
  • 데이터 센터 공간을 직접 확보(Co-location)
    • 확장이 필요한 경우 공간을 먼저 더 확보해야됨
  • 그 공간에 서버를 구매하여 설치하고 네트워크 설정
    • 보통 서버를 구매해서 설치하는데 적어도 몇달은 걸림
  • 또한 Peek Time을 기준으로 Capacity planning을 해야됨
    • 평소엔 대부분의 자원이 놀게됨
  • 직접 운영비용 vs 클라우드 비용
    • 위 해당과정을 모두 반복노력과 시간만큼의 기회비용을 아낄수있음

클라우드 컴퓨팅의 장점

  • 초기 투자비용이 크게 줄어듬
    • CAPEX(Capital Expenditure) vs OPEX(Operating Expense)
  • 리소스 준비를 위한 대기시간 대폭 감소
    • Shorter Time to Market
  • 노는 리소스 제거로 비용감소
  • 글로벌 확장 용이
  • 소프트웨어 개발 시간 단축
    • Mamaged Service(SaaS) 이용

AWS란

  • 가장 큰 클라우드 컴퓨팅 서비스업체
  • 2002년 아마존의 상품 데이터를 API로 제공하면서 시작
    • 현재 100여개의 서비스를 전세계 15개의 지역에서 제공
    • 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로 함
    • 최근 들어 ML/AI 관련 서비스들도 내놓기 시작
  • 사용고객
    • Netflix, Zynga등의 상장업체들도 사용
    • 많은 국내 업체들도 사용시작
  • 다양한 종류의 소프트웨어/플랫폼 서비스를 제공
    • AWS의 서비스만으로 쉽게 온라인서비스 생성
    • 뒤에서 일부 서비스를 따로 설명

EC2 - Elastic Compute Cloud

  • AWS의 서버 호스팅 서비스
    • 리눅스 혹은 윈도우 서버를 런칭하고 어카운트를 생성하여 로그인가능(구글앱 엔진과의 가장큰 차이점)
    • 가상 서버들이라 전용서버에 비해 성능이 떨어짐
    • Bare metal 서버도 제공하기 시작
  • 다양한 종류의 서버 타입 제공
  • 구매옵션
    • On-Demand : 시간당 비용을 지불하며 가장 흔히 사용되는 옵션
    • Reseved : 1년이나 3년간을 사용을 보장하고 디스카운트를 받는 옵션
    • Spot Instance : 일종의 경매방식으로 놀고있는 리소스들을 저렴한 비용으로 사용할수 있는 옵션(더 높은 가격을 부르는사람이 생길경우 서버가 넘어가기때문에 굉장히 불안정함)

S3 - Simple Storage Service

  • 아마존이 제공하는 대용량 클라우드 스토리지 서비스
  • S3는 데이터 저장관리를 위해 계층적 구조를 제공
  • 글로벌 네임스페이스를 제공하기 때문에 Top레벨 디렉토리 이름 선정에 주의
  • S3에서는 디렉토리를 버킷이라고 부름
  • 버킷이나 파일별로 엑세스 컨트롤 가능

기타 중요 서비스 - Database Services

  • RDS (Relational Database Service)
    • MySQL, PostgreSQL, Aurora
    • Oracle, MS SQL Server
  • DynamoDB
  • Redshift
  • ElasticCache
  • Neptune(Graph database)
  • ElasticSearch
  • MongoDB

기타 중요 서비스 - AI & ML Services

  • SageMaker
    • Deep Learning and Machine Learning end-to-end framework
    • 프레임워크
  • Lex
    • Conversational Interface (Chatbot service)
    • 쳇봇
  • Polly
    • Text to Speech Engine
    • 텍스트 → 음성
  • Rekognition
    • Image Recognition Service
    • 이미지 인식
  • Amazon Alexa
    • 아마존 보이스봇 플랫폼
  • Amazon Connect
    • 콜센타 솔루션
  • Lambda
    • Event-driven, serverless computing engine
    • API자체 로직만 구현해두면 트래픽에 따른 서버수 관리를 처리해줌
    • 서비스 구현을 위해서 EC2를 런치할 필요가 없음
    • Google Cloud → Cloud Function
    • Azure → Azure Function

Redshift : Scalable SQL 엔진

  • 2PB까지 지원
  • Still OLAP
    • 응답속도가 빠르지 않기 떄문에 프로덕션 데이터베이스로 사용불가
  • Columnar storage
    • 컬럼별 압축이 가능
    • 컬럼을 추가하거나 삭제하는것이 아주빠름
  • 벌크 업데이트 지원
    • 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄 복사
  • 고정 용량/비용 SQL 엔진
    • vs Snowflake vs BigQuery
  • 다른 데이터 웨어하우스처럼 Primary Key Uniqueness를 보장하지않음
    • 프로덕션 데이터베이스들은 보장함
    • 유니크한 부분은 개발자가 직접 보장해줘야함

Redshift는 PostgreSql 8.x와 SQL이 호환됨

  • 하지만 Postgresql 8.x의 모든기능을 지원하지않음
    • 예를들면 text타입이 존재하지않음
  • Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 가능
    • JDBC/ODBC
  • SQL이 메인언어라는점 명심
    • 그러기에 테이블 디자인이 중요함

Redshift Schema (폴더)구성

예시

  • DEV
    • raw_data - 생 데이터
    • analytics - 정제한 데이터
    • adhoc - 테스트용

테이블을 용도에 맞게 폴더(스키마) 에 나눠 만듬

Redshift 액세스 방법

  • Postgresql 8.x와 호환되는 모든 툴과 프로그래밍 언어를 통해 접근 가능
    • SQL Workbench, Postico
    • Python이라면 psycopg2 모듈
    • 시각화/대시보드 툴이라면 Looker, Tableau, Power BI 등에서 연결가능

0개의 댓글