[4/22] TIL - SQL을 이용한 데이터 분석[1]

Sangwon Jwa·2024년 4월 22일

데브코스 TIL

목록 보기
17/54
post-thumbnail

📖 학습 주제


  1. SQL과 관계형 데이터 베이스
  2. 데이터 웨어하우스란?
  3. Cloud와 AWS
  4. Redshift

✏️ 주요 메모 사항 소개


SQL

데이터 직군에서 SQL큰 데이터를 프로세싱해서 작은 데이터로 변환하거나, 주어진 문제를 답하기 위해, 즉 데이터 분석을 하기위해 사용된다. 그리고 구조화된 데이터를 다루는데 있어서 SQL만큼 검증되고 사용하기 쉬운 언어가 없다. 따라서 데이터 분야에서 종사하는 모든 개발자들에게 SQL은 반드시 알아야하는 기본 기술이다.

빅데이터 세상이 되면서 SQL의 입지가 줄어드는 것 아닌가 하는 우려도 있었지만, 구조화된 데이터를 다루는한 SQL은 데이터 규모와 상관없이 쓰이고 있다. 모든 대용량 데이터 웨어하우스는 SQL 기반으로 작동하고 Spark나 Hadoop과 같은 빅데이터 전문 기술도 예외는 아니다.

SQL도 단점은 있다. 구조화된 데이터를 다루는데 최적화가 되어있다 보니 비구조화된 데이터를 다루는 것에 제약이 심하다. 또한 많은 관계형 DB들이 플랫한 구조만 지원하고 있다. (no nested like JSON) 따라서 비구조화된 데이터를 다루는데 Spark, Hadoop과 같은 분산 컴퓨팅 환경이 필요해 졌다. 추가로 관계형 DB 마다 SQL 문법이 조금씩 다른 것도 단점 중 하나이다.


관계형 데이터베이스(Relational DataBase)

구조화된 데이터를 저장하고 질의할 수 있도록 해주는 스토리지를 말한다. 엑셀 스프레드시트 형태의 테이블로 데이터를 정의하고 저장한다.
테이블에는 Column(열)Record(행)이 존재한다. 이 관계형 데이터베이스를 조작하는 프로그래밍 언어가 바로 SQL이다.
SQL은 테이블 정의를 위한 DDL(Data Definition Language)와 테이블 데이터 조작/질의를 위한 DML(Data Manipulation Language)로 나뉜다.

RDB의 구조

관계형 데이터베이스는 데이터베이스(스키마)라는 여러 개의 폴더로 구성되어 있고 각각의 데이터베이스(스키마)의 밑에 테이블들이 존재한다.

테이블레코드(행)로 구성되어 있다. 각각의 레코드는 하나 이상의 필드(컬럼,열)로 구성되어 있다. 필드(컬럼)는 이름과 타입과 속성으로 구성된다.


RDB의 종류

  1. 프로덕션 데이터베이스 : MySQL, PostgreSQL, Oracle ...
  • OLTP (OnLine Transaction Processing)
  • 빠른 속도에 집중. 서비스에 필요한 정보를 저장
  • 데이터 모델링으로 Star schema 형식을 사용, 데이터를 논리적 단위로 나눠 지정하고 필요시 조인한다. 스토리지의 낭비가 덜하고 업데이트가 쉽다는 장점이 있다.
  • 빈번하게 조인(JOIN)을 해서 정보를 찾아야 하는 단점이 있다.

 

  1. 데이터 웨어하우스 : Redshift, Snowflake, BigQuery, Hive, ...
  • OLAP (OnLine Analytical Processing)
  • 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장 (보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장)
  • 데이터 모델링으로 Denormalized schema 형식을 사용. 단위 테이블로 나눠 저장하지 않음으로 별도의 조인이 필요 없는 형태를 말한다.
  • 스토리지를 더 사용하지만 조인이 필요 없기에 빠른 계산이 가능하다.


데이터 웨어하우스 (OLAP)

프로덕션 데이터베이스와 별도로 구성한 SQL 기반의 관계형 데이터베이스로, 회사에 필요한 모든 데이터를 저장한다. 보통 AWS의 Redshift, Google Cloud의 Big Query, Snowflake를 대표적으로 사용한다.
데이터 웨어하우스는 고객이 아닌 내부 직원을 위한 데이터베이스이다. 따라서 처리 속도가 아닌 처리 데이터의 크기가 더 중요하다.
외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장해주는 과정이 필요해지는데 이를 ETL 혹은 데이터 파이프라인이라고 말한다.


Cloud & AWS

클라우드란 컴퓨팅 자원(하드웨어, 소프트웨어)을 네트워크를 통해 서비스 형태로 사용하는 것을 말한다. 자원을 필요한만큼 실시간으로 할당하여 사용한만큼 지불하는 특징을 가진다. 탄력적으로 필요한만큼의 자원을 유지하는 것이 중요하다.

클라우드 컴퓨팅을 사용하지 않는다면 다음과 같은 문제가 생길 수 있다.

  1. 서버/네트워크/스토리지 구매와 설정등을 직접 수행해야함.
  2. 데이터 센터 공간을 직접 확보
  3. 그 공간에 서버를 구매하여 설치하고 네트워크 설정
  4. 피크 타임을 기준으로 Capacity Planning이 필요
  5. 직접 운영비용 vs 클라우드 비용에서 기회비용이 발생

따라서 클라우드 컴퓨팅은 다음과 같은 장점을 갖는다.

  1. 초기 투자 비용이 크게 줄어듬
  2. 리소스 준비를 위한 대기시간 대폭 감소
  3. 노는 리소스 제거로 비용 감소
  4. 글로벌 확장에 용이
  5. 소프트웨어 개발 시간 단축

AWS

현재 가장 큰 클라우드 컴퓨팅 서비스 업체로 100여개의 서비스를 전세계 15개의 지역에서 제공하고 있다. 대부분의 서비스들이 오픈 소스 프로젝트들을 기반으로 하고 있고 최근들어 ML/AI 관련 서비스가 나오고 있다.
다양한 종류의 소프트웨어/플랫폼 서비스를 제공함으로 쉽게 온라인 서비스를 생성할 수 있게 되었다.

[대표적인 서비스]

  1. EC2(Elastic Compute Cloud) : AWS의 서버 호스팅 서비스. 다양한 종류의 서버 타입과 구매 옵션으로 자신의 서비스에 맞춰서 이용 가능.
  2. S3 (Simple Storage Service) : AWS의 대용량 스토리지 서비스. 디렉토리를 버킷(Bucket)으로 만들고 버킷별로 액세스 컨트롤 가능.

이 외에도 RDS(Relational Database Service, DynamoDB, Redshift, ElasticCache, ElasticSearch, MongoDB, Neptune 과 같은 여러가지 서비스들이 있다.

ML/AI 관련 서비스로는 다음과 같은 것들이 있다.

  1. sageMaker : 딥러닝, 머신러닝 프레임워크
  2. Lex : 챗봇 서비스를 만드는데 사용되는 서비스
  3. Polly : 텍스트를 음성으로 변환하는 서비스
  4. Rekognition : 이미지를 인식하는 데 사용할 수 있는 서비스
  5. Amazon Alexa : 아마존의 음성 봇 플랫폼.
  6. Amazon Connect : 콜센터 구현을 쉽게 만들 수 있음
  7. Lambda : 서버리스 컴퓨팅의 일종으로 서비스 구현을 위해 EC2를 론치할 필요가 없다.

Redshift

Redshift란 SQL 기반의 데이터베이스로 다음과 같은 특징을 가진다.

  1. Columnar storage : 데이터를 레코드별로 아닌 컬럼별로 저장한다. 이로인해 컬럼별 압축이 가능하고 컬럼의 추가와 삭제가 아주 빠르다.
  2. 벌크 업데이트 지원 : 레코드가 들어있는 파일을 S3로 복사 후 COPY 커맨드로 일괄 복사하기 때문에 데이터 추가 시간이 빠르다.
  3. 고정 용량/비용 : 비용적인 측면에서 얼마나 나갈 지 예상이 가능. 하지만 사용하지 않아도 비용이 발생하고, 자신이 구매한 용량보다 더 높은 처리가 요구될 시 성능이 떨어진다. 이 반대로 Snowflake, BigQuery와 같은 가변 용량/비용 서비스도 존재한다.
  4. 다른 데이터 웨어하우스처럼 primary key uniiqueness를 보장하지 않는다.
  5. Postgresql8.x 와 호환이 가능, Postgresql을 지원하는 툴이나 라이브러리로 액세스가 가능하다 (JDBC/ODBC)

Redshift Schema (폴더) 구성

💦 공부하며 어려웠던 내용


0개의 댓글