TIL_day21 Data Warehouse, Cloud
230508 월요일
학습 주제 - 데이터 웨어하우스와 SQL 기본에 대해 배우고 이를 바탕으로 데이터 분석에 대해 학습 (1)
관계형 데이터베이스(RDB, Relational DataBase)란?
구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지이다.
관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL이다.
관계형 데이터베이스는 프로덕션 데이터베이스와 데이터 웨어하우스로 나누어진다.
프로덕션 데이터베이스
- MySQL, PostgreSQL, Oracle
- OLTP(Online Transcation Processing)
- 빠른 속도에 집중, 서비스에 필요한 정보 저장
- 사용자용
데이터 웨어하우스
- Redshift, Snowflake, BigQuery, Hive
- OLAP(Online Analytical Processing)
- 속도보다는 처리 데이터 크기에 집중, 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
- 개발자용
관계형 데이터베이스의 구조에 대해 알아보자.
관계형 데이터베이스는 2단계로 구성된다.
가장 밑단에는 테이블들이 존재하고 테이블의 상위에는 데이터베이스(혹은 스키마)가 존재한다.
엑셀을 예로 들어 설명을 하면, 데이터베이스는 엑셀의 파일을 의미하고, 테이블은 엑셀의 시트에 해당한다고 볼 수 있다.
테이블의 구조(테이블 스키마라고도 함)에 대해 살펴보자.
- 테이블은 레코드들로 구성된다.(행)
- 레코드는 하나 이상의 필드(컬럼)로 구성된다.(열)
- 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성된다.
위 그림의 테이블 A에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER가 컬럼, 정확히 말하면 컬럼의 이름인 것이고 그 밑의 데이터들이 레코드들이 되는 것이다.
SQL(Structured Query Language)이란?
관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해 주는 언어.
1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어.
위에서 소개한 모든 데이터 웨어하우스들도 다 SQL 기반이다.
Spark나 Hadoop도 SparkSQL과 Hive라는 SQL 언어가 지원된다.
SQL에는 DDL과 DML이 있다.
- DDL(Data Definition Language) : 테이블 구조 정의
- DML(Data Manipulation Language) : 테이블 데이터 조작/질의, 원하는 레코드 읽기, 추가, 삭제, 갱신
SQL의 단점 - 구조화된 데이터만을 다룬다.
- 정규 표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심하다.
- 많은 관계형 데이터베이스들이 플랫한 구조만 지원한다. (no nested like JSON, 구글 빅쿼리는 nested structure를 지원함. *nested structure란 중첩구조로서 필드 안에 필드가 들어갈 수 있는 구조)
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요하다.
- 관계형 데이터베이스마다 SQL 문법이 조금씩 상이하다.
Star schema와 Denormalized schema
Star schema
- Production DB에서 보통 사용
- 데이터를 논리적인 단위로 나눠 저장하고 필요시 join 하는 방식이다.
- 따라서 스토리지의 낭비가 덜하고 업데이트가 쉽다.
Denormalized schema
- 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음으로 별도의 join이 필요 없는 형태이다.
- 따라서 스토리지를 더 사용하지만 join이 필요 없기에 빠른 계산이 가능하다.
데이터 웨어하우스(Data Warehouse)란?
회사에 필요한 모든 데이터를 저장하는 SQL 기반의 관계형 데이터베이스라 할 수 있다.
프로덕션 데이터베이스와는 별도여야 한다.
AWS의 Redshift, Google Cloud의 Big Query, Snowflake 등이 대표적이다.
고정비용 옵션과 가변비용 옵션에 대해 생각해 볼 수 있다.
고객이 아닌 회사 내부 직원을 위한 데이터베이스이다. => 처리 속도보다 처리하는 데이터의 크기가 더 중요!
외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해 주는 코드들이 필요해지는데 이를 ETL(Extract, Tranform, Load) 혹은 데이터 파이프라인이라 부른다.
Cloud와 AWS
클라우드(Cloud)
컴퓨팅 자원(하드웨어, 소프트웨어 등등)을 네트워크를 통해 서비스 형태로 사용하는 것
키워드
- "No Provisioning"
- "Pay As You Go"
자원(예를 들면 서버)을 필요한 만큼 거의 실시간으로 할당하여 사용한 만큼 지불 => 탄력적으로 필요한 만큼의 자원을 유지하는 것이 중요하다!
클라우드 컴퓨팅의 장점
- 초기 투자 비용(CAPEX, Capital Expenditure)이 크게 줄어듦, 운영 비용(OPEX, Operating Expense) 사용
- 리소스 준비를 위한 대기시간이 대폭 감소
- 노는 리소스 제거로 비용이 감소
- 글로벌 확장 용이
- 소프트웨어 개발 시간 단축 (Managed Service, SaaS 이용)
* SaaS(Software as a Service) - 서비스 형 소프트웨어
SaaS에 대해서는 아래 글을 참조하면 좋을 것 같다.
https://aws.amazon.com/ko/what-is/saas/
SaaS란 무엇인가요? - 서비스형 소프트웨어 설명 - AWS
SaaS는 이전에는 온프레미스 환경에서 실행하기에 너무 많은 비용 또는 에너지가 들었던 강력한 소프트웨어를 비즈니스에서 이용할 수 있다는 점에서 중요합니다. SaaS 제공업체는 하드웨어, 소
aws.amazon.com
AWS(Amazon Web Services)
아마존 닷컴의 클라우드 컴퓨팅 사업부로서 현재 클라우드 컴퓨팅 분야에서 압도적인 세계 1위를 차지하고 있다.
2002년 아마존의 상품데이터를 API로 제공하면서 시작되었고 최근에는 ML/AI 관련 서비스들도 제공되기 시작하였다.
현재 100여 개의 서비스를 전 세계 15개의 지역에서 제공하며 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로 한다.
넷플릭스, 크래프톤, 모더나, 삼성전자 등 세계적인 대기업들 또한 사용고객이며, 다양한 종류의 소프트웨어/플랫폼 서비스를 제공하기 때문에 AWS의 서비스만으로 쉽게 온라인 서비스를 생성할 수 있다.
AWS의 대표적인 서비스들을 몇 가지 알아보자.
EC2(Elastic Compute Cloud)
- AWS의 서버 호스팅 서비스이다.
- 리눅스 혹은 윈도우 서버를 launch 하고 account를 생성하여 로그인가능하다. (가상 서버들이라 전용 서버에 비해서는 성능이 떨어진다.)
- 다양한 종류의 서버 타입을 제공한다.(지역, 성능, 구매 옵션 등등,,)
S3(Simple Storage Service)
- 아마존이 제공하는 대용량 클라우드 스토리지 서비스로, 데이터 저장관리를 위해 계층적 구조를 제공한다.
- global namespace를 제공하기 때문에 top-level directory의 이름 선정에 주의해야 한다.
- S3에서는 디렉토리를 버킷(Bucket)이라 부른다.
- Bucket이나 파일별로 액세스 컨트롤이 가능하다.
기타 주요 서비스 - Database Services
- RDS(Relational Database Service) : MySQL, PostgreSQL, Aurora, Oracle, MS SQL Server
- DynamoDB
- ElastiCache
- 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
Redshift
- Scalable SQL 엔진으로 2PB까지 지원한다.
- 응답 속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용이 불가하다. (OLAP)
- 컬럼 별 압축이 가능하며 컬럼을 추가하거나 삭제하는 것이 아주 빠르다.
- 벌크 업데이트를 지원하여 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄 복사가 가능하다.
- 다른 데이터웨어하우스와 같이 primary key uniqueness를 보장하지 않는다.
- 고정 용량/비용 SQL 엔진 <=> Snowflake, BigQuery
- PostgreSQL 8.x와 SQL이 호환된다. (모든 기능 X)
Redshift 액세스 방법
- Google Colab 사용
- PostgreSQL 8.x와 호환되는 모든 툴과 프로그래밍 언어를 통해 접근 가능
- SQL Workbench, Postico
- Python의 psycopg2 모듈
- 시각화/대시보드 툴 Looker, Tableau, Power BI, Superset 등에서 연결 가능