0Pricing
Cloud & IT Cert Prep · 강의

S3에서 데이터 레이크 구축

수집, 처리 및 정제 영역으로 구성된 S3 기반 데이터 레이크를 설계하고, 버킷 정책을 적용하며, 쿼리 효율성을 위해 파티션별로 데이터를 구성합니다.

S3에서 데이터 레이크 구축은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

데이터 레이크란 무엇입니까

데이터 레이크는 어떤 규모로든 정형, 반정형, 비정형 데이터를 저장하는 중앙 집중식 저장소입니다. 데이터 웨어하우스와 달리 데이터 레이크는 분석에 필요할 때까지 데이터를 가공하지 않은 원래 형식으로 저장합니다. Amazon S3는 내구성, 확장성, 분석 서비스와의 통합을 제공하므로 AWS에서 데이터 레이크의 기반으로 가장 많이 사용됩니다.

데이터 레이크 영역 아키텍처

잘 설계된 S3 데이터 레이크는 세 가지 논리적 영역을 사용합니다. Landing Zone은 원시 데이터를 변경 없이 수집하는 영역이고, Processing Zone은 데이터를 정제하고 변환하는 영역이며, Curated Zone은 분석과 업무에 바로 사용할 수 있도록 준비된 영역입니다. 일반적으로 각 영역은 별도의 S3 접두사 또는 버킷으로 구성합니다. 이 패턴을 메달리온 아키텍처(브론즈, 실버, 골드)라고도 합니다.

# Example zone structure inside one S3 bucket
# s3://my-data-lake/
#   landing/    <- raw ingest from source systems
#   processing/ <- cleansed, validated data
#   curated/    <- aggregated, analytics-ready

S3 버킷 구조 생성

AWS CLI를 사용하여 버전 관리와 암호화가 적용된 S3 버킷을 생성하고 각 영역에 접두사를 적용하십시오. 원시 소스에서 언제든 다시 처리할 수 있도록 버전 관리를 활성화하고, 저장된 데이터에는 서버 측 암호화(SSE-S3 또는 SSE-KMS)를 활성화하십시오. 데이터를 비공개로 유지하려면 모든 퍼블릭 액세스를 차단하십시오.

aws s3api create-bucket \
  --bucket my-data-lake-123 \
  --region us-east-1

aws s3api put-bucket-versioning \
  --bucket my-data-lake-123 \
  --versioning-configuration Status=Enabled

aws s3api put-bucket-encryption \
  --bucket my-data-lake-123 \
  --server-side-encryption-configuration \
    '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'

영역 액세스를 위한 버킷 정책 적용

각 영역에는 고유한 액세스 정책이 있어야 하므로, 팀과 서비스마다 필요한 데이터만 다룰 수 있어야 합니다. 예를 들어 데이터 수집 역할에는 landing 접두사에 대한 s3:PutObject 권한을 부여하고, ETL 역할에는 landing에 대한 읽기 권한과 processing에 대한 쓰기 권한을 부여하며, 분석 역할에는 curated에 대한 읽기 전용 권한을 부여합니다. 이렇게 하면 데이터 레이크 내부에서 최소 권한 원칙을 적용할 수 있습니다.

# Attach a policy that allows the ETL role to read landing/ and write processing/
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:role/ETLRole"},
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-data-lake-123/landing/*"
    },
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:role/ETLRole"},
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-data-lake-123/processing/*"
    }
  ]
}

쿼리 효율을 위한 데이터 파티셔닝

파티셔닝은 쿼리 조건에 대응하는 폴더 계층(예: 연도/월/일 또는 리전/서비스)으로 S3의 데이터를 구성합니다. Athena 또는 Glue가 파티션된 데이터를 읽을 때 전체 데이터 세트가 아니라 관련 파티션만 스캔하므로 비용과 쿼리 시간을 크게 줄일 수 있습니다. 좋은 파티션 키는 WHERE 절에 자주 나타나는 값입니다.

# Hive-style partition naming for year/month/day
# s3://my-data-lake-123/curated/sales/
#   year=2024/month=01/day=15/part-00000.parquet
#   year=2024/month=01/day=16/part-00000.parquet
#   year=2024/month=02/day=01/part-00000.parquet

# Athena recognises this naming automatically

열 기반 형식: Parquet 및 ORC

Apache Parquet 또는 ORC(Optimised Row Columnar)와 같은 열 기반 형식으로 데이터를 저장하면 분석 쿼리 성능이 크게 향상되고 S3 데이터 스캔 비용이 낮아집니다. 열 기반 형식을 사용하면 쿼리 엔진이 필요한 열만 읽고, 반복되는 값을 효율적으로 압축하며, 조건 푸시다운을 지원할 수 있습니다. 원시 CSV 또는 JSON은 항상 curated 영역에서 Parquet으로 변환하십시오.

# Converting CSV to Parquet with AWS Glue (simplified PySpark)
import sys
from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

datasource = glueContext.create_dynamic_frame.from_catalog(
    database='my_db', table_name='raw_sales')

glueContext.write_dynamic_frame.from_options(
    frame=datasource,
    connection_type='s3',
    connection_options={'path': 's3://my-data-lake-123/curated/sales/'},
    format='parquet')

비용 관리를 위한 S3 수명 주기 정책

Landing Zone의 데이터는 계속 증가하지만 오래된 원시 파일은 거의 다시 액세스하지 않습니다. S3 수명 주기 정책을 사용하여 시간이 지나면 원시 데이터를 더 저렴한 스토리지 클래스로 자동 전환하십시오. 예를 들어 landing/의 객체를 30일 후 S3 Glacier Instant Retrieval로, 90일 후 Glacier Deep Archive로 이동할 수 있습니다. 이 방법만으로도 과거 데이터의 스토리지 비용을 70~90% 줄일 수 있습니다.

aws s3api put-bucket-lifecycle-configuration \
  --bucket my-data-lake-123 \
  --lifecycle-configuration '{
    "Rules": [{
      "ID": "ArchiveLanding",
      "Filter": {"Prefix": "landing/"},
      "Status": "Enabled",
      "Transitions": [
        {"Days": 30, "StorageClass": "GLACIER_IR"},
        {"Days": 90, "StorageClass": "DEEP_ARCHIVE"}
      ]
    }]
  }'

세분화된 액세스를 위한 Lake Formation

AWS Lake Formation은 S3와 Glue Data Catalogue 위에서 작동하며 복잡한 버킷 정책을 작성하지 않고도 테이블 수준, 열 수준, 행 수준의 액세스 제어를 제공합니다. Lake Formation은 Athena, Redshift Spectrum, EMR과 통합됩니다. 여러 팀이 동일한 데이터 레이크를 쿼리하면서 PII나 금융 데이터와 같은 민감한 열에 대해 서로 다른 표시 범위가 필요할 때 권장되는 방식입니다.

# Grant Lake Formation table access via CLI
aws lakeformation grant-permissions \
  --principal DataLakePrincipalIdentifier=arn:aws:iam::123456789012:role/AnalystRole \
  --permissions SELECT \
  --resource '{
    "Table": {
      "DatabaseName": "my_db",
      "Name": "curated_sales"
    }
  }'

수집 트리거를 위한 S3 이벤트 알림

새 파일이 S3 Landing Zone에 도착하면 자동으로 처리를 시작해야 합니다. 객체가 생성될 때마다 S3 이벤트 알림을 사용하여 SQS, SNS 또는 Lambda에 이벤트를 게시하십시오. 그러면 Lambda 함수 또는 Glue 워크플로가 새 파일을 가져와 검증한 뒤 파이프라인을 통해 이동합니다. 이를 통해 완전히 자동화된 이벤트 기반 데이터 레이크 수집 프로세스를 만들 수 있습니다.

# S3 event notification to trigger Lambda on new object
aws s3api put-bucket-notification-configuration \
  --bucket my-data-lake-123 \
  --notification-configuration '{
    "LambdaFunctionConfigurations": [{
      "LambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:ProcessNewFile",
      "Events": ["s3:ObjectCreated:*"],
      "Filter": {
        "Key": {"FilterRules": [{"Name": "prefix", "Value": "landing/"}]}
      }
    }]
  }'

데이터 레이크의 암호화 및 규정 준수

운영 환경의 데이터 레이크는 모든 영역에서 암호화를 적용해야 합니다. 민감한 데이터의 SSE-KMS에는 AWS KMS Customer Managed Keys (CMK)를 사용하고, 각 데이터 사용자가 명시적으로 키 권한을 부여받도록 하십시오. 삭제하거나 덮어쓰면 안 되는 규제 대상 데이터에는 S3 Object Lock을 Compliance 모드로 활성화하십시오. Macie를 사용하면 데이터 레이크에 저장된 PII를 자동으로 검색하고 알림을 생성할 수 있습니다.

# Enforce KMS encryption on all PUT operations via bucket policy
{
  "Effect": "Deny",
  "Principal": "*",
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::my-data-lake-123/curated/*",
  "Condition": {
    "StringNotEquals": {
      "s3:x-amz-server-side-encryption": "aws:kms"
    }
  }
}

계정 간 데이터 레이크 액세스

대규모 조직에서는 데이터 레이크 S3 버킷이 중앙 데이터 플랫폼 계정에 있고, 데이터를 사용하는 팀은 별도의 AWS 계정에서 운영됩니다. 버킷 정책에 사용 계정의 보안 주체를 지정하고, 사용 계정의 IAM 역할이 계정 간 권한을 위임받도록 구성하여 액세스 권한을 부여하십시오. Resource Access Manager (RAM)는 Lake Formation 기반 공유를 위한 대안입니다.

# Bucket policy in central account allows consumer account to read curated/
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::999988887777:root"
  },
  "Action": ["s3:GetObject", "s3:ListBucket"],
  "Resource": [
    "arn:aws:s3:::my-data-lake-123",
    "arn:aws:s3:::my-data-lake-123/curated/*"
  ]
}

빠른 확인

이 레슨에서 다룬 AWS Solutions Architect (SAA-C03) 개념에 대한 이해도를 확인해 보십시오.

레슨 요약

이 레슨에서는 다음을 배웠습니다. 데이터 레이크는 Landing Zone, Processing Zone, Curated Zone과 함께 S3를 사용합니다. 파티셔닝과 Parquet 형식은 Athena 쿼리 비용을 줄입니다. 또한 Lake Formation은 열 수준과 행 수준의 세분화된 액세스 제어를 제공합니다. 다음에서는 서버리스 ETL과 Glue Data Catalogue를 위한 AWS Glue를 살펴보겠습니다.

자주 묻는 질문

“S3에서 데이터 레이크 구축” 강의는 무료인가요?

네 — “S3에서 데이터 레이크 구축” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“S3에서 데이터 레이크 구축”에서 뭘 배우나요?

수집, 처리 및 정제 영역으로 구성된 S3 기반 데이터 레이크를 설계하고, 버킷 정책을 적용하며, 쿼리 효율성을 위해 파티션별로 데이터를 구성합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“S3에서 데이터 레이크 구축” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. S3에서 데이터 레이크 구축
  2. AWS Glue: ETL 및 데이터 카탈로그
  3. Amazon Athena: S3의 서버리스 SQL
  4. Kinesis Streams, Firehose 및 실시간 분석
← Cloud & IT Cert Prep(으)로 돌아가기