1. SQL이란
SQL이란 Structured Query Language의 약자로 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어이자 데이터 처리에서 기본이 되고 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어이다.
관계형 데이터베이스
관계형 데이터 베이스란?
- 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지이다.
- 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
- 관계형 데이터베이스를 조작하는 프로그래밍 언어는 SQL이다.
- 테이블 정의를 위한 DDL (Data Definition Language),
테이블 데이터 조작/질의를 위한 DML (Data Manipulation Language)가 존재한다.
대표적 관계형 데이터베이스
- 프로덕션 데이터베이스: MySQL, PostgreSQL, Oracle, …
- OLTP (OnLine Transaction Processing)
- 빠른 속도에 집중. 서비스에 필요한 정보 저장
- 데이터 웨어하우스: Redshift, Snowflake, BigQuery, Hive, …
- OLAP (OnLine Analytical Processing)
- 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
- 관계형 데이터베이스의 구조
- 관계형 데이터베이스는 2 단계로 구성됨
- 가장 밑단에는 테이블들이 존재 (테이블은 엑셀의 시트에 해당)
- 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성 (엑셀에서는 파일)

- 테이블의 구조 (종류에 따라 테이블 스키마라고 부르기도 함)
- 테이블은 레코드들로 구성 (행)
- 레코드는 하나 이상의 필드(컬럼)로 구성 (열)
- 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성됨

SQL의 특징과 구조
- SQL은 두 종류의 언어로 구성되어있다.
- DDL (Data Definition Language)
- DML (Data Manipulation Language)
- 테이블에서 원하는 레코드들을 읽어오는 질의 언어
- 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어
- 특징
- 구조화 된 데이터를 다루는 한 데이터 규모와 상관없이 쓰인다.
- 모든 대용량 데이터 웨어하우스는 SQL기반이다.
- Redshift, Snowflake, BigQuery, Hive 등등
- Spark이나 Hadoop도 예외는 아님
- SparkSQL과 Hive라는 SQL 언어가 지원된다.
- 데이터 분야에서 일하고자 하면 반드시 익혀야할 언어이다.
- 단점
- 구조화된 데이터를 다루는데 최적화가 되어있음
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
- 많은 관계형 데이터베이스들이 플랫한 구조만 지원함 (no nested like JSON)
- 구글 빅쿼리는 nested structure를 지원함
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
- 즉 SQL만으로는 비구조화 데이터를 처리하지 못함
- 관계형 데이터베이스마다 SQL 문법이 조금씩 상이 (많이 차이나지는 않는다.)
Schema의 종류
Star schema
- Production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
- 데이터를 논리적 단위로 나눠 저장하고 필요시 조인. 스토리지의 낭비가 덜하고 업데이트가 쉬움

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

2. 데이터 웨어하우스
데이터 웨어하우스란?
- 회사에 필요한 모든 데이터를 저장하고 SQL 기반의 관계형 데이터베이스이다.
- 프로덕션 데이터베이스와는 별도이어야 함
- OLAP (OnLine Analytical Processing) vs. OLTP (OnLine Transaction Processing)
- AWS의 Redshift, Google Cloud의 Big Query, Snowflake 등이 대표적
- 데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스
- 처리속도가 아닌 처리 데이터의 크기가 더 중요해짐
- ETL 혹은 데이터 파이프라인
- 외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 코드들이 필요해지는데 이를 ETL 혹은 데이터 파이프라인이라고 부릅니다.
데이터 인프라란?
- 데이터 엔지니어가 관리함
- 여기서 한 단계 더 발전하면 Spark과 같은 대용량 분산처리 시스템이 일부로 추가됨

데이터 순환 구조

3. Cloud
클라우드의 정의
- 컴퓨팅 자원(하드웨어, 소프트웨어 등등)을 네트웍을 통해 서비스 형태로 사용하는 것.
- 대표 키워드
- “No Provisioning”
- “Pay As You Go”
- 자원(예를 들면 서버)을 필요한만큼 (거의) 실시간으로 할당하여 사용한큼 지불
- 탄력적으로 필요한만큼의 자원을 유지하는 것이 중요
클라우드의 장점
- 초기 투자 비용이 크게 줄어듬
- 서버/네트웍/스토리지 구매와 설정등을 직접 수행할 필요가 없다.
- 데이터센터 공간을 직접 확보할 필요가 없다. (No-Co-location)
- 클라우드를 사용하지 않을시 확장이 필요한 경우 공간을 먼저 더 확보해야함
- 공간에 서버를 구매하여 설치하고 네트웍 설정할 필요가 없다.
- 리소스 준비를 위한 대기시간 대폭 감소
- 보통 서버를 구매해서 설치하는데 적어도 두세달은 걸림
- 노는 리소스 제거로 비용 감소
- 클라우드를 사용하지 않을시 Peak time을 기준으로 Capacity planning을 해야하는데 필요시에만 사용가능
- 놀고 있는 자원들이 높게 되는 현상 억제
- 직접 운영비용 vs. 클라우드 비용
- 글로벌 확장 용이
- 소프트웨어 개발 시간 단축
- Managed Service (SaaS) 이용
클라우드의 예시
다양한 클라우드의 예시들이 있지만 그 중 AMAZON에서 제공하는 AWS(Amazon Web Service)를 알아보겠습니다.
AWS 소개
- 가장 큰 클라우드 컴퓨팅 서비스 업체.
- 2002년 아마존의 상품데이터를 API로 제공하면서 시작
- 현재 100여개의 서비스를 전세계 15개의 지역에서 제공.
- 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로 함.
- 최근 들어 ML/AI 관련 서비스들도 내놓기 시작
- 사용고객
- Netflix, Zynga등의 상장업체들도 사용.
- 많은 국내 업체들도 사용시작 (서울 리전)
- 다양한 종류의 소프트웨어/플랫폼 서비스를 제공.
- AWS의 서비스만으로 쉽게 온라인서비스 생성.
AWS의 서비스

다양한 서비스들이 존재하지만 그 중 EC2, S3, 주요하게 배워 볼 Database Services인 Redshift를 알아보겠습니다.
EC2(Elastic Compute Cloud)
- AWS의 서버 호스팅 서비스.
– 리눅스 혹은 윈도우 서버를 론치하고 어카운트를 생성하여 로그인 가능 (구글앱엔진과의 가장 큰 차이점).
– 가상 서버들이라 전용서버에 비해 성능이 떨어짐.
– Bare-metal 서버도 제공하기 시작
- 다양한 종류의 서버 타입 제공
– 예를 들어 미국 동부에서 스몰타입(t2.small)의 무료 리눅스 서버를 하나 할당시
- 시간당 2.3 센트의 비용지불.
- 2GB 메모리, 1 가상코어, 160GB 하드디스크
- Incoming network bandwidth는 공짜이지만 outgoing은 유료.
- AWS의 다양한 종류의 구매 옵션
온디맨드 인스턴스(On-Demand Instances) – 시작하는 인스턴스에 대한 비용을 초 단위로 지불합니다.
절감형 플랜(Savings Plans) – 1년 또는 3년 기간 동안 시간당 USD로 일관된 사용량을 약정하여 Amazon EC2 비용을 절감할 수 있습니다.
예약 인스턴스(Reserved Instances) – 1년 또는 3년 기간 동안 인스턴스 유형 및 리전을 포함하여 일관된 인스턴스 구성을 약정하여 Amazon EC2 비용을 절감할 수 있습니다.
스팟 인스턴스(Spot Instances) – 미사용 EC2 인스턴스를 요청하여 Amazon EC2 비용을 대폭 줄일 수 있습니다.
전용 호스트(Dedicated Hosts) – 인스턴스 실행을 전담하는 실제 호스트 비용을 지불하며, 기존의 소켓, 코어 또는 VM 소프트웨어별 라이선스를 가져와 비용을 절감합니다.
전용 인스턴스(Dedicated Instances) – 단일 테넌트 하드웨어에서 실행되는 인스턴스 비용을 시간 단위로 지불합니다.
용량 예약(Capacity Reservations) – 특정 가용 영역의 EC2 인스턴스에 대해 용량을 예약합니다.
S3(Simple Storage Service)
- 아마존이 제공하는 대용량 클라우드 스토리지 서비스
- S3는 데이터 저장관리를 위해 계층적 구조를 제공
- 글로벌 내임스페이스를 제공하기 때문에 톱레벨 디렉토리 이름 선정에 주의.
- S3에서는 디렉토리를 버킷(Bucket)이라고 부름
- 버킷이나 파일별로 액세스 컨트롤 가능
기타 중요서비스
- Database Services
- RDS (Relational Database Service)– MySQL, PostgreSQL, Aurora – Oracle, MS SQL Server
- DynamoDB
- Redshift
- 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
- Rekognition
- Image Recognition Service
- etc.
- Amazon Alexa
- Amazon’s voice bot platform
- Amazon Connect
- Amazon’s Contact Center Solution– 콜센터 구현이 아주 쉬워짐
- Lambda
- Event-driven, serverless computing engine
- 서비스 구현을 위해서 EC2를 론치할 필요가 없음
- Google Cloud에는 Cloud Function이란 이름으로 존재– Azure에는 Azure Function이란 이름으로 존재
Redshift
Redshift란
Scalable SQL 엔진로써 2 PB까지 지원하고 OLAP 형식이며, Columnar storage이다.
- 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용불가
- 컬럼별 압축이 가능하다.
- 컬럼을 추가하거나 삭제하는 것이 아주 빠름
- 벌크 업데이트 지원
- 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄
복사
- 고정 용량/비용 SQL 엔진
- Snowflake와 Google의 BigQuery는 다르게 고정 용량/비용이다.
- 다른 데이터 웨어하우스처럼 primary key uniqueness를 보장하지 않음
Redshift는 Postgresql 8.x와 SQL이 호환됨
- 하지만 Postgresql 8.x의 모든 기능을 지원하지는 않음
- Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 가능
- 다시 한번 SQL이 메인 언어라는 점 명심
Redshift Schema (폴더) 구성
