데이터 분석가 Damla's blog

[Step 2] Data Warehouse 만들기 본문

파이썬(Python)/Data Engineering

[Step 2] Data Warehouse 만들기

DA Damla 2025. 5. 7. 08:15

부제: "실무감각으로 익혀보는 Data warehouse 만들어보기 - Redshift 생성하고, S3에서 데이터 옮기기"

 

목차

  1. 프로젝트 목표
  2. Redshift 개요 및 사용 이유
  3. Redshift Serverless 생성하기
  4. S3 버킷 생성 및 CSV 파일 업로드
  5. Redshift Query Editor로 COPY 실행
  6. 내가 겪은 오류와 해결 과정
  7. 마무리하며

1. 프로젝트 목표

RDS에서 데이터를 다뤄본 다음 단계로, 이제는 데이터 웨어하우스(DW)를 만들었다. 목표는 S3에 저장한 데이터를 Redshift로 옮겨서, 분석/시각화를 위한 기본 데이터 저장소를 만드는 것이다.

2. Redshift 개요 및 사용 이유

Redshift는 AWS에서 제공하는 컬럼 기반의 데이터 웨어하우스 서비스다.
대용량 데이터를 분석하기에 최적화되어 있고, BI툴 연동도 수월하다.

Redshift는 RDS와는 달리, PostgreSQL 기반이다.
하지만 Mysql과 Postgre는 크게 문법이 다르지 않아서 SQL 문법이 익숙하다면 쉽게 접근할 수 있다.

실습에서 Redshift를 선택한 이유

  • Postgre와 유사한 문법
  • 데이터 마트 설계 시 적합
  • Serverless 옵션을 사용하면 초기 비용 없이 실습 가능

3. Redshift Serverless 생성하기

이번에는 Redshift Serverless를 사용했다.
기존 Redshift는 클러스터 단위로 요금이 청구되지만, Serverless는 사용량 기준이라 실습에 유리하다.

생성 절차

  1. AWS 콘솔 → Redshift → Serverless → “Create workgroup”
  2. 워크그룹 이름, DB 이름, 사용자명(admin) 지정
  3. VPC, 퍼블릭 액세스 여부 설정
    • 퍼블릭 액세스는 No로 두고, Query Editor로만 접근했다
  4. Storage, IAM Role은 기본값으로 설정
  5. 생성 후 수 분 내 워크그룹이 준비됨

주의사항

  • Serverless는 프리티어가 아닌 경우 $300 크레딧까지 무료
  • 퍼블릭 액세스가 안 되므로 Python으로 직접 접속은 어렵고,
    대신 Query Editor V2를 활용함

4. S3 버킷 생성 및 CSV 업로드

Redshift에 데이터를 직접 넣을 순 없고, 중간 단계로 S3를 사용해야 한다.

S3 설정 절차

  1. AWS 콘솔 → S3 → “Create bucket”
  2. 이름 설정 (예: my-data-practice)
  3. 퍼블릭 접근 차단 유지 (기본값)
  4. 버킷 생성 후 CSV 파일 업로드
    • 예: users.csv, orders.csv 등

5. Redshift Query Editor로 COPY 실행

이제 S3에 있는 데이터를 Redshift로 적재한다.
Query Editor V2를 사용해서 SQL 문으로 직접 처리했다.

준비 사항

  • Redshift 워크그룹과 연결된 IAM Role이 S3에 접근할 수 있어야 함
  • CSV 파일은 쉼표 구분, 헤더 포함 기준

COPY 문 예제

CREATE TABLE users (
    id INT,
    name VARCHAR(50),
    email VARCHAR(100)
);

COPY users
FROM 's3://my-data-practice/users.csv'
IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftRole'
FORMAT AS CSV
IGNOREHEADER 1;
  • RDS에서 DB생성시 사용헀던 코드와 똑같으나, 다만 foreign key는 따로 설정하지 않는다 
    • 이미 RDS의 DB에서 테이블을 생성할때 foreign key를 설정해서 충분히 정합성 검사를 하며 데이터가 생성되었기 때문

 

6. 내가 겪은 오류와 해결 과정

❌ 오류 1: COPY 실행 시 권한 오류

AmazonS3: Access Denied
  • 원인: Redshift에 연결된 IAM Role이 S3 버킷에 접근할 권한이 없었음
  • 해결: IAM → Role → AmazonS3ReadOnlyAccess 정책 수동 추가

❌ 오류 2: COPY 명령어 실행 안 됨

  • 원인: Query Editor에서 연결된 데이터베이스가 기본값이 아니었음
  • 해결: Editor 상단에서 올바른 DB 선택 후 다시 실행

❌ 오류 3: 테이블이 이미 존재

relation "users" already exists
  • 해결: 테이블을 DROP하고 다시 생성하거나, IF NOT EXISTS 추가

 

번외. IAM Role 설정이 어려웠던 경험

처음 S3 → Redshift로 데이터를 COPY할 때 가장 어려웠던 부분은 IAM 권한 설정이었다.

Redshift Serverless는 기본적으로 IAM Role을 하나 생성해주지만, 이 Role이 S3 버킷 접근 권한을 명시적으로 가지고 있어야 COPY가 작동한다. 

 

처음에는 자동으로 되는 줄 알고 그냥 COPY 쿼리를 실행했는데 계속 Access Denied가 나왔다.

계속 같은 에러만 나와서 IAM 메뉴를 여러 번 드나들며 설정을 바꿔야 했다.

해결을 위해 했던 것들

  • Redshift 콘솔에서 해당 Workgroup → Permissions → 사용 중인 IAM Role 확인
  • IAM 콘솔 → Role 목록 → 해당 Role 선택 → 정책 추가
    • AmazonS3ReadOnlyAccess 정책을 수동으로 붙여줘야 했음

7. 마무리하며

이번 단계에서는 AWS Redshift를 활용해 S3 데이터를 데이터 웨어하우스로 옮기는 전체 과정을 연습했다. 데이터를 직접 업로드하지 않고 S3를 중간 경로로 활용한 점, 그리고 IAM Role을 설정해야만 COPY가 작동한다는 걸 몸으로 체득할 수 있었다.

프리티어로만 사용하려고 했는데, Serverless라 퍼블릭 접근이 막혀 있어 Query Editor로만 조작했다는 점도 실무와는 다른 부분이었다. 하지만 전체적인 데이터 흐름(RDS → S3 → Redshift)을 구성해보면서 데이터 파이프라인의 기초 구조를 체감할 수 있는 유익한 경험이었다.

 

다음 글에서는 Redshift에 쌓인 데이터를 분석 목적에 맞게 재구성해서 Data Mart로 만드는 과정을 정리해보려 한다.