AWS DEA-C01 문제로 공부하기 — Day 13
S3 객체 잠금 규정 준수 모드, QuickSight Athena+SPICE(복수), DMS CDCLatencySource 지표, S3 Lambda 무한루프 버킷 분리, Athena Parquet+Snappy — 5문제 핵심 정리.
S3 객체 잠금 규정 준수 모드(Compliance Mode)는 루트 사용자를 포함한 누구도 보존 기간 동안 파일을 삭제하거나 잠금을 해제할 수 없습니다. 버킷 정책이나 MFA 삭제는 권한이 있는 사용자가 우회할 수 있어 완벽한 법적 요건 충족이 어렵습니다.
기업이 비즈니스 크리티컬 데이터를 S3 버킷에 저장합니다. 법적 요건에 따라 파일을 최소 2년간 보관해야 하며, 보존 기간 동안 누구도 파일을 삭제할 수 없어야 합니다. 이 요건을 충족하는 구성은 무엇일까요?
-
A규정 준수(Compliance) 모드에서 S3 객체 잠금을 구성하고 보존 기간을 2년으로 설정합니다.✅ S3 객체 잠금 규정 준수 모드(Compliance Mode) — WORM(Write Once, Read Many) 방식. AWS 계정 루트 사용자를 포함한 그 누구도 보존 기간 내 파일 삭제·잠금 해제 불가. 가장 엄격한 불변성 보장.
-
B모든 IAM 사용자·역할에 대해 삭제 권한을 명시적으로 거부하는 S3 버킷 정책을 구성합니다.❌ 버킷 정책은 권한이 있는 사용자(예: 버킷 정책 관리자)가 정책 자체를 수정하여 삭제 허용으로 변경할 수 있음. 완전한 삭제 방지를 보장하지 못함.
-
CS3 Glacier Deep Archive로 전환하는 수명주기 정책을 구성합니다.❌ S3 수명주기 정책은 스토리지 클래스를 전환하거나 객체를 삭제하는 기능. 파일 삭제를 방지하지 않음. Glacier로 이동해도 권한이 있으면 삭제 가능.
-
D실수로 파일을 삭제하지 못하도록 MFA 삭제를 구성합니다.❌ MFA 삭제 — 추가 인증 단계를 요구하지만 MFA를 보유한 사용자는 여전히 삭제 가능. 삭제 방지가 아닌 실수 방지만 제공. 법적 요건 완전 충족 불가.
| 모드 | 삭제 방지 대상 | 루트 포함? | 법적 요건 충족? |
|---|---|---|---|
| 규정 준수(Compliance) | 모든 사용자 | ✓ 포함 | ✓ 완벽 |
| 거버넌스(Governance) | 일반 사용자 | 루트·관리자 예외 가능 | 조건부 |
| 버킷 정책 | IAM 정책 기반 | 정책 수정으로 우회 가능 | ✗ 불완전 |
| MFA 삭제 | 실수만 방지 | MFA 소지자 삭제 가능 | ✗ |
"법적 요건 + 누구도 삭제 불가"
→ S3 객체 잠금 규정 준수(Compliance) 모드
Compliance = 루트도 삭제 불가, 보존 기간 동안 절대 불변
Governance = 관리자는 해제 가능 (법적 요건에는 부족)Amazon QuickSight + Athena + SPICE 조합은 S3 클릭스트림 데이터를 비용 효율적으로 대시보드화하는 표준 패턴입니다. SPICE(인메모리 엔진)는 데이터를 캐시해 빠른 대시보드 조회와 Athena 과금 절감을 동시에 달성합니다.
마케팅 회사가 Firehose로 수집한 클릭스트림 데이터를 S3에 저장합니다. 수백 명의 사용자가 사용할 대시보드를 QuickSight로 개발하려 합니다. 클릭스트림 활동의 일별 업데이트를 제공하고 확장 가능하면서 비용 효율적인 단계의 조합은 무엇일까요?
-
AAmazon Redshift를 사용하여 클릭스트림 데이터를 저장하고 쿼리합니다.❌ 데이터가 이미 S3에 있는데 Redshift 클러스터를 별도로 운영하면 불필요한 비용 발생. 클러스터 유지 비용 + 데이터 수집 작업까지 추가. S3에서 직접 쿼리하는 방법이 더 효율적.
-
BAmazon Athena를 사용하여 S3 클릭스트림 데이터를 쿼리합니다.✅ Amazon Athena — 서버리스, S3 데이터를 직접 SQL 쿼리. 쿼리할 때만 과금. QuickSight 데이터셋 소스로 직접 연결 가능. 클러스터 운영 비용 없음.
-
CAmazon S3 분석을 사용하여 클릭스트림 데이터를 쿼리합니다.❌ Amazon S3 분석 — 데이터 접근 패턴을 관찰하여 스토리지 클래스 전환 시점을 결정하는 기능. 데이터 쿼리 기능이 없음. 비용 최적화 분석 도구이지 쿼리 도구가 아님.
-
DQuickSight 다이렉트 SQL 쿼리로 대시보드 데이터에 접근합니다.❌ 다이렉트 SQL 쿼리는 대시보드 접근 시마다 소스에서 실시간 쿼리 실행 → Athena 과금이 사용자 수·접근 횟수에 비례하여 증가. 수백 명이 자주 접근하면 비용 급증. SPICE 캐시 사용이 더 비용 효율적.
-
EQuickSight SPICE(인메모리 엔진)를 사용하여 데이터를 캐시하고 일별 데이터셋 새로 고침을 구성합니다.✅ QuickSight SPICE — 인메모리 캐시 엔진. 데이터를 SPICE에 가져와두면 대시보드 조회 시 Athena를 재실행하지 않음 → Athena 과금 최소화 + 빠른 응답. 일별 새로 고침으로 최신 데이터 유지. 수백 명 동시 접근에도 확장 가능.
| 방법 | 조회 시 Athena 과금? | 속도 | 비용 효율 |
|---|---|---|---|
| SPICE + 일별 새로고침 | 새로고침 시만 | 빠름 | ✓ 최적 |
| 다이렉트 SQL 쿼리 | 매 조회마다 | 느림 | 비용 증가 |
| Redshift 연결 | 없음 (클러스터 비용) | 빠름 | 클러스터 유지 비용 |
"S3 클릭스트림 → QuickSight 대시보드 + 비용 효율"
→ Athena(쿼리) + SPICE(일별 캐시)
SPICE = 인메모리 캐시 → 대시보드 조회 시 Athena 재실행 안 함
다이렉트 SQL = 매 조회마다 Athena 과금 → 비용 급증CDCLatencySource는 DMS가 소스 DB(PostgreSQL 등)에서 변경 사항을 캡처하는 데 걸리는 지연을 측정합니다. 소스 DB가 CDC 지연의 원인인지 확인할 때 가장 직접적인 지표입니다.
AWS DMS 지속 복제 작업이 온프레미스 PostgreSQL DB의 변경 사항을 Amazon Redshift로 거의 실시간으로 전송합니다. CDC 중 지연 시간 문제가 발견되었고 PostgreSQL 소스 DB가 원인으로 의심됩니다. 소스 DB가 지연의 원인임을 확인하는 방법은 무엇일까요?
-
AAmazon CloudWatch에서 DMS 작업의 CDCIncomingChanges 지표를 검사합니다.❌ CDCIncomingChanges — 특정 시점에 대상에 적용 대기 중인 변경 이벤트 수. 소스 DB의 변경 캡처 지연을 측정하지 않음. 대상 적용 병목을 나타내는 지표.
-
Bpostgresql.conf 파일에서 소스 DB의 논리적 복제 설정을 확인합니다.❌ 논리적 복제 설정은 DMS 작업 시작 전제 조건. 이미 복제가 실행 중이므로 설정이 되어 있다는 뜻. 현재 발생하는 지연의 원인 분석과 무관.
-
C소스 DB DMS 엔드포인트에 대한 CloudWatch Logs를 확인하고 오류 메시지를 검사합니다.❌ CloudWatch Logs는 오류·경고 이벤트 기록. 소스 지연이 얼마나 심한지 정량적으로 측정하지 않음. 지연 원인 확인에 직접적이지 않음.
-
DAmazon CloudWatch에서 DMS 작업의 CDCLatencySource 지표를 검사합니다.✅ CDCLatencySource — 소스 엔드포인트에서 캡처한 마지막 이벤트와 DMS 인스턴스 현재 시각의 차이(초 단위). 이 값이 크면 소스 DB에서 변경 사항 캡처 자체가 지연됨을 의미. 소스 DB를 원인으로 특정하는 가장 직접적인 지표.
| 지표 | 의미 | 소스 지연 확인? |
|---|---|---|
| CDCLatencySource | 소스 캡처 지연 (초) | ✓ 직접 |
| CDCLatencyTarget | 대상 적용 지연 (초) | 대상 지연 측정 |
| CDCIncomingChanges | 대기 중인 변경 이벤트 수 | ✗ 간접 |
| CloudWatch Logs | 오류·경고 로그 | ✗ 정량 측정 아님 |
"DMS 소스 DB 지연 확인" → CDCLatencySource
"DMS 대상 DB 지연 확인" → CDCLatencyTarget
Source = 소스에서 캡처 지연
Target = 대상에 적용 지연Lambda 함수가 결과물을 트리거 소스 버킷에 다시 쓰면 S3 이벤트가 재발생해 무한 루프가 됩니다. 입력 버킷과 출력 버킷을 분리하면 루프가 차단됩니다.
S3 PUT 이벤트가 Lambda 함수를 트리거하여 인벤토리 측정 프로세스를 실행합니다. 이 프로세스의 결과물을 동일한 S3 버킷에 저장하도록 구성되어 있어 프로세스가 무한 반복됩니다. 새 객체 업로드 시 프로세스가 한 번만 실행되도록 하는 방법은 무엇일까요?
-
AS3 PUT 이벤트 트리거 대신 AWS CloudTrail 이벤트를 사용하여 Lambda 함수를 호출합니다.❌ CloudTrail 이벤트로 트리거를 변경해도 인벤토리 결과가 같은 버킷에 저장되면 새 PutObject 이벤트가 발생 → 다시 CloudTrail 이벤트 생성 → 루프 계속. 근본 원인(같은 버킷 쓰기)을 해결하지 않음.
-
BAmazon SQS FIFO 대기열을 호출하도록 S3 이벤트를 구성하여 한 번만 처리합니다.❌ SQS FIFO — 중복 없는 메시지 처리를 지원하지만 S3 이벤트 알림의 직접 대상으로 FIFO 큐를 사용할 수 없음. S3 이벤트 알림은 SQS 표준 큐, SNS, Lambda만 지원.
-
C서비스 제어 정책(SCP)을 사용하여 S3 버킷에 대한 지속적인 일일 쓰기를 방지합니다.❌ SCP(서비스 제어 정책) — AWS Organizations 단위 최대 권한 정책. 지속적 반복 쓰기 패턴을 감지하고 방지하는 기능이 없음. 쓰기 권한 자체를 제거하면 정상 업로드도 차단됨.
-
D판매 데이터 입력 버킷과 인벤토리 프로세스 결과 출력 버킷을 분리합니다.✅ 핵심 해결책. 입력 S3 버킷(판매 데이터 업로드) → Lambda 트리거 → 인벤토리 처리 → 결과를 별도 출력 S3 버킷에 저장. 출력 버킷에는 S3 이벤트 트리거가 없으므로 Lambda가 다시 호출되지 않음. 루프 차단.
| 구성 | 루프 발생? |
|---|---|
| 입력 버킷 = 출력 버킷 (현재 문제) | ✓ 무한루프 |
| 입력 버킷 ≠ 출력 버킷 (해결책) | ✗ 루프 없음 |
| 이벤트 소스 변경(CloudTrail) | ✓ 여전히 루프 |
"S3 → Lambda → 같은 S3 쓰기" = 무한루프!
해결책: 입력 버킷(트리거)과 출력 버킷(결과)을 분리
→ 출력 버킷에 S3 이벤트 트리거 없음 → 루프 차단Apache Parquet + Snappy 압축은 Athena 쿼리 런타임과 스토리지 비용을 동시에 최적화하는 최선의 조합입니다. Parquet은 열 기반 스캔을, Snappy는 빠른 압축·해제를 제공합니다. Athena는 ZIP 압축을 지원하지 않습니다.
Amazon Athena를 사용하여 10~15TB의 비압축 .csv 파일을 분석하려 합니다. 쿼리 런타임과 스토리지 비용 모두를 최적화하기 위해 데이터를 변환해야 합니다. 가장 적합한 파일 형식과 압축 방식의 조합은 무엇일까요?
-
A.csv 형식 + ZIP 압축❌ ZIP 압축 — Athena에서 지원하지 않음. Athena는 Snappy, Gzip, Zlib, LZO, Zstd 등 오픈소스 형식만 지원. 또한 CSV 형식 자체가 열 기반이 아니어서 쿼리 성능 개선 제한적.
-
BJSON 형식 + bzip2 압축❌ bzip2는 Athena 지원 형식이지만 JSON은 행 기반 형식. 필요한 열만 읽는 열 기반 최적화 불가. 쿼리 런타임 최적화 요건 미충족.
-
CApache Parquet 형식 + Snappy 압축✅ Apache Parquet — 열 기반 형식. 필요한 열만 스캔 → Athena 스캔량·비용 대폭 감소. Snappy 압축 — 빠른 압축·해제 속도로 쿼리 런타임 최적화. 파일 크기 감소로 스토리지 비용 절감. Athena에서 Parquet+Snappy가 쿼리 런타임과 비용 모두 최적화하는 표준 조합.
-
DApache Avro 형식 + LZO 압축❌ Apache Avro — 행 기반 형식. 실시간 처리·전체 필드 접근에 적합하지 열 기반 분석 쿼리 최적화에 부적합. LZO는 압축률이 낮아 비용 절감 효과 낮음.
| 조합 | 열 기반? | Athena 지원? | 쿼리 성능 | 스토리지 비용 |
|---|---|---|---|---|
| Parquet + Snappy | ✓ | ✓ | 최고 | 최저 |
| ORC + Snappy/Zlib | ✓ | ✓ | 높음 | 낮음 |
| JSON + bzip2 | ✗ 행 기반 | ✓ | 낮음 | 중간 |
| CSV + ZIP | ✗ | ✗ ZIP 미지원 | 최저 | 높음 |
"Athena 쿼리 런타임 + 스토리지 비용 최적화"
→ Apache Parquet + Snappy 압축
ZIP = Athena 미지원 (오답 함정!)
Avro / JSON = 행 기반 → 열 스캔 최적화 불가