1. SQL과 데이터베이스
1-1. SQL의 중요성
Data 관련 직군은 크게 세 가지로 구분할 수 있습니다.
1. 데이터 엔지니어 : 데이터 프로세스(ETL, ELT 등) 관련 엔지니어.
2. 데이터 분석가
3. 데이터 과학자
데이터 엔지니어는 SQL을 활용하여 데이터를 데이터 웨어하우스에 저장하며, 분석가와 과학자는 데이터 웨어하우스에서 SQL을 활용하여 데이터를 활용합니다.
이처럼 데이터 요약과 분석을 위해 SQL은 필수적이며, SQL만큼 구조화된 데이터를 다루기 쉬운 표준 언어는 없습니다.
1-2. 관계형 데이터베이스
관계형 데이터베이스는 구조화된 데이터를 저장하고 질의할 수 있는 스토리지입니다.
크게 두 분류로 나눌 수가 있습니다.
-
프로덕션 데이터베이스 (MySQL, PostgreSQL, Oracle, ..)
- OLTP(OnLine Transaction Processing)이라고도 불림.
- 빠른 속도에 집중.
-
데이터 웨어하우스 (Redshift, Snowflake, BigQuery, Hive, ..)
- OLAP(OnLine Analytical Processing)이라고도 불림.
- 처리 데이터 크기에 집중.
- 보통 프로덕션 데이터베이스를 복사하여 데이터 웨어하우스에 저장함.
만약 프로덕션 데이터베이스만 존재한다면 어떨까요?
=> 원하는 데이터를 얻기 위해서 직접 프로덕션 DB에 쿼리 -> 해당 관련 (백엔드)시스템의 과부하 발생(성능 감소) -> 백엔드 vs 데이터 엔지니어간의 불화 발생.
따라서, 데이터 웨어하우스가 필요합니다. 데이터 웨어하우스는 쿼리가 발생해도 프로덕트(시스템)에 영향을 주지 않기 때문입니다.
1-3. 관계형 데이터베이스의 구조
관계형 데이터베이스의 구조는 보통 테이블 스키마, 테이블 레코드의 구조로 이루어져 있습니다.
- 테이블 스키마(폴더): 테이블의 용도에 따라 구분.
- 테이블(폴더 내 존재): { id int, name varchar(32) } 처럼 테이블을 정의.
1-4. SQL의 특징
SQL은 관계형 데이터베이스를 질의하거나 조작해주는 언어입니다.
SQL은 크게 두 종류로 구분됩니다.
-
DDL(Data Definition Language)
- 테이블 구조를 정의하는 용도입니다.
- 예) CREATE, ALTER, DROP, ..
-
DML(Data Manipulation Language)
- 레코드를 질의하는 언어입니다.
- 레코드 추가/삭제/갱신 용도입니다.
- 예) INSERT, DELETE, UPDATE, ..
SQL의 단점은 다음과 같습니다.
- 비구조화된 데이터 처리가 힘들다.
- 관계형 데이터베이스마다 SQL 문법이 약간씩 다르다.
- 대부분의 관계형 데이터베이스는 nested한 구조에 대해서 처리가 불가능하다. (예, 테이블 스키마에서 list형으로 정의할 수가 없다.)
빅데이터가 도래하면서 SQL이 쓸모없다고 생각할 수 있지만, 그럼에도 SQL은 빅데이터 세상에서도 매우 중요합니다.
1-5. 데이터 모델링
데이터 모델링 방식은 크게 두 종류로 구분합니다.
-
Star Schema
- 데이터를 논리적 단위로 나누어서 저장하고 필요 시 조인(느린 속도).
- 스토리지 낭비가 적다.
- 업데이트가 쉽다.
-
Denomalized Schema
- 모든 데이터를 한 곳에 저장(빠른 속도).
- 스토리지 낭비가 많다.
- 데이터 웨어하우스에 적합한 방식이다.
2. 데이터 웨어하우스
다음과 같은 특징이 있습니다.
- 데이터 웨어하우스에는 회사에 필요한 모든 데이터가 저장됨.
- SQL 기반의 관계형 데이터베이스.
- OLAP(OnLine Analytical Processing).
- 고객이 아닌 내부 직원을 위한 데이터베이스 (처리 속도보다 데이터 처리 크기가 중요.).
- ETL 혹은 데이터 파이프라인 (외부 데이터 -> ETL -> 데이터 웨어하우스)
- 예시) AWS의 RedShift(고정 비용), Google Cloud의 Big Query, Snowflake (가변 비용, 업계에서 주로 사용됨.)
2-1. 데이터 인프라
- 데이터 인프라는 [ETL -> 데이터 웨어하우스]의 구조로 이루어져 있습니다.
- 데이터 엔지니어가 관리하며,
- 비구조화 데이터가 많아질수록, 기존의 [ETL -> 데이터 웨어하우스]의 구조에서 Spark와 같은 대용량 분산처리 시스템이 인프라에 추가될 수 있습니다.
2-2. 데이터 순환 구조
데이터는 다음과 같은 단계를 순환합니다.
- 데이터 인프라 구축.
- 비즈니스 인사이트(분석).
- product 서비스 개선(머신러닝).
2-3. Cloud
클라우드란 컴퓨팅 자원을 Network을 통해 서비스 형태로 사용하는 것을 의미합니다.
- Pay As You Go (쓴 만큼 지불)
- No Provisioning (사전 준비 X)
- 필요한 자원 만큼만 사용하고 나머지 리소스는 반환하는 코드가 반드시 필요 (비용 절감).
장점은 다음과 같습니다.
- 초기 투자 비용 절감. (다만, 운영 비용은 증가함.)
- 리소스 준비를 위한 대기 시간 감소.
- 노는 리소스 제거(탄력적 할당)로 비용 절감.
- 글로벌 확장 용이.
- 소프트웨어 개발 시간 단축. (SaaS 활용.)
2-4. AWS
AWS는 아마존의 클라우드 컴퓨팅 서비스 업체로, 가장 큰 클라우드 컴퓨팅 서비스 업체입니다.
EC2 (Elastic Computing Cloud)
- AWS의 서버 호스팅 서비스.
- 다양한 종류의 서버 타입 제공.
- 다양한 구매 옵션 ( On-Demand(쓴 만큼 지불), Reserved(1년 or 3년 약정), Spot Instance(남는 리소스 경매) )
- 보통의 경우 On-Demand 방식으로 지불함.
S3 (Simple Storage Service)
- AWS의 스토리지 서비스.
- S3에서는 디렉토리를 버킷(bucket)이라고 부름.
- 버킷 및 파일 별로 액세스 권한 부여가 가능.
- 저렴한 가격.
Database Service
AI & ML Service
2-5. RedShift
- Scalable SQL 엔진.
- 2PB까지 지원. (다만, 실질적인 리소스는 아님.)
- still OLAP (프로덕션 데이터베이스용으로 사용 X. only 데이터 웨어하우스용.)
- Columnar Storage
- 벌크 업데이트 지원 (레코드 파일을 S3로 복사 -> "COPY" 커맨드로 일괄 복사.)
- 고정 용량 & 고정 비용.
- Primary key uniqueness 보장X.
- PostgreSQL 8.x와 SQL이 호환됨.
- SQL이 메인 언어.