- 데이터 엔지니어
- 파이썬, 자바/스칼라
- SQL, 데이터베이스
- ETL/ELT (Airflow, DBT)
- Spark, Hadoop
1. 관계형 데이터베이스란?
구조화된 데이터를 저장하는데 사용되는 관계형 DB가 무엇인지 알아보자.
관계형 데이터베이스
- 구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지
- 엑셀 스프레드 시트 형태의 테이블로 데이터를 정의하고 저장
(테이블에는 컬럼과 로우가 존재)
- 관계형 데이터베이스를 조작하는 프로그래밍 언어 : SQL
- DDL : 테이블 정의를 위한 언어
- DML : 테이블 데이터 조작/질의를 위한 언어
대표적인 관계형 DB
- 프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle, ...
- OLTP (Online Transaction Processing)
- 빠른 속도에 집중(애플리케이션과 연동되어 해당 서비스에 필요한 정보를 저장하고 읽어오는데 사용되기 때문에 응답 속도가 빨라야함.).
- 서비스에 필요한 정보 저장
- 주로 백엔드 개발자나 프로트엔드 개발자가 사용.
- 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive, ...
- OLAP (Online Analytical Processing)
- 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
- 데이터 관련 직군은 주로 데이터 웨어하우스 사용.
회사의 서비스에 사용되는 DB는 속도가 빨라야 하기 때문에 프로덕션 DB를 사용하고 이와 별개로 대용량 데이터베이스를 저장하기 위해 데이터 웨어하우스도 사용
(보통 스타트업은 프로덕션 DB만 사용하는데
데이터에 집중된 회사는 프로덕션 DB뿐만 아니라 데이터 웨어하우스도 사용)
회사 면접볼 때 질문 추천 : 데이터 팀에서 사용하는 데이터 웨어하우스는 무엇인가요?
관계형 데이터베이스의 구조
-
크게 2단계로 구성됨.
- 가장 밑단에는 테이블들이 존재 (ex : 테이블은 엑셀의 시트에 해당)
- 테이블들은 데이터베이스라는 폴더 밑으로 구성 (ex : 엑셀에서는 파일)
-
테이블의 구조 (테이블 스키마 라고도 함)
- 테이블은 레코드들로 구성
- 레코드는 하나 이상의 컬럼으로 구성
- 컬럼은 이름과 타입과 속성(primary key)로 구성됨.
2. SQL 이란?
- SQL : Structured Query Language
관계형 데이터베이스에 있는 데이터(테이블)를 질의하거나 조작해주는 언어
- SQL은 1970년대 초반에 IBM이 개발한 구조화된 데이터 질의 언어
- 두 종류의 언어로 구성됨
- DDL : 테이블 구조를 정의하는 언어
- DML :
- 테이블에서 원하는 레코드를 읽어오는 질의 언어
- 테이블에 레코드를 추가/삭제/갱신해주는데 사용하는 언어
SQL은 빅데이터 세상에서도 중요
- 구조화된 데이터를 다루는한 SQL은 데이터 규모와 상관없이 사용됨.
- 모든 대용량 데이터 웨어하우스는 SQL 기반
- Redshift, Snowflake, BigQuery, Hive
- Spark이나 Hadoop도 예외는 아님
- SparkSQL과 Hive도 SQL 언어가 지원됨
- 데이터 분야에서 일하고자 하면 반드시 익혀야할 기본 기술
SQL 단점
- 구조화된 데이터를 다루는데 최적화가 되어있음
- 비구조화된 데이터를 다루는 것은 가능하나 제약이 심함
- 많은 관계형 DB들이 플랫한 구조만 지원함(no nested like JSON)
- 구글 빅쿼리는 nested structure를 지원함.
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
- 즉 SQL만으로는 비구조화 데이터를 처리하지 못함
- 관계형 DB마다 SQL 문법이 조금씩 상이
Star Schema
- 프로덕션 DB용 관계형 DB는 보통 스타 스키마를 사용해 데이터 저장
- 데이터를 논리적 단위로 나눠 저장하고 필요시 조인
--> 스토리지 낭비가 덜하고 업데이트가 쉬움
- 단점 : 다수의 테이블들을 join할 때 시간이 오래 걸림.
Denormalized Schema
- 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음므로 별도의 조인이 필요 없는 형태를 말함
- 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산 가능