본문 바로가기

dev course - DE/TIL

[데브코스] TIL 21일차

 

 


1. 왜? SQL을 배워야할까

  • 데이터 직군은 크게 3가지. 이 모든 직군에서 공통적으로 중요한게 SQL 
    • 데이터 엔지니어
      • Python, Java/Scala
      • SQL, DB
      • ETL/ELT (Airflow, DBT)
      • Spark, Hadoop
    • 데이터 분석가
      • SQL
      • 비즈니스 도메인에 대한 지식
      • 통계(AB test)
    • 데이터 사이언티스트
      • 머신러닝
      • SQL, Python
      • 통계
  • 백엔드/프론트엔드에서 사용하는 DB는 웹 서비스를 운영하기 위함이 목적이라면, 데이터 직군에서는 큰 데이터를 처리해서 작은 데이터로 요약하고 다양한 종류의 데이터 분석을 하는게 목적
  • 주어진 문제를 답하기 위해 데이터 분석을 하는데, 이때 사용하는게 SQL(Structured Query Language)
  • 빅데이터 세상에서 구조화된 데이터를 다루는데 SQL만큼 쉽고 검증된 다른 언어가 없다

 

 

 

2. 배움에 관하여 

  • 배움에는 시간과 노력이 걸린다
    • 정체기는 자연스럽다
  •  새로운 것을 배울 때 좋은 자세 (1)
    • 아는 것과 모르는 것. 분명히 이해하자
    • 마음을 편하게 먹자. 질문을 자기검열하지 않고 질문하자
    • 나보다 잘하는 사람들은 그만큼 시간을 쏟았다는 것을 인정하자
  • 새로운 것을 배울 때 좋은 자세 (2)
    • 배움의 발전은 tipping point를 거치면서 폭발한다
      • "The secret is to build the resolve and spirit to enjoy the plateaus the times when it doesn't feel like you're imporving and you question why you are doing this. If you're patient, the plateaus will become springboards" (Quote from Steve Nash)
    • 발전이 더딘 이 기간을 즐기는 자세가 필요하다

 

 

 

 

3. 관계형 데이터베이스

  • 관계형 데이터베이스는 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
    • 엑셀 스프레드시트 형태의 테이블(column&record)로, 데이터를 정의하고 저장함
  • 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL(Structured Query Language)
    • 테이블 정의를 위한 DDL(Data Definition Language) - CREATE, DROP ...
    • 테이블 데이터 조작/질의를 위한 DML(Data Manipulation Language) - SELECT, UPDATE, DELETE, ...
  • 대표적인 관계형 데이터베이스
    • 프로덕션 데이터베이스(Production Database)
      • MySQL, PostrgreSQL, Oracle, ...
      • OLTP(Online Transaction Processing)
      • 빠른 응답 속도. 서비스에 필요한 정보를 저장함
      • 웹 서비스에 필요한 데이터들. 웹 서비스가 느리면 나쁜 경험으로 이어져 사용하지 않게 될 것
    • 데이터 웨어하우스(Data warehouse)
      • Redshift, Snowflake, BigQuery, Hive ...
      • OLAP(Online Analytical Processing)
      • 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩 등을 위한 데이터 저장
        • 보통 프로덕션 데이터베이스를 복사해 데이터 웨어하우스에 저장함

 

데이터베이스 구조
테이블 구조

  • 관계형 데이터베이스의 구조 
    • 2단계로 구성
      • 가장 밑단에 테이블들이 존재(테이블 = 엑셀의 시트)
      • 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑에 구성됨(엑셀에서는 파일)
    • 테이블의 구조(or 테이블 스키마)
      • 레코드(행)로 구성
      • 레코드는 하나 이상의 필드(컬럼)로 구성
      • 필드(컬럼)는 이름, 타입, 속성(Primary key)으로 구성됨
      • Primary key는 유일하며, 각 레코드의 값이 유일할 수 있게 해줌
  • 만약, 내가 가는 회사에 프로덕션 데이터베이스만 있다면?
    • 이런 경우, 내가 필요한 데이터가 프로덕션 데이터베이스만 있기 때문에 두 가지 단점이 있음
      • 꼭 프로덕션 데이터베이스에 접근해야 데이터를 가져올 수 있음
      • 큰 쿼리를 날리게 되면 결국 데이터베이스 속도에 영향을 끼치고 웹서비스에도 영향을 미침
      • 백엔드 개발자들이 시러하겠쥐... 불화 발생...
      • 사고로도 이어질수두...
      • 따라서 별도의 데이터베이스가 필요함! 데이터 웨어하우스 필요!

 

 

 

4. SQL(Structured Query Language)

  • 1970년대 초반에 IBM이 개발
  • 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작하는 언어
  • 두 종류의 언어로 구성됨
    • DDL(Data Definition Language)
      • 테이블의 구조를 정의하는 언어
    • DML(Data Manipulation Language)
      • 테이블에서 원하는 레코드(행)들을 읽어 오는 질의 언어
      • 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어
  • 빅데이터 세상에서도 중요한 SQL
    • Spark, Hadoop이 나오면서 SQL은 작은 데이터에나 쓰는거다, 한물 갔다라고 생각한 때가 있었음
    • 하지만 데이터가 크건 작건 데이터를 구조화할 수 있다면, SQL은 이 데이터를 질의하고 조작하는데 아무런 장애물이 없다는 것을 깨닫게됨
    • 이로써 모든 대용량 데이터 웨어하우스가 SQL을 기반으로 동작할 수 있게 만듬
    • Redshift, Snowflake, BigQuery, Hive ...
  • SQL의 단점
    • 구조화된 데이터만을 다룰 수 있음
      • 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하지만 제약이 심함
      • 많은 관계형 데이터베이스들은 플랫한 구조만을 지원(no nested like JSON)
        • 구글의 BigQuery는 nested structure을 지원함
      • 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
        • SQL만으로는 비구조화 데이터를 처리하지 못함
    • 관계형 데이터베이스마다 SQL 문법이 조금씩 상이함
      • 사투리같이...

 

star schema / denormalized schema

  • 데이터 모델링(=데이터를 어떻게 표현하고 저장할거니?)
    • Star schema
      • Production DB용 관계형 데이터베이스에서는, 보통 Star schema를 사용해 데이터를 저장함
      • 데이터를 논리적 단위로 나눠 저장하고, 필요할 때 조인함
      • 스토리지의 낭비가 덜하고 업데이트가 쉬움
    • Denormalization schema
      • 데이터 웨어하우스에서 사용하는 방식
        • 단위 테이블로 나눠 저장하지 않음.
        • 별도의 조인이 필요 없는 형태
      • 스토리지를 더 사용하지만, 조인이 필요 없기에 빠른 계산이 가능함

 

 

 

 

5. 데이터 웨어하우스 - 회사에 필요한 모든 데이터를 저장하는 곳

  • SQL 기반의 관계형 데이터베이스
    • OLAP(OnLine Analytical Processing)
      • 프로덕션 데이터베이스(OLTP. OnLine Transaction Processing)와는 별도여야함
      • 프로덕션 데이터베이스를 데이터 웨어하우스로 복사해 오는 것이 첫번째
    • AWS - Redshift, Google - BigQuery, Snowflake
      • 고정비용 옵션 vs. 가변비용 옵션
  • 고객이 아닌 내부 직원을 위한 데이터베이스
    • 처리 속도 <<<<<<<<< 처리 데이터의 크기
  • ETL 혹은 데이터 파이프라인
    • 외부(프로덕션 데이터베이스도 포함됨)에 존재하는 데이터를 읽어다가 데이터 웨어하우스의 테이블로 저장해주는 과정이 필요해짐
    • 이를 ETL (Extract-Transform-Load)혹은 데이터 파이프라인이라고 부름
  • 데이터 인프라
    • 데이터 엔지니어가 관리함
    • 아래 그림에서 한 단계 더 발전하면 + Spark(대용량 분산처리 시스템. 비구조화 데이터를 처리해줌)

데이터 인프라

 

  • 데이터 순환 구조

데이터 순환 구조

 

 

 

 

 

6. Cloud, AWS

  • Cloud
    • 컴퓨팅 자원(하드웨어, 소프트웨어 등)을 네트워크를 통해 서비스 형태로 사용하는 것
      • 초기에는 하드웨어를 서비스하는 형태로 사용됨. 서버를 직접 구축하는게 아닌 서버를 빌려쓰는 형태
      • 점점 발전해, 소프트웨어도 빌려쓰는 형태로 발전함
    • No Provisioning
      • 시간단축의 장점. 직접 서버를 구매해, 소프트웨어 설치를 하는게 아니라 이미 되어있는 것을 바로 구매함. 클라우드 컴퓨터가 아닌 직접 서버를 구축하는 경우엔 이 과정만 2~3달이 걸릴 것
    • Pay as you go
      • 쓰는 만큼 돈을 내는 것으로, 초기 투자비용이 크게 줄어듬.
    • 클라우드가 비싸다?
      • 구축해놓고 반환은 까먹는 경우가 많음
      • 탄력적으로 필요한만큼의 자원을 유지하는 것이 중요함
    • 클라우드 컴퓨팅이 없다면?
      • 직접 서버/네트워크/스토리지 구매와 설정 등을 직접 수행해야함
      • 데이터 센터 공간을 직접 확보해야함
      • 공간에 서버를 구매해 네트워크 설정 - 보통 적어도 2~3달 걸림
      • 피크타임 기준으로 capacity planning을 해야함 - 피크에 맞춰 놓으면 다른 시간엔 놀고 있는 자원들이 높은 현상 발생
      • 직접 운영비용 vs. 클라우드 비용
    • 클라우드 컴퓨팅의 장점 정리
      • 초기 투자 비용 감소
        • CAPEX(Capital Expenditure) vs. OPEX(Operating Expense)
        • 자원 준비를 위한 대기시간 대폭 감소 - Shorter time to Market
        • 놀고 있는 자원을 제거함으로 비용 감소
        • 글로벌 확장의 용이함
        • 소프트웨어 개발 시간 단축 - Managed service(SaaS) 이용

 

  • AWS
    • 가장 큰 클라우드 컴퓨팅 서비스 업체
      • 2002년 아마존의 상품 데이터를 API로 제공하면서 시작함
      • 놀고 있는 서버들을 다른 개발자에게 빌려주면 어떨까?로 시작
      • 최근 들어서는 ML/AI 관련 서비스들도 내놓음
    • 사용 고객
      • Netflix, Zynga 등의 상장업체들도 사용
    • 다양한 종류의 소프트웨어/플랫폼 서비스를 제공
      • AWS의 서비스만으로 쉽게 온라인 서비스를 생성함
    • EC2 - Elastic Compute Cloud
      • AWS의 서버 호스팅 서비스
        • 리눅스, 윈도우, mac 서버를 launch하고 계정을 생성해 로그인 가능
        • 가상 서버들이라 전용 서버에 비해 성능은 떨어짐
      • 다양한 종류의 서버 타입 제공
        • on-demand, reserved, spot instance
    • S3 - Simple Storage Service
      • 대용량 클라우드 스토리지 서비스
      • 데이터 저장 관리를 위해 계층적 구조를 제공함
      • 글로벌 네임스페이스를 제공하기 때문에 top-level 디렉토리 이름 선정에 주의
      • S3에서는 디렉토리를 버킷이라고 부름
      • 버킷이나 파일별로 액세스 컨트롤 가능
      • 낮은 가격의 장점. 1TB당 1달에 23달러
  • 기타 중요 AWS 서비스(1) - 데이터베이스
    • RDS(Relational Database Service)
      • MySQL, PostgreSQL, Aurora
      • Oracle, MS SQL Server
    • DynamoDB
    • Redshift
    • ElastiCache
    • Neptune(Graph database)
    • ElasticSearch
    • MongoDB
  • 기타 중요 AWS 서비스(2) - AI&ML
    • SageMaker
      • Deep Learning and Machine Learning end-to-end framework
    • Lex
      • Conversational Interface(Chatbot service)
    • Polly
      • Text to Speech Engine
    • Rekognition
      • Image Recognition Service
  • 기타 중요 AWS 서비스(3)
    • Amazon Alexa
      • voice bot platform
    • Amazon Connect
      • contact center solution
      • 콜센터 구현이 쉬워짐
    • Lambda
      • Event-driven, serverless computing engine
      • 서비스 구현을 위해 EC2 런치할 필요 없음
      • Google Cloud - Cloud function으로 존재, Azure - Azure function 으로 존재

 

 

 

 

7. Redshift

  • 특징
    • Scalabel SQL engine
    • 2PB까지 지원하지만, 64TB정도부터 문제가 있는듯
    • Still OLAP
      • 응답 속도가 빠르지 않기 때문에, 프로덕션 데이터베이스로 사용 불가
    • Columnar storage
      • 컬럼별 압축이 가능
      • 컬럼 추가, 삭제가 아주 빠름
    • 벌크 업데이트 지원
      • INSERT를 사용해 복사하는 것이 아닌, 레코드가 들어있는 파일을 S3로 복사하고 COPY 커맨드로 Redshift로 일괄 복사 가능
    • 고정 용량/비용
      • 장점 - 비용 관리 측면에선 예상이 됨
      • 단점 - 사용을 안해도 돈이 나감. 더 많은 계산이 필요할 땐 시간이 걸림
      • vs. snowflake(AWS, GCP 가능) or BigQuery(GCP 가능)
    • 다른 데이터 웨어하우스와 같이, primary key uniqueness를 보장하지 않음
      • primary key uniqueness를 보장하려면, 레코드가 추가될 때마다 중복되는지 여부를 체크해야함. 속도가 저하됨
      • 이는 데이터 엔지니어가 데이터 웨어하우스 외부에서 보장할 수 있게 해줘야함
      • 프로덕션 데이터베이스들은 보장함
    • Postgresql 8.x와 SQL이 호환됨
      • 다시 한번 SQL이 메인 언어라는 점을 명심하렴
      • 따라서, 테이블 디자인이 아주 중요함!

 

  • Redshift 옵션과 가격

Redshift options and pricing

  • 폴더 구성
    • raw_data - 데이터 엔지니어들이 ETL후 관리
    • analytics - 데이터 분석가들이 관리
    • adhoc - 개발자 혹은 데이터 직군들이 테스트할 일이 있을 때

 

  • Redshift 액세스 방법
    • 이번 강좌에서는 Google Colab 사용
    • Postgresql 8.x와 호환되는 모든 툴과 프로그래밍 언어를 통해 접근 가능
      • SQL workbench(mac, window), Postico(mac)
      • Python - psycopg2 모듈
      • 시각화/대시보드 - Looker, Tableau, Power BI, Superset등에서 연결 가능

'dev course - DE > TIL' 카테고리의 다른 글

[데브코스] TIL 23일차  (0) 2024.04.24
[데브코스] TIL 22일차  (0) 2024.04.23
[데브코스] TIL 15일차  (0) 2024.04.16
[데브코스] TIL 14일차  (0) 2024.04.13
[데브코스] TIL 13일차  (0) 2024.04.12