1. Redshift 권한과 보안
2. Redshift 백업과 테이블 복구
3. Redshift 관련 기타 서비스
4. Redshift Spectrum 사용
5. Redshift ML 사용
6. Redshift 중지/제거
일반적으로 사용자별 테이블별 권한 설정은 하지 않음
역할(Role) 혹은 그룹(Group) 별로 스키마별 접근 권한을 주는 것이 일반적
RBAC(Role Based Access Control)가 새로운 트렌드
-> 그룹보다 편리
여러 역할에 속한 사용자의 경우는 각 역할의 권한을 모두 갖게 됩니다. (Inclusive)
개인정보와 관련한 테이블들이라면 별도 스키마를 설정

# ON ALL TABLES IN SCHEMA 명령어를 사용하기 위해선
# ON SCHEMA를 통해 사전에 스키마에 대한 액세스를 허가해줘야함
# 사용자 그룹 analytics_authors에게
# analytics 스키마에 접근 권한을 부여
GRANT ALL ON SCHEMA analytics TO GROUP analytics_authors;
# analytics 스키마 안의 모든 테이블에 대한 모든 권한을 부여
GRANT ALL ON ALL TABLES 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;
# SELECT ON ALL TABLES IN SCHEMA을 통해 SELECT(읽기) 권한을 주기 위해선
# USAGE ON SCHEMA를 통해 사전을 USAGE 권한을 주어야함
# raw_data 스키마에 대한 읽기 권한을 위한 접근을 허용
GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_authors;
# raw_data 스키마 안의 모든 테이블에 대한 읽기 권한만 부여
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_authors;
테이블 내의 특정 컬럼들을 특정 사용자나 특정 그룹/역할에만 접근 가능하게 하는 것
보통 개인정보 등에 해당하는 컬럼을 권한이 없는 사용자들에게 감추는 목적으로 사용
이 경우 컬럼이 실수로 노출될 가능성이 농후합니다.
더 좋은 방법은 아예 그런 컬럼을 별도의 테이블로 구성하는 것입니다.
가장 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것!
테이블 내의 특정 레코드들을 특정 사용자나 특정 그룹/역할에만 접근 가능하게 하는 것
특정 사용자/그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가 조건을 다는 형태로 동작
이를 RLS (Record Level Security) Policy라고 부름
CREATE RLS POLICY 명령어를 사용하여 Policy를 만들고 이를 ATTACH RLS POLICY 명령어를 사용하여 특정 테이블에 추가
일반적으로 더 좋은 방법은 아예 별도의 테이블로 관리하는 것!
-> 가장 좋은 방법은 아예 데이터 시스템으로 로딩하지 않는 것!!!!
( 고정 비용 )
기본적으로 백업 방식은 마지막 백업으로부터 바뀐 것들만 저장하는 방식
이를 Snapshot이라 부름
백업을 통해 과거로 돌아가 그 시점의 내용으로 특정 테이블을 복구하는 것이 가능 (Table Restore)
과거 시점의 내용으로 Redshift 클러스터를 새롭게 생성하는 것도 가능
자동 백업
기본은 하루이지만 최대 과거 35일까지의 변경을 백업 가능
이 경우 백업은 같은 지역에 있는 S3에 이뤄짐
다른 지역에 있는 S3에 하려면 Cross-regional snapshot copy를 설정해야합니다.
-> 이는 보통 재난 상황시 데이터 복구에 유용
매뉴얼 백업
( 가변 비용 )
고정 비용 Redshift에 비하면 제한적이고 조금 더 복잡
Snapshot 이전에 Recovery Points가 존재
Recovery Points는 과거 24시간에 대해서만 유지됨
Redshift Spectrum : S3 등에 있는 파일들을 테이블처럼 사용 가능하게 해줍니다.
Redshift Serverless : 가변 비용 모델
Athena : Apache Presto를 서비스화
Redshift ML
Redshift의 확장 기능
S3에 있는 파일들을 마치 테이블처럼 SQL로 처리 가능
S3 파일들을 외부 테이블들 (external table)로 처리하면서 Redshift 테이블과 조인 가능
외부 테이블 (S3)들은 보통 Fact 테이블들이 되고 Redshift 테이블들은 Dimension 테이블
1TB를 스캔할 때마다 $5 비용이 생김
이를 사용하려면 Redshift 클러스터가 필요
Redshift의 경우 용량을 미리 결정하고 월정액 (Fixed Cost) 지급
Redshift Serverless는 반대로 쓴만큼 비용을 지불하는 옵션
BigQuery와 같은 사용한 자원에 따른 비용 산정 방식
데이터 처리 크기와 특성에 따라 Auto Scaling 적용
AWS의 Presto 서비스로 사실상 Redshift Spectrum과 비슷한 기능을 제공
S3에 있는 데이터들을 기반으로 SQL 쿼리 기능 제공
AWS의 SageMaker에 의해 지원되는 기능
SQL만 사용하여 머신러닝 모델을 훈련하고 사용할 수 있게 해주는 Redshift 기능
모델이 만들어져 있다면 이를 사용하는 것도 가능
( BYOM : Bring Your Own Model )
S3에 굉장히 큰 데이터가 있는 경우, 이를 Redshift로 로딩하기가 버겁다면 (네트워크 비용이 높다면) 이를 외부 테이블로 설정해서 Redshift에서 조작이 가능합니다.
Fact 테이블 : 분석의 초점이 되는 양적 정보를 포함하는 중앙 테이블
일반적으로 굉장히 큰 테이블 (Fact > Dimension)
매출 수익, 판매량 또는 이익과 같은 사실 또는 측정 항목을 포함하여 비즈니스 결정에 사용
Fact 테이블은 일반적으로 외래 키를 통해 여러 Dimension 테이블과 연결
Dimension 테이블 : Fact 테이블에 대한 상세 정보를 제공하는 테이블
고객, 제품과 같은 테이블로 Fact 테이블에 대한 상세 정보 제공
Fact 테이블의 데이터에 맥락을 제공하여 사용자가 다양한 방식으로 데이터를 조각내고 분석을 가능하게 해줌
Dimension 테이블은 일반적으로 primary key를 가지며, Fact 테이블의 foreign key에서 참조
보통 Dimension 테이블의 크기는 훨씬 더 작음
Spectrum과의 관계 :
Fact table은 굉장히 클 수 있기에 데이터 웨어하우스로 전부 로딩하는게 비용, 시간적인 측면에서 비효율적일 수 있습니다. 그렇기에 S3에 저장해놓고 필요할 때마다 로딩해서 프로세싱 후 Redshift에 저장하는 것이 일반적입니다.
크기가 훨씬 작은 Dimension 테이블의 경우에는 아예 Redshift에 처음부터 올려두어 join하는 형태로 많이 사용합니다.
Fact 테이블
Dimension 테이블
Product 테이블 : Order 테이블에 사용된 상품에 대한 정보
User 테이블 : Order 테이블에서 상품 주문을 한 사용자에 대한 정보
S3에 대용량 Fact 테이블이 파일들로 존재
Redshift에 소규모 Dimension 테이블이 존재
Fact테이블을 Redshift에 적재하지 않고 위의 두 테이블을 조인하고 싶다면
이 때 사용할 수 있는 것이 Redshift Spectrum
-> 별도의 설정이 필요하지 않은 확장 기능이나 사용한 만큼 비용 부담
데이터 베이스 엔진이 외부에 저장된 데이터를 마치 내부 테이블처럼 사용하는 방법
외부 : 보통 S3와 같은 클라우드 스토리지
External Table은 외부에 저장된 대량의 데이터를 데이터베이스 내부로 복사하고 쓰는 것이 아니라 임시 목적으로 사용하는 방식 ( 참조 )
SQL 명령어로 데이터베이스에 외부 테이블 생성 가능
이 경우 데이터를 새로 만들거나 하는 것이 아니라 참조만 하게 됨
외부 테이블은 CSV, JSON, XML과 같은 파일 형식 뿐만 아니라 ODBC 또는 JDBC 드라이버를 통해 액세스하는 원격 데이터베이스와 같은 다양한 데이터 소스에 대해서도 사용가능
외부 테이블을 사용하여 데이터 처리 후 결과를 데이터베이스에 적재하는데 사용가능
외부 테이블은 보안 및 성능 문제에 대한 신중한 고려가 필요
이는 Hive 등에서 처음 시작한 개념으로 현재 대부분의 빅데이터 시스템에서 사용됨
S3에 있는 파일들을 마치 테이블처럼 SQL로 처리 가능
Redshift 클러스터가 필요
S3 Fact 테이블을 외부 테이블(External Table)로 정의해야함

e.g.)
# CREATE EXTERNAL SCHEMA 명령어 사용
CREATE EXTERNAL SCHEMA external_schema
from data catalog # Glue Data Catalog
database 'myspectrum_db' # 외부 DB
iam_role 'arn:aws:iam::521227329883:role/redshift.read.s3'
create external database if not exists; # 외부 DB가 없으면 외부 DB를 생성
AWS Glue는 AWS의 Serverless ETL 서비스
-> Airflow와 유사, 거의 AWS 내에서만 기능을 사용 가능
Data Catalog :
AWS Glue Data Catalog는 데이터 소스 및 대상의 메타 데이터를 대상으로 검색 기능을 제공합니다.
이는 주로 S3나 다른 AWS 서비스 상의 데이터 소스를 대상으로 합니다.
(Redshift Spectrum의 경우에는 외부 테이블들)
AWS Glue Studio : ETL 작업 생성
a. 간단한 드래그 앤 드롭 인터페이스를 통해 ETL 작업 생성을 가능하게 합니다.
b. 사용자는 데이터 소스 및 대상을 선택하고 데이터 변환 단계를 정의하는 스크립트를 생성할 수 있습니다.
작업 모니터링 및 로그
서버리스 실행
가정 : 전에 생성했던 S3 버킷에 usc라는 폴더를 만들고,
폴더에 user_session_channel.csv 파일을 복사했다고 가정
# CREATE EXTERNAL TABLE 명령어로 외부 테이블 정의
CREATE EXTERNAL TABLE external_schema.user_session_channel (
userid integer ,
sessionid varchar(32),
channel varchar(32)
)
row format delimited # 한 줄이 한 record에 해당
fields terminated by ',' # csv파일을 ,를 기준으로 delimite한다는 것을 의미
stored as textfile # 이 파일이 text형식으로 저장 되어 있음
location 's3://S3버킷이름/usc/'; # 파일의 위치로 전에 생성했던 버킷 내의 usc 폴더를 지정
# location으로 지정한 경로의 모든 파일을 테이블로 지정
# 이때, 하나의 format이라도 다르면 에러 발생
SELECT gender, COUNT(1)
FROM external_schema.user_session_channel usc # 외부 Fact
JOIN raw_data.user_property up ON usc.userid = up.userid # 내부 Dimension
GROUP BY 1;
배움이 가능한 기계(혹은 알고리즘)의 개발
데이터의 패턴을 보고 흉내내는 방식으로 학습 (imitation)
학습에 사용되는 이 데이터를 Training set이라고 부름
머신 러닝의 최종 산물이 머신 러닝 모델
학습된 패턴(트레이닝 셋)에 따라 예측을 해주는 블랙박스
블랙 박스인 이유 : 과정을 알 수 없기 때문
선택한 머신러닝 학습 알고리즘에 따라 내부가 달라짐
디버깅은 쉽지 않으며 왜 동작하는지 이유를 설명하기도 쉽지 않음
트레이닝셋의 품질이 머신러닝 모델의 품질을 결정
머신 러닝의 예측 방식
지도 머신러닝 (Supervised Machine Learning)
비지도 학습 (Unsupervised Machine Learning)
강화 학습 (Reinforcement Learning)
머신러닝 모델 트레이닝 혹은 빌딩이란?
머신러닝 모델 개발을 처음부터 끝까지 해결해주는 AWS 서비스
크게 4가지 기능 제공
다양한 머신러닝 Framework를 지원
SageMaker Studio라는 웹 기반 환경 제공 (Notebook)
다양한 개발 방식 지원
-> 다른 클라우드 업체도 비슷한 Framework를 제공
AutoPilot: SageMaker에서 제공되는 AutoML 기능
AutoPilot은 훈련용 데이터 셋을 입력하면 다음을 자동으로 수행
데이터 분석(EDA)를 수행하고 이를 Python Notebook으로 만들어줌
다수의 머신러닝 알고리즘과 하이퍼 파라미터의 조합에 대해 아래 작업을 수행
머신러닝 모델을 만들고(modeling) 훈련하고(training) 테스트하고(test) 테스트 결과를 기록
선택 옵션에 따라 모텔 테스트까지 다 수행하기도 하지만 코드를 만드는 단계(Python Notebook)에서 마무리도 가능
즉, AUtoPiloㅅ 기능을 통해 모델 개발 속도를 단축하는 것이 가능합니다.
최종적으로 사용자가 모델을 선택 후 API로 만드는 것도 가능
캐글 Orange Telecom Customer Churn 데이터셋 사용 (csv)
train.csv의 구성 ( Test: 20%, Train : 80% )
데이터 준비: csv 파일을 S3 버킷 아래 폴더로 업로드
s3://버킷이름/redshift_ml/train.csv
위의 데이터를 raw_data.orange_telecom_customers로 로딩 (COPY)
# Redshift에 table 생성 CREATE TABLE raw_data.orange_telecom_customers ( state varchar, account_length integer, area_code integer, international_plan varchar, … customer_service_calls integer, churn varchar, purpose varchar ); # 만든 Table에 COPY로 csv 파일의 내용을 복사 COPY raw_data.orange_telecom_customers FROM 's3://버킷이름/redshift_ml/train.csv' credentials 'aws_iam_role=arn:aws:iam::521227329883:role/redshift.read.s3' delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes;
SageMaker 사용권한을 Redshift cluster에 지정
( AmazonSageMakerFullAccess )
CREATE MODEL 명령을 사용
a. 모델을 생성하고 모델 사용시 호출할 SQL 함수도 생성
b. 이때, SageMaker와 관련한 비용이 발생하므로 유의# Train을 대상으로 모델 생성 CREATE MODEL orange_telecom_customers_model FROM ( SELECT state, account_length, …, customer_service_calls, churn FROM raw_data.orange_telecom_customers WHERE purpose = 'Train' ) TARGET churn # 모델을 만들 때 예측해야하는 컬럼으로 churn을 지정 FUNCTION ml_fn_orange_telecom_customers # 나중에 호출할 수 있도록 SQL 함수로 이름을 이렇게 지정 IAM_ROLE 'arn:aws:iam::521227329883:role/Redshift-ML' SETTINGS ( S3_BUCKET '버킷 이름' ); # 모델이 잘 준비되었는지 확인 SHOW MODEL orange_telecom_customers_model;
Model SQL 함수를 사용해서 테이블의 Test 레코드들을 대상으로 예측 수행
# 예측 대상 : churn SELECT churn, ml_fn_orange_telecom_customers( state, account_length, area_code, international_plan, voice_mail_plan, number_vmail_messages, total_day_minutes, total_day_calls, total_day_charge, total_eve_minutes, total_eve_calls, total_eve_charge, total_night_minutes, total_night_calls, total_night_charge, total_intl_minutes, total_intl_calls, total_intl_charge, customer_service_calls ) AS "prediction" # 함수의 결과는 prediction FROM raw_data.orange_telecom_customers WHERE purpose = 'Test';
사용이 다 끝난 후 SageMaker와 관련한 리소스 제거
- Drop Model 실행
- SageMaker 서비스 웹 콘솔리 이동 후에 혹시라도 남은 잔재가 있는지 확인해야합니다.
중지는 Redshift가 고정 비용 옵션인 경우에만 해당되는 옵션입니다. 가변 비용 옵션(Severless)인 경우에는 중지 기능이 없습니다.
Maintenance window가 Redshift 쪽에서 사용중이던 클러스터를 강제로 Restart를 시키는 경우가 있습니다.
이로 인해 가끔 에러가 발생하기에, Maintenance window가 동작하는 시간대를 콘솔에서 확인했다가 정말 중요한 작업은 그 시간대를 피해야합니다.
( Serverless에는 Maintenance window가 없습니다. )
VACUUM을 주기적으로 사용해준다면 DB 테이블의 삭제, 업데이트를 빈번하게 사용했을 경우 발생하는 문제를 방지할 수 있습니다.
Redshift가 당분간 필요 없는 경우
Pause를 선택,
이 경우 스토리지 비용만 부담, SQL은 실행 불가능
Redshift가 다시 필요해진 경우
Resume을 선택Redshift가 영원히 필요없는 경우
Delete을 선택