5주차 월요일, 21일차 Today I Learned
SQL을 이용한 데이터 분석 (1)
: SQL과 데이터베이스 소개 - RDB, SQL, 데이터 웨어하우스, AWS, Redshift
✏️ 학습 내용
데이터와 관련된 직군을 3개로 구분 짓자면, 데이터 엔지니어, 데이터 분석가, 데이터 과학자가 있다. 데이터 엔지니어는 파이썬, 자바/스칼라와 같은 언어와 SQL, 데이터베이스 (데이터 웨어하우스)와 같은 데이터 영역, Airflow, DBT를 통한 ETL/ELT, Spark와 Hadoop을 다룰 줄 알아야 하고, 데이터 분석가는 SQL, 비즈니스 도메인에 대한 지식, 통계, AB 테스트 분석 등이 필요하다. 데이터 과학자는 머신러닝, SQL, 파이썬, 통계에 대해 알아야 한다.
데이터 관련 직군에서 공통적으로 들어간 것이 있는데, 바로 SQL 이다. 데이터 요약과 데이터 분석을 위해 SQL이 필요하다. 데이터 분석가에게 가장 중요하지만, 다른 직군에게도 SQL은 필수적으로 요구된다.
1. 관계형 데이터베이스 (RDB)
SQL에 대해 본격적으로 배우기 전에, 관계형 데이터 베이스에 대해 알아둘 필요가 있다. 관계형 데이터베이스란 구조화된 데이터를 저장하는데 사용되는 데이터베이스로, 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지이다. 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장한다. 이 테이블에는 컬럼(열)과 레코드(행)가 존재한다.
이러한 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL이다. SQL은 테이블 정의를 위한 DDL, 테이블 데이터 조작 및 질의를 위한 DML로 구분된다.
SQL 문장 종류
- DDL (Data Definition Language) : 테이블 정의
- DML (Data Manipulation Language) : 테이블 데이터 조작/질의
대표적으로 관계형 데이터베이스의 두 종류가 있다. 백엔드나 프론트엔드 개발자들이 주로 사용하는 프로덕션 데이터베이스와 데이터 직군에서 주로 사용하는 데이터 웨어하우스이다.
관계형 데이터베이스 종류
- 프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle 등 OLTP
- 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive 등 OLAP
프로덕션 데이터베이스는 온라인 트랜잭션 프로세싱 방식이며, 빠른 속도에 집중하고, 서비스에 필요한 정보를 저장한다. 그리고 웹과 연동된다. 데이터 웨어하우스는 온라인 분석 프로세싱 방식이며, 처리 데이터 크기에 집중한다. 그리고 데이터 분석 혹은 모델 빌딩 등을 위한 데이터 저장을 한다. 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장한다.
보통의 작은 회사처럼 프로덕션 데이터베이스만 있을 경우, 데이터베이스가 서버에 연동이 되어 있으므로 데이터 분석을 위해서 무언가 무거운 쿼리를 날렸을 때, 서비스 전체에 속도가 저하되는 경우가 발생할 수도 있다. 그러므로 데이터 팀에서는 데이터 웨어하우스처럼 별도의 데이터베이스가 필요한 것이다.
관계형 데이터베이스의 구조는 2단계로 구성된다. 데이터베이스(혹은 스키마)라는 폴더 밑에 테이블들이 구성된다. 엑셀 파일이 스키마라면 엑셀 파일 안 시트가 테이블이 된다. 테이블 구조 (스키마 구조)는 레코드(행)들로 구성되어 있고, 레코드는 하나 이상의 필드(컬럼, 열)로 구성된다. 그리고 필드는 이름, 타입, 속성으로 구성된다.
2. SQL (Structured Query Language)
SQL이란 관계형 데이터베이스에 있는 데이터 (테이블)를 질의하거나 조작해주는 언어이다. 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어로, DDL과 DML 두 종류의 언어로 구성되어 있다.
빅데이터 세상에서 SQL은 중요하다. 구조화된 데이터를 다루는 한, SQL은 데이터의 규모와 상관없이 어디에나 쓰인다. 실제로 모든 대용량 데이터 웨어하우스는 SQL 기반이다. Spark나 Hadoop도 SparkSQL, Hive라는 SQL 언어가 지원된다.
즉, 데이터 분야에서 일하고자 하면 반드시 익혀야 할 기본 기술이다.
SQL 단점 :
다만, 구조화된 데이터를 다루는데 최적화가 되어 있다 보니까 텍스트처럼 비구조화된 데이터는 다루지 못 한다. 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하지만 제약이 심하고, 많은 관계형 데이터베이스들이 플랫한 구조만 지원한다. 그래서 비구조화된 데이터를 다루기 위해 Spark나 Hadoop 같은 분산 컴퓨팅 환경이 필요해졌다.
그리고 관계형 데이터베이스마다 문법이 조금씩 상이하다는 불편한 점도 있다.
데이터 모델링 방법 :
데이터 모델링이란, 데이터를 표현하고 저장하는 방식을 말한다. 데이터 모델링을 하는 방법은 두 가지가 존재한다.
데이터 모델링하는 방법
1. Star schema (프로덕션 데이터베이스용)
2. Denormalized schema (데이터 웨어하우스용)
프로덕션 DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용하여 데이터를 저장한다. 이는 데이터를 논리적 단위로 나누어 저장하고, 필요 시에 조인하여 활용한다. 따라서 스토리지의 낭비가 덜하고 업데이트가 쉽다.
반면 Denormalized 스키마는 데이터 웨어하우스에서 사용하는 방식이다. 단위 테이블로 나누어 저장하지 않음으로 별도의 조인이 필요 없는 형태이므로, 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능하다.
3. 데이터 웨어하우스
데이터 웨어하우스에서는 회사에 필요한 모든 데이터를 저장한다. 프로덕션 데이터베이스와는 별도이어야 하며, 주로 프로덕션 데이터베이스를 복사하고 이후에 외부 정보들도 가져와서 활용한다.
AWS의 Redshift, Google Cloud의 BigQuery, Snowflake 등의 기술이 대표적인데, Redshift은 고정 비용 옵션이며, BigQuery, Snowflake는 가변 비용 옵션이다. 회사에서 사용할 때에는 빅쿼리나 스노우플레이크가 좋다.
데이터 웨어하우스는 고객이 아닌 데이터 팀과 같은 내부 직원을 위한 데이터베이스이므로, 처리속도가 아니라 처리 데이터의 크기가 더 중요하다.
외부에 존재하는 데이터를 읽어서 데이터 웨어하우스로 저장해주는 코드들이 필요한데, 이를 ETL 혹은 데이터 파이프라인이라고 부른다. 데이터 엔지니어들이 이를 구현하고 관리해야 한다.
데이터 인프라는 데이터 엔지니어가 관리한다. 서비스에서 직접 생기는 데이터와 3rd-party를 통해 생기는 간접 데이터를 ETL 통해 데이터 웨어하우스에 저장하게 되는데, ETL과 데이터 웨어하우스가 데이터 인프라 영역이다. 여기서 한 단계 더 발전하면 Spark 같은 대용량 분산처리 시스템이 데이터 인프라의 일부로 추가가 된다.
데이터 발전 단계, 즉 데이터 순환 구조를 보면 우선 사이트 방문 트래픽과 외부 데이터가 ETL 통해 데이터 웨어하우스에 쌓인다. 이는 데이터 엔지니어가 수행하며, 이를 분석 및 시각화하여 비즈니스 인사이트를 얻어낼 수 있다. 이것은 데이터 분석가의 영역이다. 이후 데이터 과학자는 개인화 등을 통한 제품 서비스 개선을 통찰해낸다.
4. Cloud, AWS
클라우드란 하드웨어, 소프트웨어 등의 컴퓨팅 자원을 네트워크를 통해 서비스 형태로 사용하는 것이다. 서버와 같은 자원을 필요한만큼 (거의) 실시간으로 할당하여 사용한 만큼 지불하는 구조이다. 따라서 탄력적으로 필요한 만큼의 자원을 유지하는 것이 중요하다.
No Provisioning : 내가 준비할 필요가 없다. (시간 단축)
Pay As You Go : 쓴 만큼 돈을 지불한다. (초기 투자 x)
클라우드 컴퓨팅이 없었다면 서버, 네트워크, 스토리지 구매와 설정 등 많은 것을 직접 수행해야 했을 것이다. 데이터센터 공간 확보, 그 공간에 서버를 구매해서 설치하고 네트워크를 설정하는 것, Peak time 기준으로 Capacity planning 하는 것 등의 작업들이 있다. 서버를 구매해서 설치하는 것만 해도 적어도 2-3달은 소요된다.
클라우드 컴퓨팅 장점은 다음과 같다. 클라우드 컴퓨팅을 통해서 초기 투자 비용이 크게 줄어들고, 리소스 준비를 위한 대기 시간이 감소되며, 노는 리소스 제거로 비용이 감소되고, 글로벌 확장이 용이하며, 소프트웨어 개발 시간을 단축할 수 있다.
이러한 클라우드 컴퓨팅 서비스 업체 중에서 가장 크고, 가장 먼저 시행한 것이 바로 AWS이다. 2002년 아마존의 상품데이터를 API로 제공하면서 시작했다. 현재는 100여개의 서비스를 전세계 15개의 지역에서 제공한다. 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로 하며, 최근 들어서는 머신러닝과 인공지능 관련 서비스들도 내놓기 시작했다. AWS는 다양한 종류의 소프트웨어와 플랫폼 서비스를 제공한다. 전체 마켓쉐어의 약 30% 정도를 차지한다.
AWS의 대표적인 서비스들 :
1. EC2 : 서버 호스팅 서비스
2. S3 : 대용량 클라우드 스토리지 서비스 (일종의 웹 하드)
이 외에도 데이터베이스 관련하여 RDS, DynamoDB, Redshift, ElastiCache Neptune, ElasticSearch, MongoDB, 인공지능 및 머신러닝 관련하여 SageMaker, Lex, Polly, Rekognition, 그리고 Amazon Alexa, Amazon Connect, Lambda 등의 중요 서비스가 있다.
5. Redshift
Redshift는 Scalable SQL 엔진으로, 2PB까지 지원하고, 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용 불가능하여 OLAP 방식이다. 컬럼별로 저장하고, 벌크 업데이트를 지원하는 고정 용량/비용의 SQL 엔진이다.
Postgresql 8.x와 SQL이 호환되는데, Postgresql 8.x의 모든 기능을 지원하지는 않지만 지원하는 툴이나 라이브러리로 액세스 가능하다. 중요한 것은 SQL이 메인 언어이므로 테이블 디자인을 잘 해야 한다.
이번 실습에서는 Google Colab을 활용하여 dc2.large 옵션으로 사용할 예정이다.
💡 배운 점
관계형 데이터베이스와 SQL, 그리고 데이터 웨어하우스 및 AWS와 그 서비스 중 하나인 Redshift에 대해 간략한 개요 정도로 배웠다.
데이터 웨어하우스 역시도 관계형 데이터베이스이고, 서비스에 영향을 주지 않기 위해 프로덕션 데이터베이스와 분리가 필요하다.
SQL은 구조화된 언어이고, 데이터 웨어하우스에서도 이 SQL이 필요한 중요한 언어이다.
SQL의 부족한 점을 보완하기 위해 Spark, Hadoop 같은 서비스가 필요하다.
클라우드 컴퓨팅이 얼마나 효율적인 지에 대해서 배웠다. AWS가 많이 사용되는 이유가 있다.
🔖 잘한 것과 잘못한 것
개요 부분은 쉽게 잘 들었고, 주어진 퀴즈도 쉽게 풀었다.
다만 많은 서비스 명칭이 나와서 완벽하게 이해하고 넘어가진 못했다.
📝 남아있는 의문과 개선점
1. AWS의 다양한 서비스 종류
2. AWS 각각 서비스에 대해서
3. ETL, 데이터 파이프라인의 자세한 내용
☁️ 소감
항상 월요일 수업은 듣기 편하다. 본격적인 공부를 위한 개요를 설명들으니 무엇을 배울 지에 대해서 파악하기 좋았다. SQL은 자격증을 따기 위해서 들었던 적이 있어서 다행이었다. AWS는 말만 많이 들었지 실제로 사용하게 될 줄은 몰랐는데, 공부하기 위한 범위가 어마어마할 것 같다. 그래도 본격적으로 데이터와 관련된 수업인 것 같아서 기대됐다.