기록 블로그

프로그래머스 데브코스-데이터 엔지니어/TIL(Today I Learned)

05/08 21일차 데이터 웨어하우스와 SQL과 데이터분석 (1)

usiohc 2023. 5. 8. 17:03

데이터 웨어하우스와 SQL과 데이터분석


주요 메모 사항


데이터 관련 3개의 직군, 필요한 기술

  • 데이터 엔지니어
    1. 파이썬, 자바, 스칼라
    2. SQL, 데이터베이스
    3. ETL/ELT (Airflow, DBT)
    4. spark, Hadoop

 

  • 데이터 분석가
    1. SQL, 비지니스 도메인에 대한 지식
    2. 통계 (AB 테스트 분석)

 

  • 데이터 과학자
    1. 머신러닝
    2. SQL, 파이썬
    3. 통계

 


관계형 데이터베이스

구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지

  • 데이터가 구조화만 된다고 가정하면 가장 좋은 기술 옵션
  • 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
    • 테이블에는 컬럼(열)과 레코드(행)가 존재
  • 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL

 

대표적 관계형 데이터베이스

  • 프로덕션 데이터 베이스 : MySQL, PostgreSQL, Oracle
    • OLTP (Online Transaction Processing)
    • 빠른 속도에 집중, 서비스에 필요한 정보 저장

 

  • 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive
    • OLAP (OnLine Analytical Processing)
    • 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
      • 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장

 

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

  • 관계형 데이터 베이스는 2단계로 구성됨
    • 가장 밑단에는 테이블들이 존재 (테이블은 엑셀의 시트에 해당)
    • 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성(엑셀에서는 파일)

 

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

  • 테이블의 구조 (테이블 스키마)
    • 테이블은 레코드들로 구성 (행)
    • 레코드는 하나 이상의 필드(컬럼)로 구성 (열)
    • 필드는 이름과 타입과 속성(PK 등)으로 구성

 

  •  

SQL이란 (Structured Query Language)

  • 관계형 데이터베이스에 있는 데이터를 질의하거나 조작해주는 언어
  • 모든 대용량 데이터 웨어하우스는 SQL 기반
  • Spark나 Hadoop도 예외는 아님
  • 데이터 분야에서 일하고자 한다면 반드시 익혀야할 기본 기술

단점

  • 구조화된 데이터를 다루는데 최적화가 되어있음
  • 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
  • 많은 관계형 데이터베이스들이 플랫한 구조들만 지원함 (JSON  X)
  • 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐

 

 


Star schema

 

  • production DB용 관계형 데이터베이스에서 일반적으로 사용함
  • 데이터를 논리적 단위로 나눠 저장하고 필요시 조인. 스토리지의 낭비가 덜하고 업데이트가 쉬움

 

Denormalized schema

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

 

 


데이터웨어하우스란?

  • 회사에 필요한 모든 데이터를 저장
  • 여전히 SQL 기반의 관계형 데이터베이스, 프로덕션 데이터베이스와는 별도여야함
  • 데이터 웨어하우스는 고객이 아닌 내부 직원(데이터 팀원)을 위한 데이터베이스, 처리속도가 아닌 처리 데이터의 크기가 더 중요해짐
  • ETL 혹은 데이터 파이프라인
    • 외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 코드

 

데이터 인프라

  • 데이터 엔지니어가 관리, 한단계 더 발전하면 Spark과 같은 대용량 분산 처리 시스템이 일부 추가됨

 

 

 


Cloud와 AWS

클라우드의 정의

클라우드의 의미는 컴퓨터 통신망이 복잡한 네트워크 및 서버 구성 등을 알 필요 없이 구름과 같이 내부가 보이지 않고, 일반 사용자는 이 복잡한 내부를 굳이 알 필요도 없이 어디에서나 구름 속의 컴퓨터 자원으로 자기가 원하는 작업을 할 수 있다는 것이다. 이른바 동일한 체험을, 인터넷이 연결된 어디에서나 보장해주는 것이다.

  • 컴퓨팅 자원을 네트웍을 통해 서비스 형태로 사용하는 것.

 

클라우드 컴퓨팅의 장점

  • 초기 투자 비용이 크게 줄어듬
  • 리소스 준비를 위한 대기시간 대폭 감소
  • 노는 리소스 제거로 비용감소
  • 글로벌 확장이 용이
  • 소프트웨어 개발 시간 단축 (SaaS)

 

클라우드 컴퓨팅이 없었다면?

  • 서버, 네트웍, 스토리지 구매와 설정등을 직접 수행해야 함
  • 데이터센터 공간을 직접 확보
  • Peak time을 기준으로 Capacity planning을 해야함
  • 직접 운영비용 vs 클라우드 비용

AWS

  • Service 중에 EC2, S3 정도는 알아두자
  • 검색하면 Service에 대한 정보가 많음

 


Redshift : Scalable SQL 엔진

  • 2PB 까지 지원
  • Still OLAP - 응답속도가 빠르지 않기 떄문에 프로덕션 데이터베이스로 사용불가
  • Columnar storage
    • 컬럼별 압축이 가능
    • 컬럼을 추가하거나 삭제하는 것이 아주 빠름

 

  • 벌크 업데이트 지원 - 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄 복사
  • 고정 용량/비용 SQL 엔진,  vs  Snoflake  vs  BigQuery
  • 다른 데이터 웨어하우스 처럼 primary key uniqueness를 보장하지 않음
    • -> 시간이 오래걸려서? 계속 check해야 하는 부하
    • 이는 웨어하우스에서 보장하지 않으니, 데이터 엔지니어가 보장해줘야함, 
    • 프로덕션 데이터베이스들은 보장

Postgresql 8.x와 SQL이 호환됨

  • 다만 Postgresql의 모든 기능을 지원하지는 않음
  • 툴이나 라이브러리로 액세스 가능 -> JDBC/ODBC
  • SQL이 메인 언어라는 것을 다시 한번 상기, -> 테이블 디자인이 아주 중요

 


공부하며 어려웠던 내용

DB와 Data Warehouse 등 지금까지 공부했던 내용을 다시 한 번 정리할 수 있는 수업이었다.

 

강의에서 EC2 가 언급되었는 학부생때 서버 수업을 들었던 기억이 났다. 이때 무료계정을 사용해 ec2로 서버 세팅부터 웹호스팅 하는 과정을 배웠었는데, 그 당시에는 EC2가 정확하게 뭔지는 모르면서 따라했던 실습이었는데 지금 생각해보니깐 좋은 경험을 했었던 것 같다.