CloudPass LogoCloud Pass
AWSGoogle CloudMicrosoftCiscoCompTIADatabricks
Certifications
AWSGoogle CloudMicrosoftCiscoCompTIADatabricks
  1. Cloud Pass
  2. GCP
  3. Google Professional Data Engineer
Google Professional Data Engineer

GCP

Google Professional Data Engineer

300+ 기출 문제 (AI 검증 답안 포함)

Free questions & answers실제 시험 기출 문제
AI-powered explanations상세 해설
Real exam-style questions실제 시험과 가장 유사
300+ 문제 보기

AI 기반

3중 AI 검증 답안 및 해설

모든 Google Professional Data Engineer 답안은 3개의 최고 AI 모델로 교차 검증하여 최고의 정확도를 보장합니다. 선택지별 상세 해설과 심층 문제 분석을 제공합니다.

GPT Pro
Claude Opus
Gemini Pro
선택지별 상세 해설
심층 문제 분석
3개 모델 합의 정확도

시험 도메인

Designing Data Processing Systems출제율 22%
Ingesting and Processing the Data출제율 25%
Storing the Data출제율 20%
Preparing and Using Data for Analysis출제율 15%
Maintaining and Automating Data Workloads출제율 18%

실전 문제

1
문제 1

You are troubleshooting an Apache Flink streaming cluster running on 12 Compute Engine VMs in a managed instance group without external IPs on the custom VPC "analytics-vpc" and subnet "stream-subnet". TaskManager nodes cannot communicate with one another. Your networking team manages access using Google Cloud network tags to define firewall rules. Flink has been configured to use TCP ports 12345 and 12346 for RPC and data transport between nodes. You need to identify the issue while following Google-recommended networking security practices. What should you do?

이 시나리오는 networking team이 Google Cloud network tag를 사용해 access를 관리한다고 명시적으로 설명하므로 이것이 가장 좋은 정답입니다. managed instance group의 Compute Engine 인스턴스에 flink-workers tag가 적용되어 있지 않다면, 해당 tag를 대상으로 하는 어떤 firewall rule도 절대 매칭되지 않으며 필요한 Flink port는 사실상 계속 차단된 상태로 남게 됩니다. MIG 기반 배포에서는 tag가 instance template에서 오므로, tag가 없거나 잘못된 것은 클러스터 통신 실패의 흔한 근본 원인입니다. tag 할당을 확인하는 것은 Google 권장 역할 기반 firewall 사례와 직접적으로 일치하며, 주어진 정보에서 식별해야 할 가장 정확한 문제입니다.

flink-workers tag에 대해 TCP port 12345 및 12346 ingress를 허용하는 firewall rule은 필요하지만, 이 선택지는 인스턴스가 이미 올바르게 tag되어 있다고 가정합니다. 문제는 access가 network tag를 사용해 관리된다는 점을 특히 강조하므로, 더 근본적인 문제는 인스턴스가 실제로 해당 rule이 적용될 수 있도록 기대된 tag를 가지고 있는지 여부입니다. tag가 없으면 firewall rule이 완벽하게 구성되어 있어도 통신 문제를 해결할 수 없습니다. 따라서 이것은 중요한 2차 확인 사항이지만, 가장 좋은 단일 정답은 아닙니다.

Google Cloud firewall rule은 보호 대상 리소스로 subnet을 target하지 않기 때문에 이 선택지는 틀렸습니다. Firewall rule은 네트워크의 모든 인스턴스 또는 network tag나 service account를 통해 선택된 인스턴스에 적용되며, source range는 subnet CIDR를 참조할 수 있습니다. 조직이 tag를 사용해 access를 관리하므로, 'stream-subnet용' rule을 확인하는 것은 GCP firewall targeting이 동작하는 방식과 맞지 않습니다. 이는 subnet 기반 routing과 인스턴스 기반 firewall enforcement 사이의 흔한 오해를 반영합니다.

같은 VPC 내부의 VM 간 통신에는 external IP address가 필요하지 않으므로 이 선택지는 틀렸습니다. analytics-vpc와 stream-subnet의 인스턴스는 route와 firewall rule이 트래픽을 허용하는 한 internal IP address를 통해 통신할 수 있습니다. external IP가 없다는 것은 직접적인 인터넷 도달성에만 영향을 주며, Flink TaskManagers 간의 내부 east-west 트래픽에는 영향을 주지 않습니다. 따라서 external IP 구성은 설명된 클러스터 통신 문제와 관련이 없습니다.

문제 분석

핵심 개념: 이 문제는 Google Cloud에서 east-west (VM-to-VM) 트래픽에 대한 VPC firewall 동작, 특히 firewall rule의 selector로 network tag를 사용할 때를 테스트합니다. Google Cloud에서 VPC firewall rule은 stateful이며 대상 VM으로 들어오는 ingress에서 평가됩니다. 내부 클러스터 통신(예: Flink TaskManagers)의 경우, 올바른 인스턴스(일반적으로 network tag를 통해)를 대상으로 하는 ingress firewall rule을 통해 필요한 TCP port를 명시적으로 허용해야 합니다. 정답인 이유: TaskManagers가 서로 통신할 수 없고, Flink가 TCP 12345 및 12346을 사용하도록 구성되어 있습니다. external IP가 없는 custom VPC/subnet에서 가장 흔한 원인은 내부 트래픽에 대한 ingress firewall rule이 없거나 잘못된 경우입니다. networking team이 “network tag를 사용해 access를 관리한다”고 했으므로, 올바른 troubleshooting 단계는 TCP 12345 및 12346을 허용하고 target tag(flink-workers)를 지정한 ingress firewall rule이 있는지 확인하는 것입니다. 이것이 없으면 같은 subnet에 있는 인스턴스끼리도 해당 port로 서로 통신할 수 없습니다. 이는 least privilege, 명시적인 port allowlisting, tag 기반 targeting이라는 Google 권장 사례와 일치합니다. 주요 기능 / 모범 사례: - VPC firewall rule은 stateful입니다: 대상에 대한 ingress를 허용하면 return traffic은 충분히 허용됩니다. - Rule은 network tag(역할 기반 segmentation에 권장) 또는 service account로 인스턴스를 대상으로 지정할 수 있습니다. - 내부 트래픽은 implied rule(예: implied allow egress)을 제외하고 자동으로 허용되지 않습니다. Ingress는 허용되어야 합니다. - MIG의 경우, instance template에 올바른 tag가 적용되어 있는지 확인한 다음 firewall rule이 해당 tag를 대상으로 하는지 확인해야 합니다. 흔한 오해: - “같은 subnet”이면 모든 port가 열려 있다고 가정하는 것(사실이 아님). - subnet 기반 제어와 firewall targeting을 혼동하는 것: firewall rule은 target으로 “subnet에 적용”되지 않으며, 인스턴스에 적용됩니다(tag/service account를 통해). source range는 subnet CIDR로 필터링할 수 있습니다. - 내부 통신에 external IP가 필요하다고 생각하는 것(그렇지 않음). 시험 팁: 클러스터의 내부 노드들이 서로 통신하지 못할 때는 먼저 다음을 확인하세요: (1) 필요한 port에 대해 대상에 대한 firewall ingress, (2) 올바른 target selector(tag/service account), (3) 올바른 source range(예: subnet CIDR), (4) 인터넷으로의 egress가 관련된 경우에만 route/NAT. tag로 관리되는 환경에서는 항상 tag를 대상으로 하고 특정 port를 허용하는 firewall rule을 검증하세요.

2
문제 2

Your company operates three independent data workflows that must be orchestrated from a single place with consistent scheduling, monitoring, and on-demand execution.

  1. A Dataproc Serverless Spark batch job in us-central1 converts CSV files in a regional Cloud Storage bucket into partitioned BigQuery tables; it must run daily at 01:30 UTC and complete within 45 minutes.
  2. A Storage Transfer Service job pulls approximately 50 GB from an external SFTP endpoint into Cloud Storage every 4 hours; you cannot install agents on the external system.
  3. A Dataflow Flex Template pipeline calls a third-party REST API (rate limit: 1,000 requests/hour) to fetch deltas and stage them in Cloud Storage. You need a single solution to schedule these three workflows, monitor task status and logs, receive failure alerts within 10 minutes, and allow manual ad-hoc runs (up to 5 per day) without building custom infrastructure. What should you do?

Cloud Composer(관리형 Airflow)는 중앙 집중식 스케줄링, 모니터링, 재시도/SLA, 그리고 단일 UI에서의 수동 트리거를 통해 여러 독립 워크플로를 오케스트레이션하도록 목적에 맞게 설계되었습니다. Airflow operator/hook은 Dataproc Serverless batch를 시작하고, Storage Transfer Service job을 실행하며, Dataflow Flex Template을 실행할 수 있습니다. Composer는 Cloud Logging/Monitoring과 통합되어 10분 이내에 실패를 통지하는 alert policy를 생성할 수 있으므로, 커스텀 인프라 없이 운영 요구사항을 충족합니다.

Cloud Monitoring alert는 이상 징후를 감지할 수 있지만, 오케스트레이션 엔진은 아닙니다. metric이 “실행되지 않았다”고 나타날 때만 job을 트리거하는 방식은 반응적이고 취약하며, 일관된 의존성 관리, 재시도, 통합 실행 이력을 제공하지 못합니다. 또한 애드혹 실행을 복잡하게 만들고, Dataproc, STS, Dataflow 전반의 로그와 task 수준 상태를 단일 운영 인터페이스로 본질적으로 중앙화하지도 못합니다.

Cloud Run에 커스텀 오케스트레이터를 만들고 Firestore 상태 및 Cloud Scheduler를 조합하면 동작은 가능하지만, 커스텀 인프라 구축을 피하라는 요구사항을 위반합니다. 스케줄링 로직, 멱등성(idempotency), 재시도, 동시성 제어, 애드혹 실행을 위한 UI 또는 도구, 그리고 견고한 모니터링/알림을 구현해야 합니다. 이는 이러한 패턴을 위해 설계된 관리형 오케스트레이터(Composer/Airflow)를 사용하는 것에 비해 운영 오버헤드와 리스크를 증가시킵니다.

cron을 사용하는 단일 VM은 가장 신뢰성이 낮고 유지보수가 어려운 접근입니다. 단일 장애 지점을 만들고, OS 패치 및 가용성 관리를 요구하며, 커스텀 로그 파싱과 알림 로직을 강제합니다. 또한 수동 실행과 일관된 task 모니터링을 위한 표준화된 워크플로 UI가 부족합니다. 이 옵션은 운영 우수성에 대한 Google Cloud 모범 사례 및 커스텀 인프라를 피하라는 요구사항과 충돌합니다.

문제 분석

핵심 개념: 이 문제는 이기종 데이터 워크플로(Dataproc Serverless, Storage Transfer Service, Dataflow Flex Templates)를 위한 관리형 오케스트레이션을 중앙 집중식 스케줄링, 관측 가능성(observability), 알림, 그리고 애드혹 실행과 함께—커스텀 인프라 없이—구현하는지를 테스트합니다. 이를 위한 정석적인 GCP 서비스는 Cloud Composer(관리형 Apache Airflow)입니다. 정답이 맞는 이유: Cloud Composer는 여러 GCP 서비스 전반에서 스케줄(cron), 의존성, 재시도, SLA, 수동 트리거를 정의할 수 있는 단일 컨트롤 플레인을 제공합니다. Airflow operator와 hook을 통해 Dataproc Serverless batch를 시작하고 모니터링할 수 있으며, Storage Transfer Service 실행을 호출하고, Dataflow Flex Template job을 실행할 수 있습니다. Composer UI는 온디맨드 DAG 실행(“하루 최대 5회” 요구사항 충족)과 작업 상태에 대한 일관된 모니터링을 지원합니다. 로그는 Cloud Logging으로 중앙화할 수 있고, 실패는 log-based metric 또는 Airflow/Composer metric을 사용해 Cloud Monitoring에서 10분 이내로 알림을 보낼 수 있습니다. 주요 기능 / 구성: - 스케줄링: 01:30 UTC 매일(Dataproc), 4시간마다(STS), 그리고 1,000 requests/hour 제한을 준수하면서 API 파이프라인에 적절한 주기(예: Dataflow 병렬성 제어, 파이프라인 내 rate-limiting, 그리고/또는 스케줄 빈도 조정)를 설정하는 Airflow DAG 스케줄. - 모니터링: Airflow task 상태, 재시도, SLA 미스 처리; task 로그를 위한 Cloud Logging 통합. - 알림: Composer environment metric(task 실패) 및/또는 log-based metric에 대한 Cloud Monitoring alert policy; 10분 요구사항을 충족하기 위한 notification channel(email, PagerDuty, webhook). - 커스텀 인프라 없음: Composer는 관리형이므로, 자체 스케줄러/상태 저장소/UI를 구축·운영할 필요가 없습니다. 흔한 오해: “단순 트리거”를 위해 Cloud Scheduler + Functions/Run을 쓰고 싶을 수 있지만, 요구사항에는 단일 장소에서의 일관된 모니터링, 로그, 수동 애드혹 실행이 포함됩니다. 예외 기반 모니터링(Option B)은 오케스트레이션이 아닙니다. DIY 오케스트레이터(Options C/D)는 “커스텀 인프라를 구축하지 말 것”을 위반하며 운영 부담을 증가시킵니다. 시험 팁: Professional Data Engineer에서 “여러 워크플로,” “단일 장소,” “스케줄링 + 모니터링 + 수동 실행,” “커스텀 인프라 없음”을 보면 Cloud Composer/Airflow를 떠올리세요. 또한 에이전트를 설치할 수 없을 때 SFTP 수집에는 Storage Transfer Service가 적절한 도구이며, Composer가 Dataflow 및 Dataproc과 함께 이를 오케스트레이션할 수 있음을 인지하세요. 요구사항을 Google Cloud Architecture Framework에 매핑해보면: 운영 우수성(모니터링/알림), 신뢰성(재시도/SLA), 보안(operator를 위한 최소 권한 service account)입니다.

3
문제 3

You are designing a platform to store 1-second interval temperature and humidity readings from 12 million cold-chain sensors across 40 warehouses. Analysts require real-time, ad hoc range queries over the most recent 7 days with sub-second latency. You must avoid per-query charges and ensure the schema can scale to 25 million sensors and accommodate new metrics without frequent schema changes. Which database and data model should you choose?

BigQuery는 time-series 데이터를 저장할 수 있고 SQL range query를 지원하지만, 일반적으로(on-demand) per-query 비용이 발생하며 주로 낮은 지연 시간의 operational store가 아닙니다. 12M sensors가 1 Hz로 쓰는 경우 ingest가 매우 큽니다. BigQuery가 높은 볼륨을 처리할 수는 있지만, 가장 최근 데이터에 대해 일관된 sub-second ad hoc query latency를 달성하는 것은 전형적인 강점이 아닙니다. per-query charges를 피하려면 flat-rate reservations가 필요하지만, 이 옵션에는 그 내용이 명시되어 있지 않습니다.

초당 1개 column을 두고 매초 같은 row를 업데이트하는 wide BigQuery 테이블은 anti-pattern입니다. BigQuery는 빈번한 row update가 아니라 append-only analytics에 최적화되어 있습니다. 이 설계는 복잡성을 증가시키고 contention 위험을 높이며, schema evolution(메트릭 추가 또는 granularity 변경)을 고통스럽게 만듭니다. 또한 효율적인 range query를 위한 partitioning/clustering과 자연스럽게 맞지 않아 더 높은 비용과 운영 오버헤드로 이어질 수 있습니다.

좁고 append-only인 Cloud Bigtable 테이블에 row key = sensorId + timestamp(종종 reversed time 포함)는 표준적인 time-series 패턴입니다. 이는 수천만 디바이스까지 수평 확장되며, row key가 query 패턴(예: 센서별 최근 7일)과 일치할 때 낮은 지연 시간의 range scan을 지원합니다. Bigtable의 sparse columns는 schema migration 없이 새 metrics를 새 qualifier로 추가할 수 있게 해주며, 비용은 쿼리당이 아니라 provisioned 방식입니다.

센서당 분당 1개 wide Bigtable row에 60 columns(초당 1개)을 두면 row 수는 줄일 수 있지만, 같은 row에 대한 빈번한 mutation(매초 업데이트)을 유발하여 효율이 떨어지고 contention/hotspot 위험을 증가시킬 수 있습니다. 또한 새 metrics 추가가 더 복잡해지고(초 단위로 qualifier가 곱해짐) 시간이 지나며 매우 wide한 row를 만들 수 있습니다. 확장성과 단순성을 위해서는 일반적으로 좁고 append-only인 time-series row가 선호됩니다.

문제 분석

핵심 개념: 이 문제는 예측 가능한 비용으로, 높은 ingest(수집)량의 time-series 데이터에 대해 낮은 지연 시간의 range scan을 수행할 수 있는 올바른 storage system과 data model을 선택하는지를 평가합니다. BigQuery(쿼리당/온디맨드 비용이 발생하는 serverless analytics)와 Cloud Bigtable(키/범위 접근 패턴에 최적화된, 낮은 지연 시간의 수평 확장 가능한 wide-column store)을 대비합니다. 정답이 맞는 이유: Cloud Bigtable을 좁고 append-only인 schema로 설계하는 것(Option C)이 요구사항을 가장 잘 충족합니다: (1) 매초 12M sensors가 쓰는 것은 극단적인 write throughput이며, Bigtable은 지속적인 높은 QPS와 대규모 time-series에 맞게 설계되었습니다. (2) 분석가가 최근 7일에 대해 sub-second latency로 실시간 ad hoc range query를 수행해야 하는데, Bigtable은 쿼리가 row-key range에 정렬되어 있으면 millisecond read를 제공할 수 있습니다. (3) “per-query charges를 피하라”는 요구는 BigQuery의 on-demand query pricing과 맞지 않으며, Bigtable은 provisioned(nodes/processing units) 방식이라 쿼리당 비용이 아닙니다. (4) “잦은 schema 변경 없이 새로운 metrics를 수용”은 Bigtable의 sparse하고 유연한 column-family/qualifier 모델에 부합합니다—새 metrics는 테이블 DDL churn 없이 새 column으로 추가할 수 있습니다. 주요 기능 / best practices: 지배적인 access pattern(센서별 최근 시간 범위)에 맞게 row key를 설계하세요. 일반적인 패턴은 sensorId + reversed timestamp(또는 time-bucket prefix + reversed time)로, 최근 데이터가 연속적으로 배치되게 하여 “최근 7일”에 대한 효율적인 scan을 가능하게 합니다. “m”(metrics) 같은 column family를 두고 qualifier로 temperature, humidity 등을 사용합니다. retention을 강제하고 storage를 제어하기 위해 GC policy(예: max age 7 days)를 적용합니다. hot-spotting도 고려하세요: 많은 write가 동일한 key range를 타겟하면, range query를 가능하게 유지하면서도 부하를 분산하기 위해 salting/hashing 또는 bucket prefix를 추가합니다. 흔한 오해: BigQuery는 ad hoc analytics에 매력적으로 보이지만, 신선한(high-velocity) 데이터에 대한 sub-second latency와 “per-query charges 없음” 요구는 flat-rate reservations에 커밋하고 streaming/partitioning 고려사항을 감수하지 않는 한 부적합합니다. wide-row Bigtable 설계(분 단위 bucket에 60 columns)는 효율적으로 보일 수 있지만, schema evolution을 복잡하게 만들고 크고 자주 변경되는 row를 만들 수 있습니다. 시험 팁: IoT/time-series에서 매우 높은 ingest와 낮은 지연 시간의 key/range read가 필요하면 Bigtable을 떠올리세요. 대규모 dataset 전반에 대한 복잡한 SQL analytics가 필요하면 BigQuery를 떠올리세요. data model을 선택할 때는 항상 요구사항을 pricing model(per-query vs provisioned), latency 기대치, 그리고 주요 access pattern에 매핑하세요.

4
문제 4

You operate a Cloud Run service that receives messages from a Cloud Pub/Sub push subscription at a steady rate of ~1,200 messages per minute, aggregates events into 5-minute batches, and writes compressed JSON files to a dedicated Cloud Storage bucket.\nYou want to configure Cloud Monitoring alerts that will reliably indicate if the pipeline stalls for more than 10 minutes by detecting a growing upstream backlog and a slowdown in data written downstream; which alerts should you create?

오답입니다. 정체는 subscription/num_undelivered_messages 감소를 유발하지 않으며, 일반적으로 메시지가 충분히 빠르게 acknowledge되지 못해 증가합니다. 두 번째 조건( storage used bytes 변화율 증가) 역시 더 높은 쓰기 처리량을 의미하므로 다운스트림 감속과 반대입니다. 이 선택지는 정체가 아니라 정상 또는 개선되는 파이프라인을 설명합니다.

정답입니다. Cloud Run이 메시지를 처리/ack하지 못하면 Pub/Sub 백로그가 증가하며, 이는 subscription/num_undelivered_messages 증가로 반영됩니다. 동시에 Cloud Storage에 기록되는 배치 파일이 줄어들거나(또는 없어지므로) storage used bytes의 변화율(derivative)이 0을 향해 감소합니다. 두 신호를 함께 사용하면 정상적인 5분 배치 동작보다 더 오래 지속되는 정체를 신뢰성 있게 나타냅니다.

오답입니다. instance/storage/used_bytes는 Pub/Sub에 대한 적절한 업스트림 메트릭이 아니며, 이 맥락에서 Cloud Storage bucket에 대한 일반적인 메트릭도 아닙니다. 또한 논리적 배치를 뒤집고 있습니다: 백로그는 subscription(소스)에 속하고, 기록된 바이트는 bucket(목적지)에 속합니다. 이 선택지는 메트릭과 방향을 혼동하여 파이프라인 정체 감지에 신뢰할 수 없습니다.

오답입니다. 소스를 storage used bytes 증가로, 목적지를 Pub/Sub undelivered messages 감소로 제시하는데 이는 이 아키텍처에서 반대입니다. undelivered messages 감소는 일반적으로 subscriber가 처리 속도를 따라가거나(또는 따라잡는) 상태를 의미하며 정체가 아닙니다. 또한 storage used bytes 증가는 업스트림 백로그를 의미하지 않고 다운스트림 누적을 의미합니다.

문제 분석

핵심 개념: 이 문제는 Cloud Pub/Sub(푸시 subscription)에서 Cloud Run으로 스트리밍 수집 파이프라인을 운영 모니터링하고, 이후 Cloud Storage로 쓰기를 수행하는 상황을 테스트합니다. 목표는 업스트림 압력(백로그 증가)과 다운스트림 처리량(쓰기 바이트 감소)을 모두 관찰하여 정체(stall)를 감지하는 것입니다. 정답이 맞는 이유: 파이프라인이 10분 이상 정체되면 Pub/Sub는 계속 메시지를 수신하지만 Cloud Run은 같은 속도로 성공적으로 acknowledge(ack)하지 못합니다. 이는 Pub/Sub 백로그 증가로 나타나며, 시간이 지남에 따라 subscription/num_undelivered_messages 메트릭이 상승하는 것으로 가장 잘 표현됩니다. 동시에 Cloud Storage bucket은 새로운 배치 파일 수신이 멈추거나(또는 느려지므로) storage used bytes의 변화율(즉, 쓰기 처리량)이 0에 가까워지며 감소합니다. 따라서 올바른 알림 조합은 (1) subscription/num_undelivered_messages 증가에 대한 알림과 (2) storage used bytes 변화율 감소에 대한 알림입니다. 핵심 기능 / 모범 사례: 정렬(alignment) 및 지속(duration) 윈도우를 사용해 Cloud Monitoring 알림 정책을 구성합니다. 5분 단위 파일로 배치하므로, 정상적인 배치 간 공백을 허용하는 윈도우(예: 10분)로 정렬 및 평가한 뒤, 추가 지속 시간 동안 조건이 유지되도록 요구(또는 10분 롤링 윈도우 사용)하여 오탐을 줄여야 합니다. Pub/Sub의 경우, 10분 평가로 지속적인 증가를 감지하기 위해 num_undelivered_messages에 대한 변화율(derivative) 또는 임계값을 고려합니다. Cloud Storage의 경우, bytes-used 메트릭에 derivative aligner(바이트/초)를 적용하고 10분 이상 예상 최소값 아래로 떨어질 때 알림을 발생시킵니다. 이는 Google Cloud Architecture Framework의 reliability/operations 가이드에 부합합니다: 선행 지표(백로그)와 후행 지표(출력)를 함께 모니터링합니다. 흔한 오해: undelivered messages 감소는 정체가 아니라 정상 상태입니다. 또한 “source”와 “destination” 메트릭을 혼동하는 경우가 흔합니다: Pub/Sub 백로그는 업스트림에 속하고, storage bytes는 다운스트림에 속합니다. 또 다른 함정은 storage used bytes의 절대값(계속 증가만 함)에 알림을 거는 것으로, 변화율이 아니라면 의미 있는 감지가 어렵습니다. 시험 팁: 정체 감지를 위해 업스트림 큐/백로그 메트릭의 증가와 다운스트림 처리량 메트릭의 감소를 짝지으세요. 배칭을 사용할 때는(여기서는 5분) 알림 윈도우를 배치 간격보다 길게 잡아 노이즈를 줄이고, “감속” 감지를 위해 rate 기반 신호(derivative)를 선호하세요.

5
문제 5

Your fintech compliance team must store 12 TB of transaction audit files (about 200,000 objects per month) in a Cloud Storage Archive bucket with a 7-year retention requirement. Due to a zero-trust mandate, you must implement a Trust No One (TNO) model so that even cloud provider personnel cannot decrypt the data; uploads will be performed from an on-prem hardened host using gsutil, and only the internal security team may hold the encryption material. What should you do to meet these requirements?

Cloud KMS (CMEK)를 사용하고 gcloud kms encrypt로 로컬에서 암호화하더라도, Google Cloud KMS 내에 존재하고 Google Cloud에서 통제되는 키에 의존합니다. AAD를 Google Cloud 외부에 둘 수는 있지만, KMS 키 재료와 decrypt 기능은 여전히 Google Cloud 경계 내에 남습니다. 이는 일반적으로 제공업체 인력조차 복호화할 수 없어야 한다고 명시하는 엄격한 TNO 요구사항을 충족하지 못합니다.

Cloud KMS 키로 데이터를 암호화한 뒤 키를 파기하거나 회전하면 데이터는 사실상 복구 불가능해집니다(그리고 키가 파기되면 회전은 도움이 되지 않습니다). 또한 키가 Cloud KMS에 있었기 때문에, 암호화 재료를 내부 보안 팀만 보유해야 한다는 요구사항도 충족하지 못합니다. 이 옵션은 키 라이프사이클/회전을 TNO 모델과 혼동하고, 가용성/규정 준수 리스크를 초래합니다.

gsutil과 함께 사용하는 CSEK는 올바른 메커니즘이지만, 원시 CSEK를 Secret Manager 또는 Memorystore에 저장하는 것은 암호화 재료를 내부 보안 팀만 보유하고 Google Cloud 외부에 유지해야 한다는 요구사항을 위반합니다. Secret Manager는 Google-managed 서비스이므로, 그곳에 키를 두면 TNO의 “cloud provider personnel조차 복호화할 수 없음” 의도를 깨뜨립니다.

gsutil에 대해 구성된 CSEK를 Google Cloud 외부에 독점적으로 저장하는 방식이 TNO에 가장 부합합니다. 원시 암호화 키는 Google Cloud에 영구 저장되지 않으며, 내부 보안 팀만 이를 통제합니다. Cloud Storage는 동일한 키가 제공되지 않으면 객체를 복호화할 수 없습니다. 또한 규정 준수 보관 요구사항을 충족하기 위해 Archive bucket과 7년 retention policy (Bucket Lock)를 함께 적용하십시오.

문제 분석

핵심 개념: 이 문제는 Cloud Storage 암호화 모델과, Google(제공업체 인력 포함)이 데이터를 복호화할 수 없어야 하는 “Trust No One”(TNO) / zero-trust 요구사항을 어떻게 충족하는지 평가합니다. Google Cloud에서 이 요구사항은 원시 암호화 키 재료(raw encryption key material)를 클라이언트 측에서 제어하는 방식, 즉 Cloud Storage와 함께 사용하는 Customer-Supplied Encryption Keys (CSEK)로 충족됩니다. 정답인 이유: 옵션 D는 gsutil 업로드에 대해 CSEK를 구성하고, 원시 키를 Google Cloud 외부에서 내부 보안 팀의 통제 하에(예: on-prem HSM/offline vault) 독점적으로 보관합니다. CSEK를 사용하면 Cloud Storage는 객체를 암호화/복호화하기 위해 일시적으로만 키를 전달받으며, Google은 키를 저장하지 않습니다. 키가 Google Cloud 서비스에 영구 저장되지 않고 엄격히 통제된다면, 제공업체 인력은 동일한 원시 키가 있어야 복호화가 가능하므로 저장된 객체를 복호화할 수 없습니다. 주요 기능 / 구성 / 모범 사례: - 규정 준수를 위한 불변성을 강제하기 위해 Cloud Storage Archive class bucket과 7년 retention policy (Bucket Lock)를 사용합니다. - 강화된 on-prem 호스트에서 .boto CSEK 구성(또는 명령별 키 지정)으로 gsutil을 사용합니다. - 원시 CSEK를 Google Cloud 외부(on-prem HSM, offline vault)에 저장 및 관리하고, 엄격한 접근 제어, 직무 분리, 키 에스크로/백업 절차를 적용합니다. - 운영 리스크를 이해합니다: CSEK를 분실하면 데이터는 영구적으로 복구 불가능합니다. 안전한 키 라이프사이클 프로세스를 구현하십시오. 흔한 오해: - CMEK (Cloud KMS)는 “customer-managed”이지만 “customer-supplied”는 아닙니다. Google Cloud 서비스는 KMS decrypt 작업을 요청할 수 있으며, 이는 제공업체 인력이 복호화할 수 없어야 하는 엄격한 TNO를 충족하지 못합니다. - CSEK를 Secret Manager 또는 Google-managed 저장소에 보관하면, 암호화 재료가 제공업체 경계 내부에 존재하게 되어 TNO 요구사항을 훼손합니다. 시험 팁: - “Google조차 복호화할 수 없어야 함”이라면, client-side encryption 또는 Google Cloud 외부에 키를 보관하는 CSEK를 찾으십시오. - 장기 규정 준수 보관을 위해 storage class 선택을 retention policy + Bucket Lock과 함께 적용하십시오. - TNO에 대해 Cloud KMS를 언급하는 답안을 경계하십시오. KMS는 규정 준수와 키 통제에 매우 유용하지만, 외부에서 보유하는 원시 키와 비교하면 가장 엄격한 “provider cannot decrypt” 모델은 아닙니다.

이동 중에도 모든 문제를 풀고 싶으신가요?

Cloud Pass를 다운로드하세요 — 모의고사, 학습 진도 추적 등을 제공합니다.

6
문제 6

Your marketing analytics team needs to run a weekly PySpark batch job on Google Cloud Dataproc to score customer churn propensity using input data in Cloud Storage and write results to BigQuery; testing shows the workload completes in about 35 minutes on a 16-worker n1-standard-4 cluster when triggered every Friday at 02:00 UTC; you are asked to cut infrastructure costs without rewriting the job or changing the schedule—how should you configure the cluster for cost optimization?

Dataflow로 마이그레이션은 일부 파이프라인에서 비용 효율적일 수 있지만, 일반적으로 작업 재작성(또는 변경)이 필요합니다(Dataproc의 PySpark는 변경 없이 Dataflow로 직접 이식할 수 없음). 문제는 재작성이나 스케줄 변경을 명시적으로 금지합니다. 또한 Dataflow는 다른 실행 모델(Beam)과 운영 방식이므로, “클러스터 구성” 관점의 비용 최적화에 대한 최선의 답이 아닙니다.

Dataproc worker 노드에서 Preemptible(Spot) VM은 컴퓨팅 비용을 크게 줄이며 내결함성 배치 처리를 위해 설계되었습니다. master는 일반 VM으로 유지하고 대부분의 worker를 preemptible로 만들어 절감을 극대화하세요. worker가 회수되면 Spark는 작업을 재스케줄링할 수 있으며, 주 1회 35분 배치 작업은 코드나 타이밍을 변경하지 않고도 할인된 중단 가능 용량에 매우 잘 맞습니다.

더 높은 메모리 머신 타입은 실행 시간을 줄일 수 있지만, 시간당 VM 비용을 증가시키며 이미 35분 내에 완료되는 작업의 총비용을 낮춘다는 보장이 없습니다. 이 선택지는 비용이 아니라 성능을 최적화합니다. 작업이 메모리 병목이라는 근거와 더 적은 노드로 운영할 수 있다는 근거가 없다면, 더 큰 머신으로 전환하는 것은 위험하고 종종 더 비싼 변경입니다.

local SSD는 shuffle이 많은 Spark 워크로드에서 I/O 성능을 개선할 수 있지만, 비용이 추가되며 Cloud Storage에서 읽고 BigQuery로 쓰는 짧은 주간 배치에서는 필요하지 않습니다. Dataproc 작업은 프리미엄 스토리지를 추가하는 것보다 컴퓨팅 가격 최적화에서 더 큰 이점을 얻는 경우가 많습니다. 이는 성능 튜닝 옵션이지, 가장 직접적인 비용 절감 레버가 아닙니다.

문제 분석

핵심 개념 - 이 문제는 예약된 비대화형 Dataproc 배치 워크로드에 대한 비용 최적화를 테스트합니다. 핵심 레버는 Dataproc 클러스터 라이프사이클(일시적(ephemeral) vs 장기 실행(long-running)), VM 가격 모델(standard vs Spot/Preemptible), 그리고 컴퓨팅 지출을 줄이면서 동일한 작업 코드와 스케줄을 유지하는 것입니다. 정답이 맞는 이유 - Dataproc worker 노드에 preemptible(Spot) VM을 사용하는 것은 내결함성이 있는 배치 처리에서 컴퓨팅 비용을 줄이는 전형적인 방법입니다. 약 35분 실행되는 주간 작업은 클러스터가 작업 시간 창에만 존재하고 재시도를 허용할 수 있으므로 매우 적합합니다. Dataproc/Spark는 executor 손실을 처리할 수 있으며, preemptible worker가 회수되면 Spark는 남아 있는 executor에서 작업을 다시 스케줄링할 수 있습니다. 비용 절감 효과는 on-demand VM 대비 상당할 수 있고, PySpark 작업을 다시 작성하거나 금요일 02:00 UTC 스케줄을 변경할 필요가 없습니다. 핵심 기능 / 모범 사례 - standard(비-preemptible) master 노드와 대부분 또는 전체 worker 노드를 preemptible로 구성한 Dataproc 클러스터를 설정합니다. 선택적으로 과도한 churn 위험을 줄이기 위해 소수의 비-preemptible worker를 유지하고, 허용된다면 autoscaling policies를 활성화할 수 있습니다(여기서는 필수는 아님). 유휴 시간에 대한 비용 지불을 피하기 위해 ephemeral clusters(create cluster, submit job, delete cluster)를 사용하세요. 이는 최대 절감을 위해 preemptible workers와 함께 자주 사용됩니다. Architecture Framework 관점에서 이는 비용 최적화(할인 리소스 사용)와 Spark의 분산 재시도 동작을 통한 신뢰성 유지에 부합합니다. 흔한 오해 - Dataflow로 마이그레이션하면 운영 오버헤드는 줄일 수 있지만, Dataproc의 PySpark는 Dataflow로 재구현 없이 lift-and-shift가 불가능하므로 “재작성 금지” 제약을 위반합니다. 더 높은 메모리 머신 타입을 선택하거나 local SSD를 추가하면 성능은 개선될 수 있지만, 일반적으로 시간당 비용이 증가하며 35분 작업의 총비용을 줄인다는 보장이 없습니다. 이는 지출이 아니라 속도를 최적화하는 선택입니다. 시험 팁 - Dataproc 배치 작업에서는 먼저 다음을 확인하세요: (1) ephemeral clusters, (2) preemptible/Spot workers, (3) right-sizing. preemptibles는 워크로드가 재시작 가능하고 시간 제한이 있을 때 가장 적합합니다. master는 항상 standard VM으로 유지하세요. preemptibles는 언제든 회수될 수 있으므로 워크로드가 중단을 허용해야 합니다. Spark는 일반적으로 이를 처리할 수 있지만, 매우 타이트한 SLA 또는 비-idempotent 부작용이 있는 경우 주의가 필요할 수 있습니다.

7
문제 7

Your factory collects 50 MB/s of PLC telemetry into an on-premises Apache Kafka cluster (3 brokers, 6 topics with 48 total partitions, 7-day retention), and you must replicate these topics to Google Cloud so raw events land in Cloud Storage and can later be analyzed in BigQuery with end-to-end replication lag under 3 minutes; due to strict change control you must avoid deploying any Kafka Connect plugins on-premises and the team prefers a mirroring-based approach for replication; what should you do?

정답. MirrorMaker 2는 온프레미스에 Kafka Connect plugins를 요구하지 않는 mirroring 기반 replication 접근을 제공합니다. Google Cloud에서 client로 실행되어 온프레미스에서 consume하고 cloud Kafka로 produce할 수 있습니다. 복제 이후 Dataflow 또는 Dataproc이 cloud Kafka cluster에서 안정적으로 consume하여 raw event를 Cloud Storage에 쓸 수 있습니다. 이 설계는 적절한 sizing, partition-parallelism, 저지연 연결(VPN/Interconnect)을 통해 3분 미만 lag 목표를 충족합니다.

오답. Pub/Sub Kafka connector는 Kafka Connect connectors(source/sink)로 구현되며 Kafka Connect runtime과 connector 배포가 필요합니다. 이는 mirroring 선호와 맞지 않고 운영 복잡성을 증가시킵니다. 또한 cloud에 배포하더라도 불필요한 Kafka Connect 계층을 포함한 뒤 Kafka에서 읽어 Cloud Storage에 쓰는 것을 제안하므로, Pub/Sub connector 사용이 목표 대비 중복되고 혼란스럽습니다.

오답. 온프레미스 Kafka cluster에 Pub/Sub Kafka connector 설치를 명시적으로 요구하므로, 온프레미스에 Kafka Connect plugins 배포를 피해야 하는 엄격한 change control 요구사항을 위반합니다. 또한 Kafka에서 Pub/Sub로 데이터를 이동하는 방향에서 Pub/Sub를 Source connector로 구성하는 것은 방향이 반대입니다. 일반적으로 Kafka record를 Pub/Sub로 publish하려면 Sink connector를 사용합니다.

오답. Kafka-to-Pub/Sub에서 Pub/Sub를 Sink connector로 사용하는 방향 자체는 맞지만, 여전히 온프레미스에 Pub/Sub Kafka connector(Kafka Connect plugin)를 설치하고 운영해야 하므로 요구사항에 의해 금지됩니다. 또한 mirroring 기반 Kafka topic replication 접근에서 벗어나며, raw landing 대상이 명시적으로 Cloud Storage인 상황에서 불필요한 Pub/Sub semantics와 quota를 도입합니다.

문제 분석

핵심 개념: 이 문제는 운영 제약(온프레미스에 Kafka Connect plugins 설치 불가)과 낮은 RPO/lag 목표를 전제로, 온프레미스 Kafka에서 Google Cloud로의 하이브리드 ingestion/replication 패턴을 테스트합니다. 또한 올바른 landing zone(Cloud Storage)과 확장 가능한 consumer 계층(Dataflow/Dataproc)을 선택하는지도 평가합니다. 정답이 맞는 이유: 옵션 A는 모든 제약을 충족합니다. mirroring 기반 접근(예: Kafka MirrorMaker 2)을 사용해 온프레미스 Kafka의 topic을 Google Cloud(Compute Engine)에서 실행되는 Kafka cluster로 복제합니다. MirrorMaker 2는 Kafka client application으로 동작하며 cloud 측에 배포할 수 있으므로, 온프레미스에 Kafka Connect plugins를 설치하지 않아도 됩니다(엄격한 change control). 데이터가 cloud Kafka cluster에 들어오면 Dataflow(streaming) 또는 Dataproc(Spark)로 consume하여 raw event를 Cloud Storage에 쓸 수 있습니다. 적절한 네트워킹(Cloud VPN/Interconnect), sizing, partition-parallelism을 갖추면 end-to-end lag 3분 미만을 달성할 수 있습니다. 주요 기능 / 구성: - MirrorMaker 2는 offset translation과 consumer group replication을 포함한 topic replication을 지원합니다. replication factor, fetch size, parallelism을 튜닝하여 ~50 MB/s를 처리합니다. - 가용성을 위해 cloud Kafka cluster를 여러 zone에 걸쳐 실행하고, partition(48)을 consumer parallelism과 정렬합니다. - Dataflow streaming templates 또는 custom pipeline을 사용해 exactly-once/at-least-once semantics를( sink 설계에 따라) 제공하고, window 기반 file write를 Cloud Storage로 수행합니다. - Cloud Storage를 변경 불가능한 raw landing zone으로 사용한 뒤, 이후 BigQuery로 로드합니다(batch load 또는 external table). 이는 Google Cloud Architecture Framework의 원칙인 ingestion과 analytics의 decoupling에 부합합니다. 흔한 오해: Pub/Sub Kafka connectors는 Kafka Connect plugins입니다. 옵션 C와 D는 “온프레미스 plugins 금지” 제약을 위반합니다. 옵션 B도 Kafka Connect에 의존하며(또한 connector의 방향/사용을 잘못 설명), mirroring 선호를 충족하지 못합니다. 시험 팁: “온프레미스에 Kafka Connect plugins 배포를 피하라”와 “mirroring을 선호한다”를 보면, cluster 외부에서 실행되는 MirrorMaker 2(또는 동등한 replication)를 떠올리세요. 또한 관심사를 분리하세요: 먼저 replicate/ingest하고, raw 데이터를 Cloud Storage에 landing한 다음, BigQuery에서 분석합니다. 항상 connector 유형(source vs sink)과 설치 위치를 검증하세요.

8
문제 8

Your company runs a private Google Kubernetes Engine (GKE) cluster in a custom VPC in us-central1 using a subnetwork named analytics-subnet; due to the organization policy constraints/compute.vmExternalIpAccess, all nodes have only internal IPs with no external IPs. A nightly Kubernetes Job must download 500 MB CSV files from Cloud Storage and load transformed results into BigQuery using the BigQuery Storage Write API, but pods fail with DNS resolution/connection errors when contacting storage.googleapis.com and bigquery.googleapis.com. What should you do to allow access to Google APIs while keeping the nodes on internal IPs only?

Network tag와 firewall rule은 트래픽을 허용하거나 차단할 수는 있지만, node에 external IP가 없고 NAT/PGA도 없을 때 Google APIs에 도달하기 위한 경로를 제공하지는 않습니다. 또한 tag는 Google API 접근을 선택적으로 활성화하는 메커니즘도 아닙니다. 이 선택지는 authorization(firewall)과 connectivity(routing/egress)를 혼동하고 있습니다.

“Cloud Storage 및 BigQuery IP range”로의 egress firewall rule을 만드는 것은 올바른 해결책이 아닙니다. Google APIs는 일반적으로 anycast VIP를 사용하고 IP가 변경될 수 있어 IP allowlist 유지가 취약합니다. 더 중요한 점은, egress rule을 관대하게 설정하더라도 internal-only node는 해당 endpoint에 도달하기 위한 유효한 egress 메커니즘(Private Google Access 또는 Cloud NAT)이 여전히 필요하다는 것입니다.

VPC Service Controls perimeter는 perimeter 외부에서 지원되는 Google service에 대한 접근을 제한하여 데이터 유출 위험을 줄이는 데 도움이 됩니다. 하지만 private node에서 Google APIs로의 기본적인 network reachability 문제를 해결하지는 못합니다. Private Google Access(또는 NAT/PSC) 없이는 여전히 연결 실패가 발생할 수 있습니다. 이는 egress connectivity 기능이 아니라 보안 경계 기능입니다.

analytics-subnet에서 Private Google Access를 활성화하는 것은 internal-only GKE node(및 pod)가 external IP 없이 Cloud Storage 및 BigQuery 같은 Google APIs에 접근하도록 하는 올바른 방법입니다. cluster를 private로 유지하면서 Google API front end로 가는 Google-internal route를 제공합니다. 이는 org policy 제약을 만족하면서 연결 오류를 직접적으로 해결합니다.

문제 분석

핵심 개념: 이 문제는 private GKE 네트워킹과 external IP가 없는 VM/pod의 워크로드가 Google APIs(Cloud Storage 및 BigQuery)에 어떻게 접근하는지를 테스트합니다. 핵심 기능은 subnet에서의 Private Google Access(PGA)로, internal IP 주소만 가진 리소스가 Google의 네트워크를 통해 Google APIs 및 서비스에 접근할 수 있게 해줍니다. 정답이 맞는 이유: private GKE cluster에서 node가 internal IP만 가지고(그리고 org policy가 external IP를 차단하는 경우), pod의 egress는 일반적으로 node의 네트워크를 통해 나갑니다. Cloud NAT 또는 Private Google Access가 없으면 public Google API endpoint(예: storage.googleapis.com, bigquery.googleapis.com)로의 호출은 public internet으로 나갈 유효한 egress 경로가 없어 실패할 수 있습니다. node가 사용하는 특정 subnet(analytics-subnet)에서 Private Google Access를 활성화하면, internal-only node(따라서 pod)가 external IP를 할당하지 않고도 Google의 front end로 internal routing을 사용해 Google APIs에 도달할 수 있습니다. 주요 기능 / 구성: - analytics-subnet에서 Private Google Access 활성화(subnet-level 설정). - DNS resolution이 동작하는지 확인(Cloud DNS 기본 설정이면 충분); 핵심은 DNS 자체가 아니라 routing/egress입니다. - 표준 Google API hostname을 사용; PGA는 application code 변경 없이 접근을 처리합니다. - 이는 필요한 연결성을 유지하면서 public 노출을 최소화하는 Google Cloud Architecture Framework 보안 원칙과 일치합니다. 흔한 오해: - Firewall rule(태그 포함)은 internet 또는 Google API 도달성을 만들어주지 않습니다. 이미 route가 있는 트래픽에 대해 permit/deny만 합니다. - Google APIs에 대해 “IP range 허용”은 실용적이지 않습니다. 많은 Google API는 anycast front end로 제공되고 IP가 변경될 수 있으며, route(NAT/PGA) 없이는 egress를 허용해도 도움이 되지 않습니다. - VPC Service Controls는 데이터 유출(data exfiltration) 통제와 service perimeter를 위한 것이지, private node에서의 network egress를 제공하는 기능이 아닙니다. 시험 팁: external IP가 없는 private GKE/VM의 경우: - Google APIs에 도달하려면: Private Google Access를 활성화(또는 더 고급 설계에서는 Google APIs용 Private Service Connect 사용). - public internet/비-Google endpoint에 도달하려면: Cloud NAT 사용. 문제에서 “node를 internal IP only로 유지”라고 명시하고 목적지가 Google APIs라면, Private Google Access가 정석 답안입니다.

9
문제 9

Your ride-hailing platform operates a Standard Tier Memorystore for Redis instance (15 GB capacity, ~80k QPS, multi-zone production deployment with 12-hour key TTLs), and you need to run the most realistic disaster recovery drill by triggering a Redis failover while guaranteeing zero impact on production data (no data loss); what should you do?

정답입니다. sandbox project에서 훈련을 수행하면 프로덕션 데이터에 대한 어떤 위험도 제거하면서도 동일한 Standard Tier multi-zone failover 메커니즘을 검증할 수 있습니다. limited-data-loss mode를 사용하면 훈련을 현실적으로(일반적이고 더 안전한 failover 경로 사용) 수행하면서 sandbox 내 손실을 최소화할 수 있습니다. 이는 “가장 현실적인 DR 훈련”과 “프로덕션 데이터에 대한 영향 0 보장”을 가장 잘 만족합니다.

오답입니다. sandbox project는 여전히 프로덕션 데이터를 보호하지만, force-data-loss는 failover 중 최근 write를 잃을 가능성을 의도적으로 높입니다. 이는 프로덕션에서의 운영 방식과 덜 유사한 훈련이 되며(비록 sandbox 데이터만 영향받더라도) “no data loss” 의도와도 충돌합니다. 현실적이고 더 안전한 failover 테스트에는 limited-data-loss가 적절한 mode입니다.

오답입니다. 이는 프로덕션에서 중단을 유발하는 작업을 수행하므로, 프로덕션 데이터에 대한 영향 0을 보장해야 한다는 요구사항을 위반합니다. replica를 추가해도 replication이 비동기이기 때문에 데이터 손실 가능성을 제거하지 못하며, force-data-loss는 위험을 더 키웁니다. 또한 이 선택지는 엄격한 “no data loss” 및 “no production impact” 제약을 충족하지 못하면서 운영 복잡성과 비용만 증가시킵니다.

오답입니다. limited-data-loss mode를 사용하더라도 프로덕션에서 manual failover를 시작하면 일부 데이터 손실(비동기 replication) 가능성이 여전히 존재하고, 일시적인 클라이언트 영향(연결 재설정, 짧은 가용성 저하)도 발생할 수 있습니다. 문제는 프로덕션 데이터에 대한 영향 0을 보장해야 하며, Standard Tier Redis에서 어떤 프로덕션 failover 작업으로도 이를 확실히 보장할 수 없습니다.

문제 분석

핵심 개념: 이 문제는 Memorystore for Redis (Standard Tier)의 고가용성 동작과 수동 failover 제어, 특히 failover 중 “data protection mode” 선택지를 테스트합니다. 또한 프로덕션 데이터 무결성을 위험에 빠뜨리지 않으면서 재해 복구(DR) 훈련을 수행하는 방법도 테스트합니다. 정답이 맞는 이유: 프로덕션 데이터에 대한 영향이 0(데이터 손실 없음)임을 보장하려면, 프로덕션 인스턴스에서 failover를 트리거하면 안 됩니다. “limited-data-loss”조차 “zero data loss”가 아닙니다. 이는 위험을 줄이지만, replication이 비동기이므로 failover 시점에 일부 write가 replica에 아직 도달하지 않았을 수 있어 손실이 전혀 없다고 보장할 수 없습니다. 프로덕션 영향이 없음을 보장하면서도 가장 현실적인 훈련은, 프로덕션 특성(tier, region, multi-zone, 가능하다면 size/QPS)을 미러링하는 Standard Tier 인스턴스를 sandbox project에 생성한 뒤 limited-data-loss mode로 수동 failover를 시작하는 것입니다. 이렇게 하면 운영 절차, 모니터링, 클라이언트 재연결 동작, failover 메커니즘을 실제처럼 검증하면서도 잠재적 데이터 손실을 non-production으로 격리할 수 있습니다. 주요 기능 및 모범 사례: Standard Tier는 zone 간 primary/replica를 제공하며 automatic failover를 지원합니다. 테스트/유지보수를 위한 manual failover도 지원됩니다. Data protection mode에는 다음이 포함됩니다: - Limited-data-loss: 가장 최신 상태의 replica로 failover를 시도하여 잠재적 손실을 최소화합니다. - Force-data-loss: 최근 write 손실 가능성이 커지더라도 failover를 강제로 수행합니다. Google Cloud Architecture Framework의 복원력 원칙에 따른 모범 사례는 blast radius를 제한(별도 project/environment 사용)하면서 DR을 정기적으로 테스트하고, RPO/RTO 가정을 검증하는 것입니다. TTL 비중이 큰 ephemeral 데이터의 Redis라 하더라도, 요구사항에 “no data loss”가 명시되어 있다면 이를 엄격한 요구로 취급해야 합니다. 흔한 오해: 자주 있는 함정은 “limited-data-loss”를 “no data loss”로 착각하여 프로덕션에서 훈련을 수행하는 것입니다. 또 다른 오해는 replica를 추가하면 비동기 replication이라는 근본 동작이 바뀐다고 생각하는 것입니다. replica 추가는 가용성/읽기 스케일링에는 도움이 될 수 있지만, zero-loss failover를 보장하지는 않습니다. 시험 팁: 문제에서 “guarantee zero impact on production data”라고 하면, 상태를 변경하거나 RPO를 위험에 빠뜨릴 수 있는 프로덕션 작업은 피해야 합니다. 아키텍처를 복제한 sandbox/staging 훈련을 우선 선택하세요. 또한 기억할 점: Standard Tier Redis failover는 동기식, zero-RPO 메커니즘이 아닙니다. 요구사항이 절대적인 zero loss라면, 유일하게 안전한 방법은 프로덕션에서 failover를 하지 않는 것(또는 zero-RPO 의미론을 지원하는 시스템으로 재설계하는 것)입니다.

10
문제 10

Your team operates a 7-node RabbitMQ ingress tier (~50,000 msgs/sec) and a 5-node TimescaleDB cluster for durable storage; both clusters run on Compute Engine VMs with 2 TB Persistent Disks per node spread across three zones. Compliance mandates that all data at rest be encrypted with keys your team can create, rotate every 90 days, and destroy on demand, without requiring changes to the application code. What should you do?

오답입니다. Compute Engine의 기본 저장 시 암호화는 팀이 생성하고 제어하는 키가 아니라 Google-managed keys를 사용합니다. 전용 service account는 암호화 키 소유/관리 모델을 바꾸지 않습니다. 따라서 customer-controlled 키 생성, 로테이션 정책 강제, 요청 시 파기라는 컴플라이언스 요구사항을 충족하지 못합니다. 또한 identity/access control을 cryptographic key management와 혼동하고 있습니다.

정답입니다. Compute Engine Persistent Disks에 대해 Cloud KMS + CMEK를 사용하면 customer-managed keys로 인프라 수준의 저장 시 암호화를 제공하며, 애플리케이션 코드 변경이 필요 없습니다. 키를 생성하고, 로테이션(예: 90일마다)을 설정하며, key version을 disable/destroy하여 컴플라이언스를 충족할 수 있습니다. zone 전반에서 KMS 키와 디스크 간 regional alignment 및 적절한 IAM(KMS encrypter/decrypter)을 보장하세요.

오답입니다. 로컬에서 키를 생성해 “KMS에 업로드”하는 것은 Persistent Disks를 암호화하는 표준 접근이 아닙니다. Cloud KMS는 key material import를 지원하지만, 여전히 인스턴스에서 데이터를 수동으로 암호화하는 방식이 아니라 CMEK 통합을 사용합니다. OS/app 계층에서 수동으로 암호화하면 운영 복잡성이 증가하고, RabbitMQ/TimescaleDB가 데이터를 읽고/쓰는 방식에 변경이 필요할 가능성이 큽니다.

오답입니다. 애플리케이션 API 호출에서 KMS 키를 직접 참조하는 것은 애플리케이션 수준 암호화(envelope encryption)를 설명하는 것으로, 코드 변경이 필요하고 암호화/복호화 로직, 성능, 키 접근 패턴을 신중히 다뤄야 합니다. 요구사항에 “애플리케이션 코드 변경 없이”라고 명시되어 있으므로 부적합합니다. VM 디스크의 경우 CMEK는 애플리케이션 호출이 아니라 인프라 리소스 수준에서 구성합니다.

문제 분석

핵심 개념: 이 문제는 Google Cloud 인프라에서 데이터 저장 시 암호화를 위해 Cloud KMS를 사용한 Customer-Managed Encryption Keys (CMEK)를 테스트하며, 특히 Compute Engine Persistent Disk에 초점을 둡니다. 또한 CMEK를 기본 Google-managed encryption 및 애플리케이션 수준 암호화와 암묵적으로 대비합니다. 정답인 이유: 컴플라이언스 요구사항은 (1) 저장 시 암호화, (2) 팀이 생성할 수 있는 키, (3) 90일마다 로테이션, (4) 필요 시 즉시 파기, (5) 애플리케이션 코드 변경 없음입니다. CMEK로 Persistent Disk를 암호화하면 RabbitMQ 또는 TimescaleDB를 수정하지 않고도 이 모든 요구사항을 충족합니다. CMEK에서는 Google이 스토리지 계층에서 디스크 데이터의 암호화/복호화를 투명하게 관리하고, 사용자는 Cloud KMS에서 키 라이프사이클을 제어합니다. KMS 키를 로테이션(또는 사용되는 key version을 변경)하는 작업은 스케줄에 따라 수행할 수 있으며, key version을 destroy/disable하면 데이터를 읽을 수 없게 만들어 “요청 시 파기” 요구사항을 충족할 수 있습니다. 주요 기능 / 구성 / Best Practices: - 디스크와 동일한 region에 Cloud KMS key ring/key를 사용합니다(Compute Engine CMEK는 regional alignment가 필요). multi-zone 배포의 경우 Regional Persistent Disks를 사용하거나, 각 zonal disk가 해당 region의 CMEK 키를 사용하도록 보장합니다. - Compute Engine service agent/service account에 키에 대한 필요한 KMS 권한(예: cloudkms.cryptoKeyEncrypterDecrypter)을 부여합니다. - Cloud KMS rotation schedules 및 해당되는 경우 새 key version으로 재암호화/사용 전환을 위한 운영 절차를 통해 90일 로테이션을 구현합니다. - 가용성을 고려합니다: KMS를 사용할 수 없거나 권한이 회수되면 disk attach/start 작업이 실패할 수 있습니다. 이는 의도된 통제 수단이므로, 이에 맞게 운영 runbook을 설계합니다(Google Cloud Architecture Framework: security, reliability, operational excellence). 흔한 오해: - “기본 저장 시 암호화”는 Google-managed keys를 사용하므로, customer-managed keys가 필요한 요구사항을 충족하기에 충분하지 않습니다. - “로컬 키를 KMS에 업로드”는 KMS를 오해한 것입니다: 일반적으로 KMS에서 키를 생성(또는 key material을 import)하지만, 그 다음 VM 디스크를 사용자가 직접 수동으로 암호화하지는 않습니다. - “애플리케이션 API 호출에서 키를 참조”는 애플리케이션 수준 envelope encryption을 의미하며, ‘코드 변경 없음’ 제약을 위반합니다. 시험 팁: “애플리케이션 변경 없음” + “키 로테이션/파기” + “GCE 디스크의 저장 데이터”를 보면, Persistent Disk에 대해 Cloud KMS의 CMEK를 떠올리세요. 또한 regional 제약과 IAM 요구사항을 확인하고, key version을 disable/destroy하면 암호화된 리소스에 대한 접근을 의도적으로 차단할 수 있음을 기억하세요.

이동 중에도 모든 문제를 풀고 싶으신가요?

Cloud Pass를 다운로드하세요 — 모의고사, 학습 진도 추적 등을 제공합니다.

11
문제 11

Your company runs a real-time vehicle telemetry system on Google Cloud, where a Cloud Dataflow streaming job consumes events from a Cloud Pub/Sub topic 'telemetry-prod' via subscription 'telemetry-prod-v1' at an average rate of 25,000 messages per minute with a 60-second ack deadline. You must roll out a new version of the pipeline within the next hour that changes the keying and windowing logic in a way that is incompatible with the current job, and you cannot pause event producers; the business requires zero data loss during the cutover. What should you do to deploy the new pipeline without losing data?

Dataflow job을 drain 하면 새 메시지 pull을 중단하고 종료 전에 in-flight 요소 처리를 완료하려고 시도합니다. 하지만 이는 새 pipeline이 기존 pipeline과 호환되지 않는다는 요구사항(키잉/윈도잉/state 변경)을 해결하지 못합니다. 호환되지 않는 streaming graph/state 변경은 항상 in-place 업데이트가 가능한 것이 아니며, draining만으로는 병렬의 손실 0 cutover 경로를 제공하지 않습니다.

Transform mapping JSON은 특정 Dataflow 업데이트 시나리오와 연관되지만, state 및 집계 정확도에 영향을 주는 서로 다른 키잉/윈도잉 로직 같은 임의의 호환되지 않는 의미적 변경을 일반적으로 가능하게 하지는 않습니다. 업데이트가 수락되더라도 state 비호환성과 잘못된 결과의 위험이 있습니다. 또한 이 옵션은 중단 없는 안전한 blue/green 배포라는 운영 요구사항도 해결하지 못합니다.

동일한 Pub/Sub subscription에 대해 두 개의 Dataflow job을 실행하면 공유 backlog의 메시지를 두 job이 경쟁하게 됩니다. Pub/Sub은 subscriber들에 메시지를 분배하므로, 기존 job도 모든 메시지를 보지 못하고 새 job도 모든 메시지를 보지 못합니다. cutover/cancellation 동안 메시지가 미처리로 남거나 일관되지 않게 처리되어, 데이터 손실 0 요구사항을 위반할 수 있습니다.

동일한 topic에 새 Pub/Sub subscription을 생성하면 자체 ack 상태를 가진 독립적인 delivery 스트림이 제공됩니다. 기존 job이 원래 subscription에서 계속 소비하는 동안 새 subscription에서 새 Dataflow job을 시작할 수 있으므로, 경쟁 소비자로 인해 메시지가 유실되지 않도록 보장합니다. 검증 후 기존 job을 cancel/drain 하여 cutover를 완료하고, 겹침 구간은 idempotent/versioned sink를 사용해 관리합니다.

문제 분석

핵심 개념: 이 문제는 Cloud Pub/Sub에서 소비하는 Cloud Dataflow streaming pipeline에 대한 안전한 배포 패턴을 테스트하며, 특히 Pub/Sub subscription이 delivery/ack 상태를 어떻게 추적하는지와 Dataflow job 업데이트/드레이닝이 호환되지 않는 pipeline 변경과 어떻게 상호작용하는지를 다룹니다. 정답이 맞는 이유: 호환되지 않는 pipeline 변경(키잉/윈도잉 변경)을 배포하면서 데이터 손실을 0으로 달성하려면, 기존 pipeline의 메시지 acknowledgment 상태에 간섭하지 않으면서 새 pipeline을 병렬로 실행해야 합니다. Pub/Sub delivery 상태는 topic이 아니라 subscription 단위로 유지됩니다. 동일한 topic에 새 subscription을 만들면, 새 Dataflow job은 그 시점부터 독립적인 메시지 스트림을 수신하고, 기존 job은 종료할 때까지 원래 subscription에서 계속 메시지를 소비하고 ack 처리합니다. 이는 기존 job에서 메시지를 “가로채는” 일을 방지하고, 동일 subscription에서 경쟁 소비자로 인해 발생하는 공백을 예방합니다. 새 job이 정상이며 올바른 출력을 생성하는지 검증한 뒤, 기존 job을 cancel/drain 하면 됩니다. 주요 기능 / 모범 사례: - Pub/Sub fan-out은 동일한 topic에 여러 subscription을 생성하여 달성하며, 각 subscription은 게시된 각 메시지의 사본을 수신합니다. - Subscription은 acknowledgment의 단위이며, 하나의 subscription에 여러 subscriber가 붙으면 backlog를 공유하고 비결정적 분배가 발생할 수 있습니다. - 호환되지 않는 Dataflow 변경의 경우, in-place 업데이트보다 blue/green(병렬) 배포를 선호합니다. - ordering/duplication을 고려하세요: 병렬 subscription은 두 pipeline이 동일한 sink에 쓰는 경우 downstream 중복 쓰기를 유발할 수 있습니다. idempotent writes, versioned outputs, 또는 제어된 cutover로 완화하세요. 흔한 오해: 많은 사람들이 “in-place 업데이트 + drain”이 어떤 변경에도 손실이 없다고 보장한다고 가정합니다. Draining은 in-flight 작업을 마치는 데 도움이 되지만, 호환되지 않는 graph/state 변경은 종종 in-place로 안전하게 적용할 수 없습니다. 또 다른 오해는 동일 subscription에서 두 번째 job을 시작하는 것이 안전하다는 것인데, 이는 메시지 분배를 바꾸고 cutover 전환 동안 모든 메시지가 정확히 한 번 처리되었는지 보장하기 어렵게 만듭니다. 시험 팁: - 기억하세요: Topic = publish 스트림; Subscription = delivery/ack 커서. 손실 0 cutover는 일반적으로 새 subscription(fan-out) 또는 replay 가능한 소스가 필요합니다. - streaming Dataflow의 경우, 깔끔한 cutover를 위해 별도 subscription으로 blue/green을 사용하고, 전환 중 중복을 허용하도록 sink를 설계하세요. - ack deadline/backlog를 모니터링하세요: 25,000 msg/min 및 60s ack deadline 조건에서, 겹치는 기간 동안 어느 subscription도 무한히 backlog가 쌓이지 않도록 충분한 Dataflow worker/autoscaling을 보장하세요.

12
문제 12

ByteFarm, an agri-tech startup, runs a Cloud Dataflow streaming pipeline that ingests telemetry from 75,000 greenhouse sensors via Pub/Sub and writes aggregated metrics to BigQuery. To prepare for seasonal peaks where throughput can triple for up to 4 hours, you enabled autoscaling and set the initial number of workers to 25. During a load test, the job stops scaling at 40 workers and backlog grows; you want Dataflow to be able to scale compute higher without manual intervention. Which Cloud Dataflow pipeline configuration setting should you update?

zone 변경은 autoscaling 한계를 제어하는 1차 수단이 아닙니다. 특정 zone의 capacity가 부족하거나 zonal 리소스 가용성에 의해 제약을 받는 경우 zone 선택이 영향을 줄 수는 있지만, Dataflow worker scaling은 일반적으로 구성(max workers)과 프로젝트 quota에 의해 제한됩니다. 이 시나리오는 scaling이 40에서 일관되게 멈춘다고 설명하므로, 일시적인 zonal capacity 문제가 아니라 구성된 cap을 강하게 시사합니다.

worker 수(initial workers / numWorkers)는 Dataflow 작업의 시작 크기를 설정합니다(autoscaling이 비활성화된 경우에는 고정 크기일 수도 있습니다). autoscaling이 활성화된 경우 initial workers를 늘리면 시작 시 backlog를 줄일 수 있지만, 구성된 최대값을 넘어 확장할 수 있게 하지는 못합니다. 작업이 이미 40까지 scale up한 뒤 멈추므로, 문제는 initial worker 수가 아닙니다.

worker당 disk size는 shuffle spill, 큰 state, 또는 임시 파일로 인해 worker의 disk가 부족한 경우 성능 저하나 실패를 완화하는 데 도움이 될 수 있습니다. 하지만 autoscaling이 어디까지 scale out할 수 있는지를 제어하지는 않습니다. 여기서의 증상은 backlog가 증가하는데도 scaling이 40 worker에서 하드하게 멈추는 것이며, 이는 worker별 disk 제약이 아니라 autoscaling 상한을 가리킵니다.

최대 worker 수는 Dataflow autoscaling이 얼마나 scale out할 수 있는지를 제한하는 구성입니다. 이 시나리오에서 job은 25개의 worker에서 40개까지 증가한 뒤 backlog가 증가하는데도 멈추는데, 이는 구성된 상한에 도달했음을 보여주는 전형적인 신호입니다. maxNumWorkers를 높이면 수동 변경 없이도 피크 기간 동안 Dataflow가 자동으로 더 많은 worker를 추가할 수 있습니다. 이는 autoscaling을 계속 활성화한 상태로 더 높은 계절성 처리량을 지원해야 한다는 요구 사항과 직접적으로 일치합니다.

문제 분석

핵심 개념: 이 문제는 streaming pipeline에서 Cloud Dataflow autoscaling 한계를 테스트합니다. Dataflow에서는 부하가 증가하면 autoscaling이 worker를 추가할 수 있지만, job에 대해 구성된 최대 worker 수를 초과하여 scale되지 않습니다. 정답인 이유: 이 job은 25개의 worker로 시작하여 40개까지 scale up한 뒤, backlog가 계속 증가하는데도 scaling을 멈춥니다. 이러한 동작은 pipeline이 구성된 autoscaling 상한에 도달했음을 강하게 시사합니다. 계절성 피크 동안 Dataflow가 계속 자동으로 scaling하도록 하려면 최대 worker 수(maxNumWorkers)를 늘려야 합니다. 주요 기능, 구성 및 모범 사례: - numWorkers는 job 시작 시 초기 worker 수를 설정합니다. autoscaling이 활성화된 경우 이것은 최대 scale-out 지점을 정의하지 않습니다. - maxNumWorkers는 autoscaling이 초과할 수 없는 상한을 설정하므로, job이 특정 worker 수에서 지속적으로 scaling을 멈출 때 검토해야 할 핵심 설정입니다. - project quota, regional capacity, pipeline parallelism도 충분한지 확인해야 합니다. maxNumWorkers를 늘린 후에도 이러한 요소가 실제 scale을 제한할 수 있기 때문입니다. 흔한 오해: - 초기 worker 수를 늘리면 부하를 더 빨리 흡수하는 데 도움이 될 수 있지만, autoscaling 상한을 제거하지는 않습니다. - zone을 변경하는 것은 특정 worker 수에서 반복적으로 scaling이 멈추는 현상에 대한 일반적인 해결책이 아닙니다. 이런 패턴은 보통 구성 또는 quota 한계를 가리킵니다. - worker당 disk 크기를 늘리면 개별 worker의 storage 압박을 완화하는 데 도움이 될 수 있지만, Dataflow가 더 많은 worker를 생성할 수 있게 하지는 않습니다. 시험 팁: Dataflow 시험 문제에서는 시작 worker 수와 autoscaling 상한을 구분하세요. job이 고정된 수까지 scale up한 뒤 backlog가 계속되는데도 멈춘다면, 가장 먼저 확인해야 할 설정은 maxNumWorkers입니다. 또한 autoscaling 동작은 quota와 pipeline이 실제로 활용할 수 있는 parallelism의 양에 의해서도 제한될 수 있다는 점을 기억하세요.

13
문제 13

Your healthcare analytics startup must lift-and-shift a single-region 2.3 TB on-premises PostgreSQL database that powers your billing API; you have fewer than 400 concurrent client connections, require standard SQL with ACID transactions and point-in-time recovery, cannot redesign the schema or application within the next quarter, do not need global distribution, and minimizing ongoing operating cost is the top priority; which Google Cloud service should you use to store and serve this workload?

Cloud Spanner는 strong consistency와 SQL을 제공하는 globally distributed, horizontally scalable relational database입니다. ACID 트랜잭션과 high availability를 지원하지만, 일반적으로 global distribution, 대규모 확장, 또는 multi-region 복원력을 위해 선택됩니다. 최소 변경과 비용 최소화가 필요한 single-region 2.3 TB PostgreSQL lift-and-shift에는 보통 과도하며, 스키마/SQL 조정이 필요해 노력과 비용이 증가할 수 있습니다.

Cloud Bigtable은 매우 높은 throughput과 low-latency key/value 또는 time-series access 패턴에 최적화된 wide-column NoSQL database입니다. PostgreSQL 호환 표준 SQL querying, relational joins, 또는 relational database처럼 임의의 row 전반에 대한 일반적인 OLTP transactional semantics를 제공하지 않습니다. billing API를 PostgreSQL에서 Bigtable로 마이그레이션하려면 상당한 스키마 및 애플리케이션 재설계가 필요하여 “재설계 불가” 제약을 위반합니다.

Cloud Firestore는 유연한 documents, real-time sync, 그리고 단순한 querying를 제공하는 모바일/웹 앱 백엔드를 위한 document database(NoSQL)입니다. 트랜잭션을 지원하긴 하지만 relational database가 아니며 PostgreSQL 호환 SQL, joins, 또는 동일한 schema/constraint 모델을 제공하지 않습니다. PostgreSQL billing 시스템을 Firestore로 옮기려면 데이터 모델링과 애플리케이션 로직을 재고해야 하며, 이는 다음 분기에는 허용되지 않습니다.

Cloud SQL (for PostgreSQL)은 최소 변경으로 PostgreSQL을 실행하도록 목적에 맞게 설계된 managed service입니다. 표준 PostgreSQL 기능, ACID 트랜잭션, 그리고 automated backups와 WAL archiving을 통한 point-in-time recovery를 지원합니다. 수백 개 연결을 가진 single-region OLTP 워크로드에 적합하며 globally distributed system의 복잡도/비용을 피할 수 있습니다. 또한 managed patching, 백업, 그리고 선택적 HA 구성으로 지속적인 운영 부담을 최소화합니다.

문제 분석

핵심 개념: 이 문제는 PostgreSQL 호환성, ACID 트랜잭션, 표준 SQL, point-in-time recovery, 그리고 낮은 운영/지속 비용이 필요한 lift-and-shift OLTP 워크로드에 적합한 managed database storage service를 선택하는지를 평가합니다. 정답이 맞는 이유: Cloud SQL (for PostgreSQL)은 스키마나 애플리케이션 동작을 변경할 수 없을 때 on-prem PostgreSQL 데이터베이스와 가장 유사한 managed 대안입니다. 표준 PostgreSQL SQL semantics, 완전한 ACID 트랜잭션, 그리고 일반적인 billing API가 기대하는 기능(인덱스, 제약조건, 조인, 지원 범위 내 stored procedures/extensions)을 지원합니다. 워크로드는 single-region이며 동시 연결이 <400이고 global distribution이 필요하지 않으므로, Cloud Spanner의 global consistency와 horizontal scaling은 불필요하며 비용/복잡도만 증가시킵니다. 지속적인 운영 비용을 최소화해야 한다는 요구는 Cloud SQL의 managed operations 모델(패치, 백업, replication)과 right-sizing 옵션과도 부합합니다. 주요 기능 / 구성 / Best Practices: - High availability: billing API에 더 높은 uptime이 필요하면 Cloud SQL HA (regional) 구성을 사용하고, 그렇지 않다면 single-zone이 더 저렴할 수 있지만 복원력은 낮습니다. - Point-in-time recovery (PITR): 복구 요구사항을 충족하기 위해 automated backups와 WAL archiving (PITR)을 활성화합니다. - Connection management: 수백 개의 클라이언트가 있는 경우 Cloud SQL Auth Proxy / connectors를 사용하고, connection limit 소진을 방지하기 위해 PgBouncer(또는 built-in connection pooling 패턴)를 고려합니다. - Security/compliance: 필요 시 CMEK, private IP, VPC Service Controls(해당 시), 그리고 IAM/Cloud SQL roles를 사용합니다. 헬스케어 환경에서는 least privilege와 audit logging에 맞춥니다. - Cost: CPU/RAM/storage를 right-size하고, SSD/HDD를 적절히 선택하며, 해당되는 경우 committed use discounts를 고려합니다. 흔한 오해: - “Spanner가 최고의 relational DB다”: Spanner는 global scale과 horizontal scaling을 통한 높은 write throughput에 매우 뛰어나지만, 일반적으로 더 비싸고 스키마/SQL 조정이 필요할 수 있습니다. single-region PostgreSQL lift-and-shift에는 과도한 선택입니다. - “Bigtable/Firestore가 더 저렴하다”: 둘 다 NoSQL이며 PostgreSQL 호환 SQL + 임의의 relational query 전반에 대한 ACID transactional semantics를 제공하지 않으므로 애플리케이션 재설계가 필요합니다. Exam Tips: 기존 PostgreSQL/MySQL + lift-and-shift + ACID + 표준 SQL + 최소한의 앱 변경을 보면 기본 선택은 Cloud SQL입니다. Spanner는 여러 리전에서 strong consistency를 유지하며 horizontal scaling이 필요하거나 global scale에서 매우 높은 availability가 필요할 때만 선택하세요. NoSQL(Bigtable/Firestore)은 스키마/앱 재설계와 다른 query/transaction 모델을 전제로 합니다.

14
문제 14

You manage a BigQuery dataset that stores hourly IoT telemetry for 500,000 sensors, and you must let 5 internal departments across 10 consumer projects discover and use the data without creating copies, keeping monthly maintenance under 1 hour and costs minimal; within the same Google Cloud organization, what is the most self-service, low-maintenance, and cost-effective way to share this dataset?

Analytics Hub private exchange는 복사 없이 프로젝트 간 BigQuery 데이터를 거버넌스 기반으로 셀프서비스 공유하도록 설계되었습니다. 생산자는 dataset listing을 한 번 게시하고, 다른 프로젝트의 소비자는 구독하여 원본 데이터를 참조하는 linked dataset을 생성합니다. 이는 많은 소비자 프로젝트로 잘 확장되고, 지속적인 유지보수를 최소화하며, 중복 스토리지를 피함으로써 비용을 낮게 유지하는 동시에 중앙집중식 접근 제어와 검색을 가능하게 합니다.

Authorized views는 다른 프로젝트에 데이터의 일부(row/column filtering)를 안전하게 노출할 수 있지만, 가장 셀프서비스적인 discovery 메커니즘은 아닙니다. 이 규모(10개 프로젝트에 걸친 5개 부서)에서는 일반적으로 소비자 컨텍스트별로 view와 IAM binding을 생성/관리해야 하므로 관리 오버헤드가 증가합니다. 이는 광범위한 공유와 discovery가 주된 목표일 때보다는 데이터 최소화를 강제해야 할 때 더 적합합니다.

개별 사용자에게 view를 직접 공유하는 방식은 확장되지 않으며 운영적으로 취약합니다. 접근 관리는 프로젝트/부서 중심이 아니라 사용자 중심이 되어 오구성 위험과 지속적인 유지보수(온보딩/오프보딩, 역할 변경)를 증가시킵니다. 또한 여러 소비자 프로젝트에 걸친 구조화된 discovery/subscription 경험을 제공하지 않으므로, 엔터프라이즈 거버넌스 및 least-privilege 모범 사례와의 정합성이 떨어집니다.

BigQuery Data Transfer Service는 일정에 따라 telemetry dataset을 각 부서의 프로젝트로 복사합니다. 이는 복사 생성을 피하라는 요구사항을 위반하며, 중복 스토리지와 잠재적으로 중복 처리로 인해 비용을 증가시킵니다. 또한 운영 오버헤드(전송 모니터링, 실패 처리, 스키마 변경)를 추가하고, 복사본 간 데이터 최신성/일관성 문제를 유발할 수 있습니다.

문제 분석

핵심 개념: 이 문제는 동일한 조직 내 여러 소비자 프로젝트에 대해 운영 오버헤드를 최소화하고 데이터 중복 없이 BigQuery 데이터 공유 패턴을 테스트합니다. 핵심 서비스는 Analytics Hub로, 프로젝트 간 BigQuery dataset(및 listing)을 공유하기 위한 관리형 셀프서비스 데이터 교환을 제공합니다. 정답이 맞는 이유: Analytics Hub private exchange를 사용하면 telemetry dataset을 한 번만 게시하고 여러 내부 부서(구독자)가 각자의 프로젝트에서 이를 검색하고 구독할 수 있습니다. 구독은 데이터를 복사하는 대신 linked dataset(메타데이터 포인터)을 생성하므로 스토리지 비용이 증가하지 않습니다. 이는 요구사항(복사 없음, 셀프서비스 검색, 많은 소비자 프로젝트로 확장 가능, 매우 낮은 지속 운영/유지보수—한 번 게시하고 접근을 중앙에서 관리)을 직접 충족합니다. 주요 기능 / 모범 사례: Analytics Hub는 조직으로 제한된 private exchange를 지원하여 중앙 통제를 통한 거버넌스 기반 공유를 가능하게 합니다. 소비자는 자신의 프로젝트에서 구독하므로 chargeback/showback 및 least-privilege access에 부합합니다. exchange를 볼 수 있는 사용자, 구독할 수 있는 사용자 관리와 listing 업데이트를 프로젝트별 view 생성과 조율 없이 수행할 수 있습니다. 이 접근은 Google Cloud Architecture Framework의 운영 우수성(작업 부담 감소), 보안(중앙 거버넌스), 비용 최적화(중복 스토리지 없음) 원칙과 일치합니다. 흔한 오해: Authorized views(옵션 B)는 row/column-level security에 자주 사용되지만, 소비자 프로젝트/dataset별로 view와 권한을 생성·관리해야 하며 discovery/subscription 워크플로를 제공하지 않습니다. view를 사용자에게 직접 공유(옵션 C)하는 방식은 간단해 보이지만, 많은 프로젝트와 부서로 확장되지 않고 거버넌스를 복잡하게 만듭니다. BigQuery Data Transfer Service(옵션 D)로 복사하는 방식은 격리 측면에서는 직관적이지만, “복사 없음” 요구사항을 명시적으로 위반하고 스토리지 및 전송 비용을 증가시킵니다. 시험 팁: “복사 없이 프로젝트 간 BigQuery 데이터 공유” + “셀프서비스 검색” + “낮은 유지보수”를 보면 Analytics Hub를 떠올리세요. Authorized views는 주로 생산자가 강제하는 세밀한 필터링/마스킹이 필요할 때 사용하며, 광범위한 다중 프로젝트 배포가 주목적일 때의 1순위는 아닙니다. 또한 비용 단서를 확인하세요. 대용량/시간 단위 telemetry를 복사하면 스토리지가 배로 늘고, 중복된 테이블과 파이프라인 때문에 쿼리 비용도 증가할 수 있습니다.

15
문제 15

Your globally distributed ride-hailing platform lets drivers accept trip requests, and occasionally multiple drivers tap Accept for the same request within 10–50 ms while different regional application clusters handle those taps; each acceptance event includes rideId, driverId, acceptTimestamp (RFC3339 UTC), region, and fareEstimate, and events may arrive out of order by up to 3 seconds; you must aggregate these events centrally in real time with under 2 seconds end-to-end latency at a sustained rate of 200,000 events per minute to determine which driver accepted first. What should you do?

공유 네트워크 파일에 기록하고 Hadoop을 실행하는 것은 지연 시간이 큰(수 분 이상) 배치 패턴으로, end-to-end <2초에는 적합하지 않습니다. 또한 리전 간 공유 스토리지에 대한 경합과 운영 복잡성을 유발합니다. Hadoop job은 연속적이고 저지연의 이벤트 단위 정합성(reconciliation)을 위해 설계되지 않았고, 거의 실시간으로 out-of-order 이벤트를 처리하는 것은 번거롭고 비용이 많이 듭니다.

Pub/Sub 수집은 좋지만, Cloud SQL에 쓰는 커스텀 HTTPS endpoint로의 push subscription은 3,333 events/sec 지속 처리에 부적합합니다. Cloud SQL은 connection 및 write 처리량 한계가 있는 OLTP 데이터베이스이므로 병목, hot row(rideId), 확장 문제에 부딪힐 가능성이 큽니다. Push 전달 재시도는 중복을 유발할 수 있어 세심한 idempotency가 필요하며, 커스텀 endpoint는 가용성과 지연 시간 측면의 리스크가 됩니다.

리전별 MySQL 데이터베이스와 주기적 query는 본질적으로 polling/배치 병합 접근으로, <2초 지연 시간을 충족할 수 없고 전역 일관성을 복잡하게 만듭니다. 리전 간 정합성(reconciliation)은 replication lag와 운영 오버헤드를 추가하며, 여전히 out-of-order 이벤트와 충돌을 처리해야 합니다. 이 설계는 장애 지점을 늘리고(여러 데이터베이스) 확장 가능한 스트리밍 집계 메커니즘을 제공하지 못합니다.

Pub/Sub와 Dataflow streaming은 near real time에서 대용량 이벤트를 수집하고 조정하기 위한 올바른 Google Cloud 아키텍처입니다. Dataflow는 rideId를 기준으로 record를 keying하고, acceptTimestamp에서 event time을 추출하며, 이벤트가 최대 3초까지 순서 없이 도착하더라도 각 ride별 최소 timestamp를 계산할 수 있습니다. 이는 어떤 driver가 먼저 수락했는지를 판별해야 한다는 요구 사항과 직접적으로 일치하며, 단순히 어떤 이벤트가 우연히 먼저 처리되었는지를 판단하는 것이 아닙니다. Watermark, allowed lateness, 그리고 stateful processing 또는 trigger를 통해 이 설계는 필요한 throughput에서 정확성과 2초 미만 latency의 균형을 맞출 수 있습니다.

문제 분석

핵심 개념: 이 문제는 전 세계에 분산된 이벤트를 수집하고, 순서가 뒤바뀌어 도착하더라도 각 ride에 대해 가장 이른 acceptance를 조정할 수 있는 low-latency, high-throughput streaming architecture를 구축하는 것에 관한 것입니다. 올바른 GCP 패턴은 확장 가능한 이벤트 수집을 위한 Cloud Pub/Sub와 stateful하고 event-time-aware aggregation을 위한 Dataflow streaming입니다. 정답인 이유: Option D가 최적의 아키텍처 선택인 이유는 Pub/Sub가 모든 regional cluster의 acceptance event를 대규모로 수용할 수 있고, Dataflow가 streaming mode에서 rideId별로 이벤트를 그룹화하고 acceptTimestamp 값을 비교할 수 있기 때문입니다. Dataflow는 event-time processing, watermark, allowed lateness를 지원하며, 이는 이벤트가 최대 3초까지 순서 없이 도착할 수 있을 때 정확히 필요한 기능입니다. 적절한 state와 timer 또는 windowing과 trigger를 사용하면, 이 pipeline은 각 ride에 대해 가장 이른 acceptance event를 판별하면서도 near-real-time latency 목표를 충족할 수 있습니다. 주요 기능: - Pub/Sub는 burst와 지속적인 throughput을 위해 전역적으로 확장 가능하고 decoupled된 ingestion을 제공합니다. - Dataflow는 arrival time이나 processing time에 의존하지 않고 acceptTimestamp에서 event timestamp를 할당할 수 있습니다. - Stateful per-key aggregation 또는 event-time windowing은 각 rideId에 대해 최소 acceptTimestamp를 추적할 수 있습니다. - Allowed lateness와 watermark를 통해 시스템은 정확성을 희생하지 않으면서 late event를 잠시 기다릴 수 있습니다. - Pub/Sub delivery는 at least once이므로 downstream write의 idempotent 처리도 여전히 중요합니다. 흔한 오해: 주요 함정은 먼저 처리된 이벤트를 실제로 먼저 발생한 이벤트와 혼동하는 것입니다. 분산 시스템에서는 network delay와 regional 차이로 인해 더 늦은 acceptance가 더 먼저 도착할 수 있으므로 processing-time 순서는 신뢰할 수 없습니다. 이 해법은 acceptTimestamp를 기반으로 한 event-time semantics를 사용해야 합니다. 시험 팁: 순서가 뒤바뀐 이벤트, low latency, per-key aggregation이 포함된 streaming 문제에서는 Google Cloud에서 보통 Pub/Sub와 Dataflow 조합이 의도된 정답입니다. Hadoop 같은 batch system은 피하고, high-rate streaming workload의 기본 reconciliation engine으로 Cloud SQL이나 MySQL을 사용하는 것도 피하세요. 또한 event time과 processing time을 구분하는 표현을 주의 깊게 보세요.

이동 중에도 모든 문제를 풀고 싶으신가요?

Cloud Pass를 다운로드하세요 — 모의고사, 학습 진도 추적 등을 제공합니다.

16
문제 16

You are using Cloud Bigtable to persist and serve real-time error logs from five microservices in a payment platform, and the on-call dashboard needs only the most recent log entry per service (logs stream at up to 1,000 rows per second per service) with the simplest possible query to fetch the latest per service—how should you design your row keys and tables?

오답입니다. service_id#timestamp 형태의 row key는 각 service의 log를 함께 묶어 주지만, 일반적인 ascending timestamp에서는 최신 row가 해당 service의 key range 시작이 아니라 끝에 위치합니다. 최신 entry를 가져오려면 application이 range scan과 reverse-read 동작 또는 prefix 내 마지막 row를 찾는 logic을 사용해야 하므로, 가능한 가장 단순한 query가 아닙니다. 이 설계도 사용할 수는 있지만, service별 table에 reverse timestamp를 사용하는 방식만큼 정확한 access pattern에 직접적으로 최적화되지는 않습니다.

오답입니다. single shared table에서 reverse timestamp만 사용하면 전체 기준 최신 row가 먼저 나타나지만, row key에 service identity가 포함되지 않습니다. 그 결과 특정 microservice의 최신 row를 찾으려면 일치하는 service를 찾을 때까지 row를 scan하고 filtering해야 하므로 비효율적이며 scale이 커질수록 결정적인 방식도 아닙니다. 이 schema는 service별 최신성이 아니라 전체 최신성에 최적화되어 있습니다.

오답입니다. service별로 별도의 table을 두면 각 microservice의 data는 분리되지만, 일반 timestamp row key는 오래된 row를 먼저, 최신 row를 나중에 정렬합니다. 즉, 최신 log entry를 단순히 첫 번째 row를 읽는 방식으로 바로 가져올 수 없고, 대신 keyspace의 끝에서 읽거나 더 복잡한 scan logic을 사용해야 합니다. 또한 각 table 내에서 monotonically increasing key가 가지는 write concentration 문제도 그대로 남습니다.

정답입니다. reverse timestamp row key를 사용하면 각 service의 table에서 최신 log entry가 가장 먼저 정렬되므로, 최신 log를 가져오는 작업은 해당 table의 시작 부분을 읽는 간단한 방식이 됩니다. 각 microservice가 자체 table을 가지므로, 특정 service의 record를 분리하기 위해 prefix scan, filtering, 또는 reverse-range logic이 필요하지 않습니다. service가 5개뿐이므로 추가되는 table 수는 많지 않으며, 이 설계는 service별 최신 항목을 가능한 가장 단순하게 조회해야 한다는 요구 사항에 가장 직접적으로 최적화되어 있습니다.

문제 분석

핵심 개념: 이 문제는 access pattern을 기반으로 한 Cloud Bigtable schema design을 테스트합니다. Bigtable에서는 row가 row key 기준으로 lexicographically 정렬되므로, 가장 일반적인 read pattern을 효율적이고 단순하게 만들 수 있도록 row key를 설계해야 합니다. 여기서는 dashboard가 각 microservice의 가장 최근 log entry만 필요로 하므로, 해당 service에 대해 가장 최신 row가 자연스럽게 맨 앞에 오도록 하는 설계가 이상적입니다. 정답인 이유: 각 service마다 별도의 table을 사용하고 reverse timestamp row key를 적용하면, 최신 log entry가 해당 table의 첫 번째 row가 됩니다. 즉, dashboard는 가능한 가장 단순한 query를 수행할 수 있습니다. 각 service의 table 시작 부분에서 single row를 읽으면 됩니다. 이는 service별로 가장 최근 log만 최소한의 query complexity로 가져와야 한다는 요구 사항과 직접적으로 일치합니다. 주요 특징: Reverse timestamp는 newer entry가 older entry보다 먼저 정렬되도록 하며, 이는 최근 데이터 조회가 주를 이루는 time-series data에서 흔히 사용되는 Bigtable pattern입니다. 별도의 table은 각 service의 write stream을 분리하고 service별 최신 항목 조회를 매우 단순하게 만듭니다. microservice가 5개뿐이므로, 5개 table에 대한 운영 오버헤드는 이 시나리오에서 크지 않고 수용 가능합니다. 흔한 오해: service_id#timestamp와 같은 composite key는 row를 service별로 묶어 주지만, 일반 timestamp를 사용하면 최신 row가 range의 끝에 위치하므로 이를 가져오는 것이 가장 단순한 read pattern은 아닙니다. shared table에서 service_id 없이 reverse timestamp만 사용하면 전체 기준 최신 항목 조회는 쉬워지지만, service별 최신 항목 조회에는 적합하지 않습니다. 또한 Bigtable은 보통 적은 수의 큰 table을 선호하지만, 그 지침이 절대적인 것은 아니며 소수의 table이 access pattern에 더 잘 맞는 경우도 있습니다. 시험 팁: Bigtable 문제에서는 정확한 read pattern부터 시작하고, 원하는 row들이 서로 인접하고 가능하면 정렬 순서상 맨 앞에 오도록 row key를 설계하세요. Reverse timestamp는 최신 record를 자주 필요로 할 때 유용합니다. 문제가 소수의 고정된 entity 집합에 대해 가능한 가장 단순한 lookup을 강조한다면, 별도의 table을 사용하는 것도 유효한 설계 선택이 될 수 있습니다.

17
문제 17

You manage an overnight telemetry-validation workflow in Cloud Composer 2; one Airflow task calls a partner's device registry API via an HTTP operator and is configured with retries=3 and retry_delay=5 minutes, while the DAG has an SLA of 45 minutes; you want a notification to be sent only when this specific task ultimately fails after exhausting all retries (and not on retries or SLA misses); what should you do?

오답. on_retry_callback은 task 시도가 실패하고 retry가 예약될 때(예: 상태가 UP_FOR_RETRY로 전이) 호출됩니다. retries=3이면 retry 이벤트마다 알림이 생성되며, 이는 요구사항에서 명시적으로 금지합니다. 이 선택지는 retry와 관련 있어 보이지만, 너무 이르고 너무 자주 알림을 보내 noise를 증가시키는 흔한 함정입니다.

오답. sla_missed metric으로 alerting하는 것은 종단 task failure가 아니라 SLA miss(타이밍 위반)를 대상으로 합니다. task는 SLA를 miss하더라도 나중에 성공할 수 있고, SLA miss는 scheduler delay나 upstream dependency의 영향을 받을 수 있습니다. 문제에서 SLA miss에는 알리지 말라고 명시하므로 요구사항을 충족하지 못합니다.

정답. on_failure_callback은 task instance가 FAILED로 표시될 때 실행되며, 이는 모든 retry가 소진된 후(또는 retry가 비활성화된 경우)에만 발생합니다. 이는 특정 task가 최종적으로 실패할 때만 알림을 보내라는 요구사항과 일치합니다. 또한 알림 범위를 해당 operator로 제한하여 DAG 전체 또는 SLA 기반 alert를 피합니다.

오답. sla_miss_callback은 task(또는 DAG)가 구성된 SLA 시간을 초과할 때, 최종적으로 성공/실패하는지와 무관하게 트리거됩니다. 요구사항은 SLA miss 알림을 피하고 retry 이후의 최종 실패에만 집중하라고 하므로, 이 callback은 잘못된 트리거 조건입니다.

문제 분석

핵심 개념: 이 문제는 Apache Airflow (Cloud Composer 2)의 task lifecycle callback과 task failure, retry 이벤트, SLA miss의 차이를 테스트합니다. Airflow에서 retry는 scheduler/executor가 처리하며, 모든 retry가 소진된 후에야 task가 FAILED로 표시됩니다. 별도로, SLA miss는 타이밍 신호(지속 시간 초과)이며 task가 실패했다는 의미는 아닙니다. 정답이 맞는 이유: 특정 HTTP task가 모든 retry를 소진한 뒤 최종적으로 실패할 때만 알림을 보내려면, 해당 operator의 on_failure_callback에 알림 로직을 연결해야 합니다. Airflow는 task instance가 FAILED 상태로 전이될 때 on_failure_callback을 호출합니다. retries=3인 경우, 중간의 실패 시도는 UP_FOR_RETRY(또는 유사)로 전이되며 on_failure_callback을 트리거하지 않습니다. 대신 on_retry_callback을 트리거합니다. 따라서 on_failure_callback은 “최종 실패 후에만 알림”과 정확히 일치하며, 전체 DAG가 아니라 단일 task(operator)에 범위가 한정됩니다. 주요 기능 및 모범 사례: - Task 수준 callback: on_failure_callback, on_retry_callback, on_success_callback은 task별 동작을 허용합니다. - SLA callback/metrics: sla_miss_callback 및 sla_missed metrics는 최종 task 결과가 아니라 지연/경과 시간에 관한 것입니다. - Cloud Composer 2는 GKE에서 Airflow를 실행합니다. 알림은 보통 email, Pub/Sub, Cloud Functions/Run webhook, 또는 Chat integration으로 구현하지만, 먼저 트리거 조건이 정확해야 합니다. - Architecture Framework 정렬: operational excellence 및 reliability—alert fatigue를 줄이기 위해 조치 가능한 실패(최종 task 실패)에 대해서만 알림을 보냅니다. 흔한 오해: - retry와 failure를 혼동: on_retry_callback은 각 retry 시도마다 실행되므로 “retry에는 알리지 않기” 요구사항을 위반합니다. - SLA 기반 alerting 사용: SLA miss는 task가 결국 성공하더라도 발생할 수 있으며(또는 scheduling delay로 인해 miss될 수 있음), “최종 실패”의 신뢰할 수 있는 대리 지표가 아닙니다. 시험 팁: - 기억할 점: on_failure_callback = 종단 실패(terminal failure); on_retry_callback = 각 retry 이벤트; sla_miss_callback/metrics = 시간 임계값 초과. - 요구사항이 한 task에만 해당하면 task 수준 callback을 선호하고, 요구사항이 적시성(timeliness)이 아니라 정확성/실패에 관한 것이라면 SLA alert를 피하세요.

18
문제 18

Your analytics team streams 80,000 events per second into a BigQuery table via a Pub/Sub BigQuery subscription in us-central1. Currently, both the Pub/Sub topic (project: stream-prd) and the BigQuery table (project: analytics-prd, dataset: ops_ds, table: events_raw) use Google-managed encryption keys. A new organization policy mandates that all at-rest data for this pipeline must use a customer-managed encryption key (CMEK) from a centralized KMS project (project: sec-kms-prj, key ring: analytics-ring, key: event-data-key, region: us-central1). You must comply with the policy and keep streaming ingestion running while you transition and preserve historical data. What should you do?

오답입니다. Dataflow가 자체 리소스(예: temp storage)에 대해 CMEK를 사용하도록 구성되어 있더라도, 기존 Pub/Sub topic은 여전히 Google-managed encryption으로 message를 at rest로 저장하고, 기존 BigQuery table도 Google-managed key로 암호화된 상태로 남습니다. 기존 table에 write한다고 해서 해당 table의 encryption이 바뀌지는 않습니다. 이는 pipeline의 모든 at-rest 데이터가 중앙화된 CMEK를 사용해야 한다는 요구사항을 충족하지 못합니다.

BigQuery 측면은 일부 다루지만 여전히 오답입니다. 새 CMEK BigQuery table을 만들고 과거 데이터를 copy하면 BigQuery storage에 대한 CMEK는 충족할 수 있지만, 기존 Pub/Sub topic은 계속 Google-managed encryption으로 message를 at rest로 저장합니다. 정책이 pipeline의 모든 at-rest 데이터에 CMEK를 요구하므로, Pub/Sub를 변경하지 않으면 비준수입니다.

오답입니다. Pub/Sub는 CMEK로 바꾸지만 BigQuery table은 Google-managed key로 암호화된 상태로 남아 요구사항을 위반합니다. 또한 Pub/Sub BigQuery subscription은 특정 table로 write하므로, table이 CMEK여야 한다면 새 CMEK table(그리고 보통 이를 대상으로 하는 새 subscription)이 필요합니다.

정답입니다. CMEK는 Pub/Sub topic과 BigQuery table 모두 생성 시점에 적용되어야 합니다. us-central1에 CMEK-enabled topic과 CMEK-enabled BigQuery table을 새로 만들고, publisher를 리다이렉트하며, 새 Pub/Sub BigQuery subscription을 생성하면 규정을 준수하는 at-rest encryption으로 streaming을 계속할 수 있습니다. 기존 table의 과거 데이터를 새 CMEK table로 copy하면 전환을 완료하면서도 히스토리를 보존할 수 있습니다.

문제 분석

핵심 개념: 이 문제는 Pub/Sub BigQuery subscription과 BigQuery storage를 사용하는 streaming ingestion pipeline에 대해 end-to-end CMEK 적용을 테스트합니다. 또한 ingestion을 중단하지 않고 기존(과거) 데이터를 보존하면서 전환하는 방법도 테스트합니다. 정답이 맞는 이유: pipeline에서 at-rest 상태로 저장되는 모든 데이터에 대해 CMEK를 의무화하는 organization policy를 준수하려면, 데이터를 영구 저장(persist)하는 두 가지 storage 시스템 모두가 CMEK를 사용해야 합니다: (1) Pub/Sub topic의 message storage와 (2) BigQuery table storage. Google-managed encryption으로 생성된 기존 Pub/Sub topic이나 기존 BigQuery table을 사후적으로 “재암호화(re-encrypt)”할 수는 없습니다. CMEK는 리소스 생성 시점에 설정되기 때문입니다. 따라서 규정을 준수하는 접근은 (둘 다 us-central1에) CMEK가 활성화된 새 Pub/Sub topic과 CMEK가 활성화된 새 BigQuery table을 생성하고, publisher를 새 topic으로 리다이렉트한 뒤, 새 CMEK table에 쓰도록 하는 새 Pub/Sub BigQuery subscription을 만드는 것입니다. 과거 데이터는 기존 table에서 새 CMEK table로 copy하여 보존해야 합니다. 주요 기능 / 구성: - Pub/Sub CMEK: 동일 region(us-central1)의 Cloud KMS key로 topic을 구성합니다. Pub/Sub service agent에 해당 key에 대한 cryptoKeyEncrypterDecrypter 권한이 있는지 확인합니다. - BigQuery CMEK: 중앙화된 key를 사용하여 destination table(또는 dataset default CMEK)을 생성합니다. BigQuery service agent에 key 접근 권한을 부여합니다. - Cross-project KMS: 중앙화된 KMS project를 사용하는 것이 일반적이며, key policy는 stream-prd와 analytics-prd의 service agent를 허용해야 합니다. - Migration: BigQuery copy jobs(또는 CTAS)를 사용해 events_raw의 과거 데이터를 새 table로 복사합니다. backfill이 실행되는 동안에도 새 subscription을 통해 streaming은 계속됩니다. 흔한 오해: CMEK로 구성된 Dataflow job은 Pub/Sub 또는 기존 BigQuery table의 non-CMEK storage 문제를 해결하지 못합니다. 데이터는 여전히 해당 서비스의 자체 encryption 설정에 따라 at rest로 저장됩니다. 또한 BigQuery만 또는 Pub/Sub만 변경하면 pipeline의 일부가 여전히 비준수 상태로 남습니다. 시험 팁: - 기억할 점: Pub/Sub topic과 BigQuery table은 보통 리소스 생성 이후 CMEK를 변경할 수 없습니다(immutable). 따라서 “새로 생성 + cutover + backfill”을 계획해야 합니다. - 80k events/sec의 streaming에서는 운영 리스크를 최소화하기 위해 managed integration(Pub/Sub BigQuery subscription)을 선호하고, migration은 병렬로 수행합니다. - 중앙화된 CMEK project를 사용할 때는 항상 region 정합성과 service agent에 대한 KMS IAM을 확인하세요.

19
문제 19

A logistics company (AeroFleet) ingests 120,000 events/sec (avg ~40 MB/s, peak 80 MB/s) from a 3-broker on-premises Apache Kafka cluster into Google Cloud over a 10 Gbps Dedicated Interconnect with 7–10 ms RTT; security policy allows only private IPs and TLS/SASL to Kafka, and the analytics team needs events queryable in BigQuery with p50 < 5 s and p99 < 20 s end-to-end latency while keeping architecture hops to a minimum and ensuring horizontal scalability; what should you do to meet throughput and latency goals with minimal added components?

Kafka Connect -> Pub/Sub -> Dataflow template -> BigQuery는 여러 구성 요소와 불필요한 추가 hop(Pub/Sub)을 더합니다. 또한 Kafka Connect(및 잠재적으로 Connect worker)를 운영하고 topic-to-subscription 매핑을 관리해야 합니다. 동작은 가능하지만, 명시된 목표를 위한 최소 아키텍처 접근이 아니며 direct KafkaIO ingestion 대비 latency/운영 오버헤드가 증가할 수 있습니다.

Kafka 트래픽을 중계하는 단일 proxy VM은 처리량 병목과 단일 장애 지점을 만들어 수평 확장 및 최소 리스크 요구사항을 위반합니다. 또한 불필요한 네트워크 hop과 운영 부담(VM lifecycle, patching, scaling, HA)을 추가합니다. Dataflow는 proxy layer 없이도 Interconnect를 통해 private하게 온프레미스 Kafka에 접근할 수 있습니다.

Dedicated Interconnect를 통한 KafkaIO 기반의 direct Dataflow streaming은 private IP 및 TLS/SASL 요구사항을 충족하고 hop을 최소화합니다(Kafka -> Dataflow -> BigQuery). Dataflow는 partition 및 autoscaling으로 수평 확장되어 40–80 MB/s를 지원합니다. BigQuery Storage Write API를 사용하면 적절한 튜닝 시 p50/p99 end-to-end latency 목표에 적합한 고처리량/저지연 streaming write가 가능합니다.

A와 비교하면 custom Dataflow pipeline은 더 많은 제어를 제공하지만, 여전히 Kafka Connect와 Pub/Sub가 필요하여 문제에서 요구하는 것보다 구성 요소와 hop이 증가합니다. Pub/Sub는 decoupling 및 buffering에 유용할 수 있으나, 프롬프트는 latency를 충족하면서 최소 추가 구성 요소와 최소 hop을 우선시하므로 direct KafkaIO ingestion이 더 단순하고 일반적으로 더 저지연입니다.

문제 분석

핵심 개념: 이 문제는 최소한의 구성 요소로 온프레미스 Kafka에서 BigQuery로 저지연 스트리밍 수집을 수행하면서, private connectivity 및 보안 제약을 충족하는지를 평가합니다. 핵심 서비스/개념은 Dataflow (Apache Beam) streaming, KafkaIO를 통한 Kafka 직접 소비, 그리고 고처리량/저지연 쓰기를 위한 BigQuery의 Storage Write API입니다. 정답이 맞는 이유: 옵션 C는 가장 직접적인 아키텍처입니다. VPC 내의 Dataflow worker가 Dedicated Interconnect를 통해 private IP와 TLS/SASL로 온프레미스 Kafka broker에서 데이터를 소비한 뒤, Storage Write API를 통해 BigQuery로 스트리밍합니다. 이는 hop을 최소화(Kafka -> Dataflow -> BigQuery)하며, Pub/Sub 및 Kafka Connect를 추가 구성 요소로 도입하지 않아도 됩니다. Dataflow는 수평 확장(autoscaling worker, partition 기반 parallelism)을 제공하여 40–80 MB/s의 지속/피크 처리량을 처리할 수 있고, Storage Write API는 legacy streaming insert 대비 강력한 성능 특성을 가진 고처리량 스트리밍용으로 설계되었습니다. Interconnect에서 RTT가 7–10 ms라면 직접 소비가 가능하며, 파이프라인을 튜닝(충분한 worker, 적절한 checkpointing, batching, BigQuery write 설정)하면 일반적으로 요구되는 p50/p99 end-to-end latency를 지원할 수 있습니다. 주요 기능 / 구성 / 모범 사례: - TLS/SASL, consumer group 관리, Kafka partition에 맞춘 충분한 parallelism으로 KafkaIO를 구성한 Dataflow streaming을 사용합니다. - Dedicated Interconnect를 통해 온프레미스로 라우팅되는 VPC에 Dataflow worker를 배치하고, BigQuery API를 위해 필요 시 firewall rule 및 Private Google Access를 보장합니다. - BigQuery에는 Storage Write API로 기록(exactly-once/at-least-once semantics는 구성에 따라 달라짐)하고, latency와 throughput의 균형을 위해 batch size/flush frequency를 튜닝합니다. - Google Cloud Architecture Framework 원칙을 따릅니다: reliability(관리형 autoscaling), security(private IP + TLS), operational excellence(관리형 서비스, 모니터링). 흔한 오해: Pub/Sub는 범용 ingestion buffer로 자주 권장되지만, 여기서는 추가 hop을 만들고 Kafka Connect 인프라 및 운영 오버헤드를 요구합니다. 또한 proxy VM(옵션 B)은 네트워킹을 단순화하는 것처럼 보이지만, 단일 장애 지점과 병목을 도입하여 수평 확장 요구사항과 충돌합니다. 시험 팁: 요구사항이 “최소 hop/구성 요소”와 엄격한 private connectivity를 강조할 때는, 관리형 확장 처리 서비스(Dataflow)로의 direct connector(KafkaIO)를 우선 고려합니다. BigQuery에서 높은 속도의 streaming에는 오래된 streaming insert 패턴보다 Storage Write API를 선호합니다. 항상 throughput/latency 요구사항을 보안 및 확장성 제약을 만족하는 최소 서비스 수에 매핑하세요.

20
문제 20

You are building a regression model to estimate hourly fuel consumption for cargo drones from 70 telemetry features in historical flight logs stored in BigQuery. You have 120M labeled rows, you randomly shuffle the table and create an 85/15 train–test split, then train a 4-layer neural network with early stopping in TensorFlow. After evaluation, you observe that the RMSE on the training set is about 2x higher than on the test set (e.g., 3.0 L vs 1.5 L). To improve overall model performance without changing the dataset source, what should you do next?

test split을 늘리면 평가 지표의 분산을 약간 줄일 수는 있지만, 모델 자체를 개선하지는 못합니다. 120M rows에서는 15% test set(~18M)만으로도 이미 매우 커서 안정적인 추정치를 제공합니다. 또한 test set을 더 크게 만들면 training data가 줄어들어 training에 더 불리할 수 있으며, training RMSE가 비정상적으로 높은 이유를 해결하지 못합니다.

더 많은 데이터는 모델이 overfitting(높은 variance)일 때 또는 training set이 너무 작을 때 도움이 될 수 있습니다. 여기서는 라벨된 120M examples가 이미 방대하며, 증상은 variance가 아니라 training set을 맞추지 못하는 것(높은 training RMSE)입니다. 80M examples를 추가로 수집하는 것은 비용과 시간이 많이 들고, underfitting이나 과도하게 제약된 training dynamics를 직접적으로 해결하지 못합니다.

더 강한 regularization은 overfitting을 완화하기 위해 사용되며, overfitting은 보통 training error가 매우 낮고 test error가 더 높게 나타납니다. 이 시나리오에서는 training RMSE가 test RMSE보다 더 나쁘므로, 모델이 training data를 잘 맞추지 못하는 것(high bias) 또는 training이 너무 일찍 중단되는 것을 시사합니다. dropout/L2를 추가하면 보통 training error가 더 증가하고 전체 성능도 악화될 가능성이 큽니다.

model capacity를 늘리는 것은 underfitting/high bias에 대한 표준 대응입니다. 즉, 모델이 underlying function을 충분히 표현하지 못해 training과 test 성능이 모두 최적이 아니며, training error가 높게 남을 수 있습니다. layer/neurons 추가, 더 풍부한 feature interactions, 또는 더 적합한 architecture를 통해 training loss를 줄일 수 있고, 특히 매우 큰 데이터셋에서는 test loss도 함께 개선되는 경우가 일반적입니다.

문제 분석

핵심 개념: 이 문제는 ML 모델 진단(편향/분산)과 train vs test 지표가 예상과 다르게 동작할 때 무엇을 바꿔야 하는지를 평가합니다. 표준 i.i.d. train/test split에서는 모델이 training set에 최적화되므로 training error는 보통 test error보다 작거나 같습니다. 그런데 training RMSE가 test RMSE보다 ~2배 더 나쁘다면, 가장 흔한 해석은 underfitting 또는 과도하게 제약된 training 과정(예: early stopping이 너무 공격적임, regularization이 과도함, 모델 capacity가 부족함, 또는 optimization이 수렴하지 않음)입니다. 정답이 맞는 이유: 데이터셋이 매우 크고(라벨된 120M rows) 85/15 split 전에 무작위로 shuffle되었으므로, test set은 대표성이 있어야 하며 기대값 관점에서 “더 쉬운” 데이터가 되기 어렵습니다. training RMSE가 크게 높다는 것은 모델이 training distribution을 잘 맞추지 못한다는 신호입니다. 다음 개선 단계는 bias를 줄이기 위해 model capacity를 늘리고/또는 더 풍부한 상호작용을 허용하는 것입니다: layer/neurons를 추가하거나, layer를 더 넓히거나, categorical telemetry를 위한 feature crosses/embeddings를 추가하거나, 데이터에 더 적합한 architecture(예: residual MLP, telemetry가 sequential이라면 time window에 대한 attention)를 사용하는 방식입니다. 또한 training이 더 낮은 training loss에 도달할 수 있도록 early stopping patience와 learning-rate schedules도 재검토해야 합니다. 핵심 기능 / best practices: TensorFlow/Keras tuning(learning rate, batch size, patience)을 사용하고, 체계적인 탐색을 위해 Vertex AI Training + hyperparameter tuning을 고려하세요. training과 validation curve를 모두 모니터링하고, 둘 다 높고 서로 가깝다면 전형적인 underfitting입니다. BigQuery를 source로 사용한다면 데이터는 그대로 두고 feature representation(정규화, missing values 처리)과 모델의 표현력을 개선하세요. 흔한 오해: 사람들은 종종 “overfitting”으로 성급히 결론내리고 regularization을 추가하지만, overfitting은 보통 training error가 낮고 test error가 더 높게 나타납니다. test split size를 늘리는 것은 모델 품질을 개선하지 않으며, 평가 분산만 바꿉니다. 더 많은 데이터를 수집하는 것은 variance가 지배적일 때 도움이 되는데, 여기서는 120M rows이므로 데이터 양이 병목일 가능성은 낮습니다. 시험 팁: Professional Data Engineer에서는 train/validation/test 지표 해석에 능숙해야 합니다. train error > test error라면 underfitting, training-time 제약(early stopping), 또는 data leakage/metric mismatch를 의심하세요. 제시된 선택지 중에서는 data source를 바꾸지 않으면서 취할 수 있는 최선의 교정 조치가 capacity를 늘리는 것입니다.

합격 후기(9)

M
M*********Nov 25, 2025

학습 기간: 1 month

I tend to get overwhelmed with large exams, but doing a few questions every day kept me on track. The explanations and domain coverage felt balanced and practical. Happy to say I passed on the first try.

L
L*************Nov 25, 2025

학습 기간: 2 months

Thank you ! These practice questions helped me pass the GCP PDE exam at the first try.

S
S***********Nov 21, 2025

학습 기간: 1 month

The layout and pacing make it comfortable to study on the bus or during breaks. I solved around 20–30 questions a day, and after a few days I could feel my confidence improving.

정
정**Nov 19, 2025

학습 기간: 1 month

해설이 영어 기반이긴 하지만 나름 도움 됐어요! 실제 시험이랑 문제도 유사하고 좋네요 ㅎㅎ

E
E********Nov 16, 2025

학습 기간: 2 months

I combined this app with some hands-on practice in GCP, and the mix worked really well. The questions pointed out gaps I didn’t notice during practice labs. Good companion for PDE prep.

모의고사

Practice Test #1

50 문제·120분·합격 700/1000

Practice Test #2

50 문제·120분·합격 700/1000

다른 GCP 자격증

Google Professional Cloud DevOps Engineer

Google Professional Cloud DevOps Engineer

Professional

Google Associate Cloud Engineer

Google Associate Cloud Engineer

Associate

Google Professional Cloud Network Engineer

Google Professional Cloud Network Engineer

Professional

Google Associate Data Practitioner

Google Associate Data Practitioner

Associate

Google Cloud Digital Leader

Google Cloud Digital Leader

Foundational

Google Professional Cloud Security Engineer

Google Professional Cloud Security Engineer

Professional

Google Professional Cloud Architect

Google Professional Cloud Architect

Professional

Google Professional Cloud Database Engineer

Google Professional Cloud Database Engineer

Professional

Google Professional Cloud Developer

Google Professional Cloud Developer

Professional

Google Professional Machine Learning Engineer

Google Professional Machine Learning Engineer

Professional

지금 학습 시작하기

Cloud Pass를 다운로드하여 모든 Google Professional Data Engineer 기출 문제를 풀어보세요.

Get it on Google PlayDownload on the App Store
Cloud PassCloud Pass

IT 자격증 문제풀이 앱

Get it on Google PlayDownload on the App Store

자격증

AWSGCPMicrosoftCiscoCompTIADatabricks

법률

FAQ개인정보 처리방침서비스 약관

회사

문의하기계정 삭제

© Copyright 2026 Cloud Pass, All rights reserved.

이동 중에도 모든 문제를 풀고 싶으신가요?

앱 받기

Cloud Pass를 다운로드하세요 — 모의고사, 학습 진도 추적 등을 제공합니다.