본문 바로가기
Data Engineering

[실날데] 실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 1주차 - Redshift 소개

by 데브겸 2023. 6. 9.

 

Redshift 소개

What is Data Engineering?

Introduction

모든 서비스에 대해서 리텐션이 좋은가, 가장 돈을 많이 쓰는 사람들은 누구인가를 알아야 함

돈을 많은 쓰는 사람들이 얼마나 재방문하나, 언제 이탈하나

내가 어떤 가정을 하고 있는가, 전제에 대한 의심 등을 해봐야 함

 

Data Engineer?

  • Managing Data Warehouse
  • Writing and Managing Data Pipelines
  • Types of data pipeline
    • batch, streaming
    • summary data generation : 이미 적재한 데이터를 조인해서 새로운 데이터를 만들어내는 (etl이 바깥에 있는 데이터를 가져오는 느낌이라념 elt는 내부, dbt 툴을 쓰는 analytics engineer)
    • elt는 주로 데이터분석가가 함. 엔지니어는 보통 etl 외부에서 가져오는 데이터 담당. 가져오는 데이터를 잘 모름. 다른 팀에서 요청하면 가져와주는 느낌. 데이터 웨어하우스 안에서 분석하기 쉽게 데이터를 만드는 것은 분석가, elt. 데이터 시스템 안에 있는 데이터에 대해서 잘 아는 것은 보통 데이터 분석가. 데이터 엔지니어는 잘 모름. 데이터 엔지니어는 데이터 요청을 하면 외부에서 복사해서 가져와주고 신뢰성 체크해주는 느낌. 물론 데이터 파이프라인이 엄청 많으면 누가 요청해줬는지, 왜 필요한지 등에 대해서 잘 알고 정리할 필요가 있음 (데이터 카탈로그 - 테이블이 있으면 소스는 뭐고 누가 요청했고 이걸로 만들어진 내부 데이터는 무엇이고)
  • event collection
    • user’s behavioral data
  • 데이터 엔지니어가 알아야 하는 기술?
    • sql: hive, presto, sparksql
    • language: python
    • etl/elt scheduler: airflow
    • large scale computing platform: spark/yarn
    • cloud computing: AWS
    • container Technology: k8s, docker

 


What is Data Warehouse?

Data Warehouse: a separate SQL database

  • 분석 전용 데이터베이스 (a separate SQL database)
    • 프로덕션 데이터베이스는 보통 mysql, postgres db. 서비스 운영에 필수적인 정보를 담는 디비
      • 용량이 적고, 속도가 중요함. 따라서 여기에 쿼리를 날리면 느려지거나 사고가 터짐
    • 좀 느려도 괜춘. 많은 데이터를 한 번에 분석할 수 있음 좋음.
    • 작은 회사에 적은 데이터면 굳이 클라우드까지 갈 필요없음 (블라인드의 경우 최근까지 mysql을 썼음)

 

Central data storage of your company

  • 데이터 웨어하우스가 데이터 조직의 시작점이 되어야 함!
    • 외부에서 데이터를 수집하고, 변환해서 적재하는 과정이 ETL
    • 하지만 데이터가 많아지면 이를 다 이해하고 작업하는 것은 불가능해짐. 적재된 데이터를 조합하여 분석하기 용이하게 새로운 데이터를 만드는 과정을 ELT
  • fixed cost option vs variable cost option
    • 보통 후자가 스케일러블함. 후자의 예시는 스노우플레이크, 빅쿼리
      • 이상한 쿼리 날리는 순간… 참사…
    • 전자의 대표가 redshift나 온프렘 데이터 웨어하우스.
      • 페타바이트가 아닌 이상 redshift로 충분.
      • 고정비용이라는 것은 예측가능하다는 것도 있음. 예산 집행이 편리.
      • 스케일 관리를 사용자가 해야 한다는 불편함이 존재.

 


Redshift Introduction

Redshift, Scalable SQL Engine (Data Warehouse) in AWS

  • 사용자가 이용하는 백엔드로 사용하면 안 됨. 데이터 웨어하우스의 엔진은 처리데이터의 크기에 방점이 있는 것이지 속도에 방점이 있는 것이 아님.
  • 컬럼으로 나눠서 저장함. 열지향인듯? 컬럼 추가나 삭제가 편리. 레코드 단위가 아니라 컬럼 (대부분 scalable한 데이터베이스는 열지향이 많음)
  • bulk-update: sql에 insert into가 아니라 (건 바이 건이 아니라) 파일 단위로 업로드 하는 것. csv, json과 같은 텍스트 포맷도 있지만 주로 파케이 같은 바이너리 형태로 벌크 업데이트 함.
  • 고정 용량 SQL 엔진이지만 최근 Redshift Serverless라고 하여 가변비용 옵션도 추가되긴 하였음
  • 모든 데이터 웨어하우스는 PK의 유니크함을 보장해주지 않음. 어떤 테이블의 PK가 유니크하다는 것을 보장하는 것은 엔진이 아닌 데이터 엔지니어와 데이터 분석가의 몫

 


💡 데이터 웨어하우스와 PK의 Uniqueness 

  • 데이터 웨어하우스에서 PK의 Uniqueness를 보장하지 않는 이유가 무엇인가요?
    → 인덱싱을 해야 하고 레코드 하나하나 다 처리해야 하는데 그러면 메모리를 많이 잡아먹음. 데이터 웨어하우스에는 수만건의 데이터를 적재해야 하는데 속도가 안 남.
  • 만약 MySQL을 데이터 웨어하우스를 사용하는 경우에도 Redshift나 빅쿼리처럼 PK를 보장하지 않도록 설정해줄 수 있나요? 아니면 PK가 보장되는 상황에 맞춰 ETL을 설정해줘야 하나요?
    → MySQL 정도로 사용하는 경우 데이터가 적다는 것이기 때문에 PK가 보장이 되는 상황이더라도 속도 등의 측면에서 크게 문제가 없을 것이다.

 

 

 

  • Postgresql 8.x과 호환이 가능함 ⇒ 지원하는 거의 모든 클라이언트 툴 (JDBC ODBC) 사용 가능
  • 완전히 호환되는 것은 아니나 많은 부분 postgreSQL문을 지원함
  • postgresql에 있는 데이터타입 일부를 지원함 (JSON 형식 없음, 크기에 제약이 있음)

 

 


💡 JDBC ODBC

  • JDBC (Java Database Connectivity): Java가 DB를 사용할수 있도록 연결해주는 응용프로그램 인터페이스인 Java API
  • ODBC (Open Database Connectivity): 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로, 표준 개방형 응용 프로그램 인터페이스
자세한 정보는 옆에 링크에서: https://velog.io/@modsiw/DB-JDBC-와-ODBC 
그럼 JDBC는 ORM과 무엇이 다른가…? : https://www.youtube.com/watch?v=mezbxKGu68Y

 

 

Redshift Optimization can be tricky

  • 서버의 수가 늘어남에 따라 레코드를 분산해줘야 하는 상황이 발생함. 하지만 이것을 개발자가 직접 해줘야 한다는 것이 가장 큰 단점. (Redshift Serverless를 쓰면 물론 해결이 됨)
    • 멀티노드 클러스터가 되는 순간 data skew가 발생할 수 있음: 데이터가 하나의 노드에 몰리는 현상 발생. 그 노드가 병목이 되면서 속도가 느려짐
  • Redshift도 AWS 서비스이다보니 다른 AWS 서비스들과 잘 연동 됨.
  • S3에 백업을 할 수도 있는데 이를 스냅샷이라고 부름.
  • python based UDF(User Defined Function)를 지원함
  • S3에 로그 등을 적재하고 아테나로 분석한 뒤에 쓸만한 형태로 변환하여 Redshift에 적재하기 (일종의 ELT 작업이라고 볼 수 있음)
    • Athena와 Redshift Spectrum은 거의 똑같은 역할을 함
    • Athena는 Presto를 AWS에서 커스텀에서 만든 것

 


💡 Presto & Athena

Presto 사용자가 데이터나 명령을 입력할 수 있는 데이터 분석을 위한 분산 SQL 쿼리 엔진. 페이스북에서 많은 데이터를 빠르고 효율적으로 분석하기 위해 개발. Hive는 처리 중간 결과를 디스크에 저장하지만 Presto는 메모리에 저장하기 때문에 속도가 훨씬 빠름 (하지만 리소스를 더 많이 사용)


Athena 표준 SQL을 사용해 AWS S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스. 서버리스 서비스이기 때문에 관리할 인프라가 없고, 실행한 쿼리에 대해서만 비용 지불


 

Bulk Update Sequence - COPY SQL

  • 건 바이 건이 아니라 소스에서 S3에서 파일로 저장하고, 거기에서 Redshift 테이블로 한 큐에 넣는 것.
    • 처음 넣는 것은 조금 느리지만 그 이후에는 훨씬 프로세스가 빠름

 


How to Access Redshift

Ways to Access Redshift

  • 태블로, looker와 같은 시각화 툴
  • JDBC, ODBC와 같은 라이브러리
    • 파이썬에는 psycopg2로 조작 가능
  • SQL Client
    • Postico (mac), SQL Workbench, DBeaver, DataGrip (jetbrain)
  • Python Notebook
    • Colab
  •  
  •