데이터 관련 직군
- 데이터 엔지니어
- 파이썬, 자바/스칼라
- SQL, database
- ETL/ELT (Airflow, DBT)
- Spark, Hadoop
- 데이터 분석가
- SQL, 비즈니스 도메인에 대한 지식
- 통계 (AB 테스트 분석)
- 데이터 과학자
- 머신러닝
- SQL, 파이썬
- 통계
데이터 관련 직군에서 SQL 사용되는 방향
- 큰 데이터를 프로세싱해서 작은 데이터로 변환
- 주어진 문제를 답하기 위해서 데이터 분석을 하기 위한 관점
- 다양한 종류의 데이터 분석을 하기 위한 목적
→ SQL은 필수다 !
데이터가 아무리 커져도 데이터가 구조화만 되어 있다면 SQL은 검증된 기술이기 때문에 가장 쓰이기 좋다.
빅데이터 세상에서도 구조화된 데이터에 대해 SQL만큼 사용하기 쉬운 언어가 없다.
즉, 데이터 일을 하는 사람이면 SQL은 반드시 알아야 하는 기본 기술이다.
관계형 데이터베이스
- 구조화된 데이터를 저장하고 질의를 할 수 있도록 해주는 스토리지
- 액셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장
- 테이블에는 컬럼(열)과 레코드(행)가 존재
- 관계형 데이터베이스를 조작하는 프로그래밍 언어가 SQL
- 테이블 정의를 위한 DDL (Data Definition Language)
- 테이블 데이터 조작/질의를 위한 DML (Data Manipulation Language)
대표적 관계형 데이터베이스
- 프로덕션 데이터베이스: MySQL, PostgreSQL, Oracle, ...
- OLTP (Online Transaction Processing)
- 빠른 속도에 집중, 서비스에 필요한 정보 저장
- 보통 웹 서비스나 모바일 앱과 바로 연동이 돼서 해당 서비스에 저장하고 필요한 정보를 읽어오는데 쓰임
- 백엔드나 프로엔드 개발자가 사용
- 데이터 웨어하우스: Redshift, Snowflake, BigQuery, Hive, ...
- OLAP (Online Analytical Processing)
- 처리 데이터 크기에 집중, 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
- 데이터팀에 속한 사람들이 사용
- 보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장
Q. 데이터팀에서 사용하는 데이터 웨어하우스는 뭔가요?
A. 그런거 없다.
라고 하면 ㅌㅌ.. 하자.. 개발할 수 있는 환경이 갖춰져 있지 않은 것..
관계형 데이터베이스의 구조
- 2단계로 구성
- 가장 밑단에는 테이블들이 존재 (테이블은 엑셀의 시트에 해당)
- 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성 (엑셀에서는 파일)
- 테이블 구조 (테이블 스키마)
- 테이블은 레코드들로 구성 (행)
- 레코드는 하나 이상의 필드(컬럼)로 구성 (열)
- 필드(컬럼)는 이름과 타입과 속성(primary key)으로 구성
SQL은 빅데이터 세상에서도 중요!
- 구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰임
- 모든 대용량 데이터 웨어하우스는 SQL 기반
- Redshift, Snowflake, BigQuery, Hive
- Spark이나 Hadoop도 예외는 아님
- SparkSQL과 Hive라는 SQL 언어가 지원됨
- 데이터 분야에서 일하고자 하면 반드시 익혀야 할 기본 기술
- 데이터 엔지니어, 데이터 분석가, 데이터 과학자 모두 알아야 함
SQL의 단점
- 구조화된 데이터를 다루는 데 최적화 되어 있음
- 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심함
- 많은 관계형 데이터 베이스들이 플랫한 구조만 지원함 (no nested like JSON)
- 구글 빅쿼리는 nested structure를 지원함
- 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해짐
- 즉, SQL만으로는 비구조화된 데이터를 처리하지 못 함
- 관계형 데이터베이스맏나 SQL문법이 조금씩 상이
프로덕션 데이터베이스와 데이터 웨어하우스의 차이
어떤 형태로 데이터를 모델링(데이터 표현하고 저장하는 방식) 할 것이냐
- Star schema
- production DB용 관계형 데이터베이스에서는 보통 스타 스키마를 사용해 데이터를 저장
- 데이터를 논리적 단위로 나눠 저장하고 필요시 조인
- 스토리지의 낭비가 덜하고 업데이트가 쉬움
- Denormalized schema
- 데이터 웨어하우스에서 사용하는 방식
- 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요 없는 형태를 말함
- 이는 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능
데이터 웨어하우스
- 회사에 필요한 모든 데이터를 저장
- 여전히 SQL 기반의 관계형 데이터베이스
- 프로덕션 데이터베이스(고객 정보, 매출 정보 등등) 와는 별도이어야 함
- 프로덕션 데이터베이스에 있는 데이터를 웨어하우스로 복사해서 가져옴
- AWS의 Redshift, Google Cloud의 Big Query, Snowflake 등이 대표적
- 고정비용 vs 가변비용 옵션 ← 가변비용이 더 좋음
- 데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스
- 처리속도가 아닌 처리 데이터의 크기가 더 중요해짐
- ETL (혹은 데이터 파이프라인)
- 외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 코드들이 필요해지는데 이를 ETL 혹은 데이터 파이프라인이라고 부름
- 데이터 파이프라인이라고도 부름, 통틀어 데이터 인프라라고 함
- 데이터 엔지니어들이 구현하고 관리를 해줘야 함
클라우드란?
컴퓨팅 자원(하드웨어, 소프트웨어 등)을 네트워크를 통해 서비스 형태로 사용하는 것
- No Provisioning 시간단축 최고!
- Pay As You Go
- 자원(ex. 서버)을 필요한 만큼 실시간으로 할당하여 사용한 만큼 지불
- 탄력적으로 필요한 만큼의 자원을 유지하는 것이 중요 (비싸다 ㅜ)
클라우드 컴퓨팅이 없었다면?
- 서버, 네트워크, 스토리지 구매와 설정등을 직접 수행해야 함
- 데이터센터 공간을 직접 확보 (Co-location)
- 확장이 필요한 경우 공간을 먼저 더 확보해야 함
- 그 공간에 서버를 구매하여 설치하고 네트워크 설정
- 보통 서버를 구매해서 설치하는데 적어도 두세달은 걸림
- 또한 Peak time(ex. 블프데이)을 기준으로 Capacity planning을 해야 함
- 놀고 있는 자원들이 많아지는 현상 발생
- 직접 운영비용 vs 클라우드 비용에 대한 기회비용
클라우드 컴퓨팅의 장점
- 초기 투자 비용이 크게 줄어듦
- CAPEX(Capital Expenditure) vs OPEX (Operating Expense)
- 리소스 준비를 위한 대기시간 대폭 감소
- Shorter Time to Market
- 노는 리소스 제거로 비용 감소
- 글로벌 확장 용이
- 소프트웨어 개발 시간 단축
- Managed Service (Saas) 이용
AWS 소개
놀고 있는 서버들을 시간당으로 과금하여 다른 개발자들에게 대여해주면 어떨까?
- 가장 큰 클라우드 컴퓨팅 서비스 업체
- 2002년 아마존의 상품데이터를 API로 제공하면서 시작
- 현재 100여개의 서비스를 전세계 15개의 지역에서 제공
- 대부분의 서비스들이 오픈소스 프로젝트들을 기반으로 함
- 최근 들어 ML/AI 관련 서비스들도 내놓기 시작
- 사용 고객
- Netflix, Zynga등의 상장업체들도 사용
- 많은 국내 업체들도 사용시작 (서울 리전)
- 다양한 종류의 소프트웨어/플랫폼 서비스를 제공
- AWS의 서비스만으로 쉽게 온라인 서비스 생성
Redshift 란?
Scalable SQL 엔진
- 2PB까지 지원 (그러나 65TB부터 문제 있음..)
- still OLAP
- 응답 속도가 빠르지 않기 때문에 프로덕션 데이터베이스로 사용 불가
- Columnar storage
- 컬럼별 압축이 가능
- 컬럼을 추가하거나 삭제하는 것이 아주 빠름
- 벌크 업데이트 지원
- 레코드가 들어있는 파일을 S3로 복사 후 COPY 커멘드로 Redshift로 일괄 복사
- 백만개의 레코드도 몇십초 안에 복사 가능
- 고정 용량/비용 SQL 엔진
- 비용관리에 있어서 예상 가능
- 예상 보다 더 많이 사용할 경우 느려질 수 있음
- 다른 데이터 웨어하우스처럼 primary key uniqueness를 보장하지 않음
- 프로덕션 데이터베이스들은 보장함
- 지정된 필드에 값이 유일하게 존재해야 한다는 게 체크되어야 함
- 매번 추가될 때 마다 체크하면 속도간 느려지기 때문에 보장하지 않음
- 개발자가 보장해줘야 함
- Postgresql 8.x와 SQL이 호환됨
- 그러나 모든 기능을 지원하지는 않음
- Postgresql 8.x를 지원하는 툴이나 라이브러리로 액세스 가능
- SQL이 메인 언어라는 점!! ← 테이블 디자인이 굉장히 중요
반응형