2023. 12. 18. 20:48ㆍTIL
SQL_Analysis_Day 1-1
관계형 데이터베이스란 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지이다. 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장하며 테이블에는 컬럼(열)과 레코드(행)가 존재한다. 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL이다. SQL에는 테이블 정의를 위한 DDL(Data Definition Language)와 테이블 데이터 조작/질의를 위한 DML(Data Manipulaiton Language)가 있다.
대표적 관계형 데이터베이스는 2가지가 있다.
- 프로덕션 데이터베이스: MySQL, PostgreSQL, Oracle, ...
- OLTP(OnLine Transaction Processing)
- 빠른 속도에 집중, 서비스에 필요한 정보 저장
- 데이터 웨어하우스: Redshift, Snowflake, BigQuery, Hive,...
- OLAP(OnLine Analytical Processing)
- 처리 데이터 크기에 집중, 데이터 분석 혹은 모델 빌딩 등을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
관계형 데이터베이스는 2단계로 구성되는데 가장 밑단에는 테이블(엑셀에서는 시트)들이 존재하고 테이블들은 데이터베이스(혹은 스키마/ 엑셀에서는 파일)라는 폴더 밑으로 구성된다. 테이블의 구조(테이블 스키마)로 레코드(행)들이 구성되며 레코드는 하나 이상의 필드(컬럼)로 구성된다. 필드(컬럼)는 이름, 타입, 속성(primary key)으로 구성된다.


SQL(Stuctured Query Language)는 관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어이다. SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어이며 테이블의 구조를 정의하는 언어인 DDL과 테이블에서 원하는 레코드들을 읽어주는 질의 언어이자 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어인 DML로 이루어져 있다. 구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰이고 모든 대용량 데이터 웨어하우스는 SQL 기반이므로 SQL은 빅데이터 세상에서도 중요하다. Spark나 Hadoop도 각각 SparkSQL과 HIve라는 SQL 언어가 지원된다. SQL은 모든 데이터 직군에서 필수 기술이다. 그러나 SQL은 구조화된 데이터를 다루는데 최적화가 되어있어 여러 제약들이 있다. 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심하며 많은 관계형 데이터베이스들이 플랫한 구조만 지원한다. 그래서 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요하다. 그리고 SQL 문법이 관계형 데이터베이스에 따라 조금씩 상이하다는 단점이 있다.
스키마의 종류로는 Star schema와 Denormalized schema가 있다.
- Star schema
- Production DB용 관계형 데이터베이스에서 보통 사용
- 데이터를 논리적 단위로 나눠 저장하고 필요시 조인
- 스토리지 낭비가 덜하고 업데이트가 쉬움
- Denormalized schema
- 데이터 웨어하우스에서 사용
- 단위 테이블로 나눠 저장하지 않으므로 별도의 조인이 필요 없음
- 스토리지를 더 사용하지만 조인이 필요 없기 때문에 빠른 계산이 가능
SQL_Analysis_Day 1-2
회사에 필요한 모든 데이터는 SQL 기반 관계형 데이터베이스인 데이터 웨어하우스에 저장하며 프로덕션 데이터베이스와는 별도이다. AWS의 Redshift, Google Cloud의 Big Query, Snowflake가 대표적 데이터 웨어하우스이다. 데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스로 처리속도가 아닌 처리 데이터 크기가 더 중요하다. 외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 코드들이 필요해지는데 이를 ETL 또는 데이터 파이프라인이라 부른다. 데이터를 ETL을 통해 데이터 웨어하우스에 저장되는 것을 데이터 인프라라 하며 데이터 엔지니어가 과정을 관리한다. 여기서 한 단계 더 발전하면 Spark과 같은 대용량 분산처리 시스템이 일부 추가된다.
클라우드는 컴퓨팅 자원(하드웨어, 소프트웨어 등)을 네트워크를 통해 서비스 형태로 사용하는 것으로 자원(예를 들면 서버)을 필요한 만큼 (거의) 실시간으로 할당하여 사용한 만큼 비용을 지불한다. 클라우드 컴퓨팅이 없었다면 서버/네트워크/스토리지 구매와 설정 등을 직접 수행해야 하며 데이터센터 공간을 직접 확보해야 한다. 그리고 그 공간에 서버를 구매하여 설치하고 네트워크를 설정해야 한다. 또, Peak time 기준으로 Capacity planning을 해야 놀고 있는 자원들이 높게 되는 현상을 방지할 수 있다. 클라우드 컴퓨팅을 통해 초기 투자 비용이 크게 줄어들고 리소스 준비를 위한 대기시간이 대폭 감소한다. 노는 리소스 제거로 비용이 감소하고 글로벌 확장이 용이하며 소프트웨어 개발 시간이 단축된다. AWS는 가장 큰 클라우드 컴퓨팅 서비스 업체이다. AWS는 2002년 아마존의 상품데이터를 API로 제공하면서 시작했으며 현재 100여 개의 서비스를 Netflix, Zynga, 여러 국내 업체 등 전 세계 15개 지역에서 제공하고 있다. 최근 들어 ML/AI 관련 서비스들도 내놓기 시작했으며 다양한 종류의 소프트웨어/플랫폼 서비스를 제공한다.
Redshift는 Scalable SQL 엔진으로 2PB까지 지원한다. 응답속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용할 수 없으며 컬럼별 압축이 가능하고 컬럼을 추가하거나 삭제하는 것이 아주 빠르다. 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 Redshift로 일괄 복사하는 방법으로 벌크 업데이트를 지원한다. 그리고 고정 용량/비용 SQL 엔진이고 다른 데이터 웨어하우스처럼 primary key uniqueness를 보장하지 않는다. Redshift는 Postgresql 8.x(text 타입 등 외 일부 기능)와 SQL이 호환이 된다. 그러기에 테이블 디자인이 중요하다.
공부하며 어려웠던 내용
테이블과 테이블 스키마, 그리고 테이블 레코드 등 비슷한 용어들이 많아 이를 구별하고 특징을 파악하는게 어려웠다. SQL을 깊게 활용하기 위해서 관계형 데이터베이스의 특징을 잘 알아야 겠다.
'TIL' 카테고리의 다른 글
| 데이터 웨어하우스와 SQL 기본에 대해 배우고 이를 바탕으로 데이터 분석에 대해 학습(3) (0) | 2023.12.20 |
|---|---|
| 데이터 웨어하우스와 SQL 기본에 대해 배우고 이를 바탕으로 데이터 분석에 대해 학습(2) (1) | 2023.12.19 |
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(5) (2) | 2023.12.08 |
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(4) (2) | 2023.12.07 |
| SQL 쿼리 문법을 활용하여 데이터 분석을 진행하기(3) (2) | 2023.12.06 |