dev course - DE/TIL

[데브코스] TIL 33일차

nani-jin 2024. 5. 9. 15:50

1. Redshift - 권한과 보안

  • 권한
    • 일반적으로 사용자별 권한 설정이 아닌, 역할 혹은 그룹 별로 스키마별 접근 권한을 설정
      • 역할 - 계승 가능, 그룹 - 계승 불가
      • 최근 그룹보다 역할 별로 권한을 설정하는게 편리해 선호됨
      • 여러 역할에 속한 사용자는 각 역할의 권한을 모두 갖게됨(inclusive)
    • 개인정보와 관련된 테이블은 별도의 스키마로 저장하고, 극히 소수가 속한 역할에 접근 권한을 설정
    • 실습 예시는 그룹에 적용했지만, GROUP 대신 ROLE로 바꿔도 동작함
       
    • 예시 - 그룹 설정
  analytics_authors analytics_users pii_users adamin
raw_data tables read read X read, write
analytics tables read, write read X read, write
adhoc tables read, write read, write X read, write
pii tables X X read read, write

 

-- analytics_authors
GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_authors;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_authors;

GRANT ALL ON SCHEMA analytics TO GROUP analytics_authors;
GRANT ALL ON ALL TALBES IN SCHEMA analytics TO GROUP analytics_authors;

GRANT ALL ON SCHEMA adhoc to GROUP analytics_authors;
GRANT ALL ON ALL TABLES IN SCHEMA adhoc TO GROUP analytics_authors;

-- analytics_users
GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_users;

GRANT USAGE ON SCHEMA analytics TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO GROUP analytics_users;

GRANT ALL ON ALL TABLES IN SCHEMA adhoc TO GROUP analytics_users;
GRANT ALL ON SCHEMA adhoc to GROUP analytics_users;

-- pii_users
GRANT USAGE ON SCHEMA pii TO GROUP pii_users;
GRANT SELECT ON ALL TABLES IN SCHEMA pii TO GROUP pii_users;

 

  • 보안
    • 컬럼 레벨 보안 (Column Level Security)
      • 테이블 내의 특정 컬럼들을 특정 사용자 혹은 특정 그룹/역할에만 접근 가능하게 하는 것
      • 보통 개인정보 등에 해당되는 컬럼을 감추는 목적으로 사용됨
        • 좋은 방법은 그런 컬럼을 별도 테이블로 구성하는 것
        • 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것
    • 레코드 레벨 보안 (Low Level Security)
      • 테이블 내의 특정 레코드들을 특정 사용자 혹은 특정 그룹/역할에만 접근 가능하게 하는 것
      • 특정 사용자/그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가 조건을 달아 동작
        • RLS(Record Level Security) policy라고 부름
        • CREATE RLS POLICY 명령으로 policy를 만들고, 이를 ATTACH RLS POLICY 명령으로 특정 테이블에 추가함
      •  좋은 방법은 그런 레코드들을 별도 테이블로 구성하는 것
      • 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것

 

 

 

2. Redshift - 백업과 테이블 복구

  • 고정비용 옵션에서의 백업
    • snapshot
      • 기본적으로 마지막 백업으로부터 바뀐 것들만 저장하는 방식
      • 과거 시점의 특정 테이블 복구 가능(Table Restore)
      • 과거 시점의 내용으로 Redshift Cluster 새로 생성 가능
    • 자동 백업
      • 기본은 하루. 최대 35일 이전까지의 변경에 대해 백업 가능
      • 같은 지역에 있는 S3에 이뤄짐
      • 다른 지역에 있는 S3에 대해서는, Cross-regional snapshot copy 설정 - 보통 재난시 데이터 복구에 유용
    • 매뉴얼 백업
      • 언제든 원하는 시점에 만드는 백업으로, 명시적으로 삭제할 때까지 유지(혹은 생성시 보존 기한 설정)

 

 

  • 서버리스에서의 백업
    • 고정비용 옵션에 비하면 제한적이고 더 복잡함
    • snapshot 이전에 Recovery points가 존재
      • Recovery points를 snapshot으로 바꾼 다음, 여기서 테이블 복구 혹은 새로운 Redshift cluster 생성 가능
    • Recovery points는 과거 24시간에 대해서만 유지

*시연 참고 : 강의 Day 3-2

 

 

 

3. Redshift - 기타 서비스

  • Redshift Spectrum
    • S3 등에 있는 파일을 마치 Redshift에 있는 테이블처럼 SQL로 처리 가능
      • S3 파일들을 외부 테이블들로 처리하면서 Redshift 테이블과 조인 가능
      • S3 외부 테이블들은 보통 Fact 테이블이 되고, Redshift 테이블들은 Dimension 테이블이 됨
      • 1TB 스캔시 $5
    • 이를 사용하려면 Redshift cluster가 필요하며, S3가 같은 지역에 있어야함
  • Redshift Serverless
    • 쓴만큼 비용을 지불하는 가변비용 옵션
    • BigQuery와 같은 사용한 자원에 따른 비용 산정 방식
    • 데이터 처리 크기와 특성에 따라 auto scaling 적용
  • Redshift Athena
    • AWS의 presto 서비스로 사실상 Redshift Spectrum과 비슷한 기능 제공
    • S3에 있는 데이터들을 기반으로 SQL 쿼리 기능 제공 - 이 경우, S3를 레이크라 볼 수 있음
  • Redshift ML
    • SQL만 사용해 머신러닝 모델을 훈련하고 사용할 수 있게 해주는 기능
    • AWS SageMaker(Auto Pilot)에 의해 지원됨. 최적화된 모델을 자동 생성해주는 기능을 제공함
    • 이미 모델이 만들어져 있다면, 이를 사용하는 것도 가능 (BYOM. Bring Your Own Model)

 

 

 

4. Redshift - Spectrum 실습

  • S3에 굉장히 큰 데이터가 있어 이를 Redshift로 로딩하기 버거울 때, 외부 테이블*로 설정해 Redshift에서 조작할 수 있게 함. 별도로 설정하거나 런치하는게 아닌, Redshift의 확장 기능으로 사용하고 그만큼 비용을 부담함
    • S3에 대용량 Fact 테이블들이 파일로 존재
    • Redshift에 소규모 Dimension 테이블이 존재
    • Fact 테이블을 Redshift로 적재하지 않고 위 두 테이블을 조인하고 싶다면 → Redshift Spectrum이 최적

      외부 테이블
      1) 데이터베이스 엔진이 외부에 저장된 데이터를 마치 내부 테이블처럼 사용하는 방법. 대량의 데이터를 데이터 베이스 내부로 복사하고 쓰는게 아닌, 임시 목적으로 사용
      2) SQL 명령어로 데이터베이스에 생성 가능. 이 경우 데이터를 새로 만드는게 아닌 참조만 하는 것
      3) 외부 테이블을 사용해 데이터 처리 후, 그 결과를 데이터베이스에 적재하는데 사용 가능
      4) 외부 테이블은 보안 및 성능 문제에 대해 주의가 필요
      5) Hive 등에서 처음 시작한 개념으로 현재는 대부분의 빅데이터 시스템에서 사용됨
  • Fact table / Dimension table
    • Fact table 
      • 중요한 기록들이 있는 정보 테이블로, 분석의 초점이 되는 양적 정보를 포함하는 중앙 테이블
      • 매출 수익, 판매량, 이익과 같은 사실 또는 측정 항목을 포함한 비즈니스 결정에 사용
      • Foreign key를 사용해 여러 Dimension table과 연결됨
      • 보통 Dimension table보다 크기가 훨씬 더 큼
    • Dimension table
      • Fact table의 의미 있는 분석을 가능하게 하는, 상세 정보를 제공하는 테이블
      • 고객, 제품과 같은 테이블로 Fact 테이블에 대한 상세 정보 제공
      • 사용자가 다양한 방식으로 데이터를 쪼개고 분석하게 해줌
      • 일반적으로 Primary key를 가지며, Fact table의 Foreign key에서 참조
      • 보통 Fact table보다 크기가 훨씬 더 작음
    • Fact table vs. Dimension table 예시
      • Fact - user_session_channel, Dimension - user_session_channel 테이블에 사용된 사용자나 채널에 대한 정보
      • Fact - Order, Dimension - Product(Order 테이블에 사용된 상품 정보), User(Order 테이블에서 상품 주문을 한 사용자에 대한 정보)
  • 실습 - 외부 테이블용 스키마 생성하고, 외부 Fact table 정의하기
    • 앞서 만든 redshift.read.s3 ROLE에 AWSGlueConsoleFullAccess 권한을 지정하고
    • 아래 SQL을 실행해 외부 테이블용 스키마 생성
    • S3에 usc라는 폴더를 각자 S3 버킷 밑에 만들고
    • 그 폴더로 user_session_channel.csv 파일 복사한 뒤
    • 아래 SQL을 실행(이런 형태의 명령은 Hive/Presto/SparkSQL에서 사용됨)
-- 외부 테이블을 위한 스키마 생성
CREATE EXTERNAL SCHEMA external_schema
from data catelog
database 'myspectrum_db'
iam_role 'arn:aws:iam::489126981051:role/redshift.read.s3'
create external database if not exists;

-- 외부 Fact 테이블 정의
CREATE EXTERNAL TABLE external_schema.user_session_channel(
    userid integer,
    sessionid varchar(32),
    channel varchar(32)
)
row format delimited
fields terminated by ','
stored as textfile
location 's3://yejin-test-bucket/usc/';

 

 

  • AWS Glue
    • 서버리스 ETL 서비스로 아래와 같은 기능 제공
      • 데이터 카탈로그 - 데이터 소스 및 대상의 메타데이터를 대상으로 검색 기능 제공
      • ETL 작업 생성 - AWS Glue Studio
      • 작업 모니터링 및 로그
      • 서버리스 실행
    • 마치 Airflow와 같음. 하지만 AWS 외부에선 쓸 수 없음

 

 

 

5. Redshift - ML 사용하기

  • Machine Learning
    • 머신러닝의 최종 산물은 머신러닝 모델
      • training set(data)을 기반으로 스스로 학습해 패턴을 발견하고 예측하는 블랙박스
      • 선택한 머신러닝 학습 패턴에 따라 내부가 달라지며
      • 디버깅이 쉽지 않고, 동작 이유를 설명하기 쉽지 않음
      • training set 품질 = 머신러닝 모델의 품질 결정
    • 이는 정확히 얘기하자면 지도학습
      • 이 외에, 비지도 학습과 강화학습이 있음
    • 머신러닝 모델 트레이닝 혹은 빌딩이란?
      • 머신러닝 모델을 만드는 것을 지칭함
      • 입력은 training set

 

  • Amazon SageMaker
    • 머신러닝 모델 개발을 end-to-end로 해결해주는 AWS 서비스. MLops 프레임워크
    • 기능
      • training set 준비
      • 모델 훈련
      • 모델 검증
      • 모델 배포 및 관리
    • 다양한 머신러닝 프레임워크 지원
      • Tensorflow/Keras, PyTorch, MXNet, ...
      • 자체 SageMaker 모듈로 머신러닝 모델 훈련 가능
    • 사용 방법
      • SageMaker Studio라는 웹 기반 환경 제공
      • Python Notebook(SageMaker 모듈)을 통해 모델 훈련
      • Autopilot이라는 코딩 불필요 모델 훈련 기능 제공
    •  전체적인 절차
      1. 캐글에서 Orange Telecom Customer Churn data set을 csv 파일로 다운로드
      2. csv 파일을 S3 버킷 아래 폴더로 업로드
      3. raw_data.orange_telecom_customers로 로딩(COPY)
      4. SageMaker 사용 권한을 Redshift cluster에 지정
        • AmazonSageMakerFullAccess
      5. CREATE MODEL 명령 사용
        • 모델 생성 후, 모델 사용시 호출할 SQL 함수 생성
        • 이때 SageMaker 관련 비용이 발생함
      6. Model SQL 함수를 사용해 테이블 상의 레코드들을 대상으로 예측 수행
      7. 사용이 끝난 후 SageMaker와 관련한 리소스 제거

 

 

 

 

6. Redshift - 중지/종료

  • 고정비용 옵션 - Pause, Delete
  • 가변비용 옵션(서버리스) - Delete
  • Redshift 관련 유지보수
    • Redshift 서비스는 주기적으로 버전 업그레이드를 위해 중단됨
    • maintenance window라고 부르며, 서버리스에는 존재하지 않음
  • 테이블 청소와 최적화 - VACUUM 명령
    • 테이블 데이터 정렬
    • 디스크 공간 해제
    • 삭제된 행에서 공간 회수
    • 테이블 통계 업데이트
    • 큰 테이블에 대한 VACUUM 명령은 리소스를 많이 잡아먹음
  • 삭제
    • Workgroup 삭제
    • Namespace 삭제