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

GCP

Google Professional Cloud DevOps Engineer

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

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

AI 기반

3중 AI 검증 답안 및 해설

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

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

시험 도메인

Bootstrapping and Maintaining a Google Cloud Organization출제율 20%
Building and Implementing CI/CD Pipelines (Application, Infrastructure, ML Workloads)출제율 25%
Applying Site Reliability Engineering (SRE) Practices출제율 18%
Implementing Observability Practices and Troubleshooting Issues출제율 25%
Optimizing Performance and Cost출제율 12%

실전 문제

1
문제 1

Your media-streaming company operates on Google Cloud with 6 departments each mapped to a folder under the organization; there are 120 existing projects and about 10 new projects are created every month, and the security team requires that every log entry (all log types and resource types, across all regions) be exported in near real time to a third-party SIEM that ingests from a Cloud Pub/Sub topic named siem-ingest, so you must implement a solution that automatically covers all current and future projects with minimal ongoing maintenance and does not move logs into Cloud Logging buckets; what should you do?

오답입니다. organization-level aggregated sink는 현재 및 향후 모든 프로젝트를 포괄하는 올바른 범위이지만, 대상이 Cloud Logging log bucket입니다. 문제는 Pub/Sub에서 수집하는 서드파티 SIEM으로 내보내야 하며, Cloud Logging bucket으로 로그를 이동하면 안 된다고 명시합니다. 이 옵션은 대상 제약을 위반하고 SIEM 통합 요구사항을 충족하지 못합니다.

부분적으로는 맞지만 최선은 아닙니다. Pub/Sub로 내보내는 folder-level aggregated sink도 로그 내보내기는 가능하지만, 6개의 sink(부서 folder당 1개)를 생성하고 관리해야 합니다. 이는 지속적인 유지보수를 증가시키고 프로젝트가 folder 간 이동하거나 조직 구조가 변경될 때 위험을 초래합니다. 모든 프로젝트를 최소 유지보수로 커버해야 하므로 organization-level sink가 더 적합합니다.

정답입니다. siem-ingest Pub/Sub topic으로 내보내는 organization-level aggregated sink는 조직 내 모든 기존 프로젝트의 로그와 새로 생성되는 프로젝트의 로그를 자동으로 포함하여 최소 유지보수 요구사항을 충족합니다. 모든 로그와 일치하는 inclusion filter(예: resource.type:* 또는 filter 없음)를 사용하면 Cloud Logging bucket을 사용하지 않고도 Pub/Sub를 통해 거의 실시간으로 모든 로그 유형과 리소스 유형을 내보낼 수 있습니다.

오답입니다. project-level sink는 기존 120개 프로젝트를 구성해야 하고, 이후 매달 약 10개의 신규 프로젝트에 대해 같은 작업을 반복해야 합니다. 이는 운영 오버헤드가 크고 오구성에 취약하여 SIEM 커버리지에 공백이 생길 수 있습니다. 이는 최소한의 지속적 유지보수 및 향후 프로젝트 자동 커버 요구사항과 정면으로 배치됩니다.

문제 분석

핵심 개념: 이 문제는 Cloud Logging sink(특히 aggregated sink)와 조직 전체에서 최소한의 유지보수로 대규모 로그를 내보내는 방법을 평가합니다. 또한 외부 SIEM과 거의 실시간으로 통합하기 위해 올바른 sink 범위(project/folder/org)와 대상 유형(Pub/Sub)을 선택하는지도 평가합니다. 정답이 맞는 이유: 조직 수준의 aggregated sink는 조직 내 모든 프로젝트의 로그를 내보내며, 향후 생성될 프로젝트까지 프로젝트별 설정 없이 자동으로 포함합니다. SIEM이 Pub/Sub topic(siem-ingest)에서 수집하고, 요구사항에서 Cloud Logging bucket으로 로그를 이동하지 말라고 명시했으므로 sink 대상은 Pub/Sub(로그 bucket 아님)이어야 합니다. 모든 로그와 일치하는 inclusion filter(예: resource.type:* 또는 빈 filter)를 설정하면 모든 로그 유형과 리소스 유형이 내보내집니다. 이는 Cloud Logging이 글로벌 서비스이고 sink가 리소스 실행 위치와 무관하게 로그를 캡처하므로 “모든 리전” 요구사항도 충족합니다. 주요 기능 / 구성 / 모범 사례: - 대상이 pubsub.googleapis.com/projects/PROJECT_ID/topics/siem-ingest 인 organization-level aggregated sink를 사용합니다. - sink의 writer identity에 topic에 대한 Pub/Sub Publisher 권한이 있는지 확인합니다. - Pub/Sub 처리량과 보존을 고려합니다: SIEM 수집 버스트에는 충분한 topic quota와 subscriber 스케일링이 필요할 수 있습니다. - 운영 오버헤드를 최소화하기 위해 단일 org-level sink를 사용합니다. 이는 Google Cloud Architecture Framework의 운영 우수성(중앙집중식, 자동화된 거버넌스) 원칙과 일치합니다. 흔한 오해: - “folder별로 반복”(옵션 B)은 중앙집중식처럼 보일 수 있지만, 여전히 6개의 sink를 만들고 지속적인 거버넌스 오버헤드가 발생합니다. 또한 프로젝트가 folder 간 이동하거나 새 folder가 추가될 경우 누락 위험이 있습니다. - “project-level sink”(옵션 D)는 이 규모에서 가장 오류가 발생하기 쉽고 최소 유지보수 요구사항을 위반합니다. - “log bucket 대상을 사용”(옵션 A)은 Cloud Logging bucket으로 로그를 이동하지 말라는 요구사항과 충돌하며, Pub/Sub를 통해 서드파티 SIEM으로 직접 전달하지도 못합니다. 시험 팁: - 요구사항이 “현재 및 향후 모든 프로젝트”라면 organization-level aggregated sink를 우선 고려합니다(범위를 의도적으로 제한하는 경우 folder-level). - 대상이 외부 시스템이면 Pub/Sub가 일반적인 거의 실시간 내보내기 메커니즘입니다. - “bucket으로 로그를 이동하지 말 것” 같은 제약을 주의하세요. 이는 log bucket 대상을 배제하며, 보통 Pub/Sub 또는 BigQuery export를 시사합니다.

2
문제 2

You manage the release pipeline for a payments API running on a regional GKE cluster in us-central1. The API is exposed via a Kubernetes Service (ClusterIP) behind an HTTP Ingress managed by Cloud Load Balancing. You implement blue/green by running two Deployments: pay-blue-v1 and pay-green-v2, each with 10 replicas and labels color=blue/green. During the cutover, you updated the Service selector to color=green to send 100% of ~1,500 RPS to pay-green-v2. Within 2 minutes, the HTTP 5xx error rate spikes to 7%, breaching the 1% SLO target. You must roll back immediately with less than 30 seconds of impact, without rebuilding images or modifying the Ingress configuration. What should you do?

green Deployment에서 kubectl rollout undo를 수행하면 green Deployment를 뒷받침하는 ReplicaSet이 바뀌지만, 트래픽의 100%를 green으로 보낸 라우팅 결정 자체를 직접 해결하지는 못합니다. 또한 Pods를 재생성하고 Ready 상태가 되어야 할 수 있어 Service selector flip보다 더 오래 걸릴 수 있습니다. 추가로, green의 “previous ReplicaSet”이 검증된 정상 blue 버전에 해당하지 않을 수도 있습니다.

Artifact Registry에서 container image를 삭제하고 green Pods를 삭제하는 것은 운영적으로 위험하고 느린 대응입니다. 이미지 삭제는 즉각적인 롤백 메커니즘이 아니며, 향후 rollouts 또는 node의 image pull을 깨뜨릴 수 있습니다. Pods 삭제는 churn과 일시적 오류를 유발할 수 있고, Service selector도 변경하지 않는 한 트래픽이 blue로 돌아간다는 보장도 없습니다.

Service selector를 color=blue로 되돌리는 것은 Service 기반 blue/green의 정석적인 롤백입니다. 빠르며(단일 object 업데이트), 이미지를 다시 빌드할 필요가 없고, load balancer가 동일한 Service를 계속 타겟팅하므로 Ingress 변경도 필요하지 않습니다. 전파 지연과 장애 범위를 최소화하면서 마지막으로 검증된 정상 백엔드 세트를 복구합니다.

green Deployment를 0으로 scale하면 endpoints가 제거되어 간접적으로만 트래픽이 다른 곳으로 가도록 강제할 수 있으며(그리고 endpoints가 제거되고 연결이 reset되는 동안 5xx가 발생할 수 있음), 또한 검증된 정상 blue 라우팅을 명시적으로 복구하지도 않습니다. Service에 대체 endpoints가 있다는 가정에 의존하며, selector flip보다 타이밍 예측이 덜 가능합니다. 필요 이상으로 강한 완화 조치입니다.

문제 분석

핵심 개념: 이 문제는 Kubernetes Service selector를 변경하여 트래픽을 전환하는 방식으로 구현된 GKE의 blue/green에 대해, 빠른 롤백을 테스트합니다. Ingress와 Cloud Load Balancer는 Service로 라우팅하며, Service selector가 어떤 Pods가 트래픽을 받는지 결정합니다. SRE 관점에서는 상위 라우팅을 변경하지 않으면서, blast radius를 최소화하고 SLO를 복구하기 위한 신속한 완화 조치가 필요합니다. 정답이 맞는 이유: 이미 Service selector를 color=blue에서 color=green으로 변경하여 cutover를 수행했습니다. “영향 <30초”를 만족하고 이미지를 다시 빌드하거나 Ingress를 수정하지 않는 가장 빠르고 위험이 낮은 롤백은 Service selector를 즉시 color=blue로 되돌리는 것입니다. 이렇게 하면 green Deployment는 이후 디버깅을 위해 그대로 유지하면서, 이전에 검증된 정상 백엔드 세트(pay-blue-v1)를 복구합니다. 이 변경은 Service object에 대한 작은 API 업데이트이며, kube-proxy/iptables(또는 eBPF dataplane)가 endpoints를 빠르게 업데이트합니다. 또한 load balancer는 동일한 Service VIP로 계속 트래픽을 보내므로 Ingress/GLB 전파 지연이 발생하지 않습니다. 핵심 기능 / 모범 사례: - Kubernetes에서 blue/green은 흔히 안정적인 Service에 대해 selector를 flip하는 방식으로 구현되며, 롤백도 동일하게 다시 flip하는 것입니다. - 이는 Google Cloud Architecture Framework의 reliability 원칙(빠른 복구를 위한 설계, 장애 시 변경 범위 최소화)과 일치합니다. - green을 계속 실행하면 증거(logs/metrics/traces)를 보존하고, 통제된 재테스트가 가능합니다. 흔한 오해: - green Deployment에 대해 롤백(kubectl rollout undo)을 수행하면 green의 Pods는 바뀌지만, 즉각적인 문제는 현재 트래픽이 green으로 라우팅되고 있다는 점입니다. undo가 성공하더라도 정확히 blue 버전을 복구하지 못할 수 있고, selector flip보다 시간이 더 걸릴 수 있습니다. - 이미지나 Pods를 삭제하는 것은 느리고 위험하며, 결정론적인 롤백 메커니즘이 아닙니다. - green을 0으로 scale하는 것도 가능하지만, 실패/endpoint churn을 유발하고 endpoints가 drain되는 동안 일시적인 5xx가 발생할 수 있습니다. 또한 검증된 정상 백엔드를 복구하는 것보다 덜 명시적입니다. 시험 팁: Ingress가 안정적이고 blue/green이 Service selectors로 구현되어 있다면, 가장 빠른 롤백은 selector를 이전 label로 되돌리는 것입니다. 검증된 정상 상태를 복구하는 가장 작고 되돌릴 수 있는 변경을 우선하고, 장애 중에 추가적인 변수를 늘리는 조치(이미지 삭제, rollouts)는 피하세요.

3
문제 3

Your company runs a payments API behind an NGINX Ingress Controller on a GKE Standard cluster with three n2-standard-4 nodes; the Ops Agent DaemonSet is deployed on all nodes and forwards access logs to Cloud Logging. In the past hour you observed suspicious traffic from the IP address 198.51.100.77, and you need to visualize the per-minute count of requests from this IP in Cloud Monitoring without changing application code or deploying additional collectors. What should you do to achieve this with minimal operational overhead?

정답입니다. 이는 기존 로그 ingest(Ops Agent -> Cloud Logging)를 활용하고, managed logs-based counter metric으로 매칭되는 log entry를 Monitoring time series로 변환합니다. client IP(198.51.100.77)로 filtering하면 60-second alignment로 차트화했을 때 분당 요청 수가 산출됩니다. 애플리케이션 변경 없음, 추가 collector 없음이라는 제약을 만족하며, 운영 오버헤드가 최소입니다.

오답입니다. 로그를 스크레이프하고 custom metrics를 push하는 CronJob은 운영 부담(스케줄링, 권한, 재시도, 스케일링, 파싱 정확성)을 추가하며, 부하나 log rotation 상황에서 취약합니다. 또한 logs-based metrics가 이미 제공하는 기능을 중복합니다. 동작할 수는 있지만 “최소 운영 오버헤드” 요구사항을 위반하며, 권장되는 managed 접근이 아닙니다.

오답입니다. payments API를 수정해 IP별 counter를 export하려면 애플리케이션 코드 변경, 재배포, 그리고 metric cardinality 관리가 필요합니다(per-IP metrics는 cardinality와 비용이 폭증할 수 있음). 문제에서 애플리케이션 코드 변경을 명시적으로 금지합니다. OpenTelemetry를 쓰더라도, 필요한 신호가 이미 ingress access logs에 존재하므로 불필요하게 무겁습니다.

오답입니다. Ops Agent metrics receiver는 시스템 및 지원되는 애플리케이션 metrics(CPU, memory, disk, 일부 service metrics)를 수집하지만, access logs로부터 client IP별 요청 수를 추론하지는 않습니다. IP별 요청 데이터는 보통 HTTP access logs 또는 특화된 L7 telemetry에서만 얻을 수 있습니다. node/application metrics에 의존하면 특정 IP에 대한 분당 카운트를 만들 수 없습니다.

문제 분석

핵심 개념: 이 문제는 GKE에서의 Google Cloud observability 패턴을 테스트합니다: 기존 로그 스트림(Ops Agent를 통해 이미 Cloud Logging에 들어와 있는 NGINX Ingress access logs)을 애플리케이션 코드 변경이나 collector 추가 없이, logs-based metrics를 사용해 Cloud Monitoring의 time-series 데이터로 변환하는 방법입니다. 정답이 맞는 이유: 이미 ingress access logs가 Cloud Logging에 중앙화되어 있습니다. “특정 client IP에서 분당 요청 수”를 시각화하는 가장 낮은 오버헤드 방식은 client IP가 198.51.100.77인 log entry를 매칭하는 logs-based counter metric을 만드는 것입니다. Cloud Logging이 매칭되는 entry를 카운트하고 해당 metric을 Cloud Monitoring으로 내보내며, Cloud Monitoring에서 1-minute alignment/aggregation으로 차트화할 수 있습니다. 이 접근은 managed, scalable하며 클러스터에 새로운 runtime component가 필요하지 않습니다. 주요 기능 / 구성: - Ops Agent logging receiver: NGINX Ingress access log file/stream이 ingest되고 있는지 확인합니다(설정에 따라 file receiver 또는 fluent-bit pipeline인 경우가 많음). 로그가 이미 Cloud Logging에 존재한다면 추가 agent 변경이 필요 없을 수 있습니다. - Logs-based metrics (counter): client IP를 담고 있는 log payload field에 대한 filter를 정의합니다(NGINX의 경우 structured logs에서는 보통 remote_addr / client_ip이거나, text에서 파싱됨). 매칭되는 각 entry를 카운트하도록 counter metric을 사용합니다. - Cloud Monitoring charting: logs-based metric에 대한 chart를 만들고 alignment period를 60s로 설정해 분당 카운트를 얻습니다. 필요하면 ingress, namespace, status code별로 pivot할 수 있도록 grouping labels를 추가합니다. - Architecture Framework alignment: Observability pillar에 부합합니다—중앙화된 logging/metrics와 managed services를 사용하고, 운영 부담을 최소화하며, 빠른 조사(investigation)를 가능하게 합니다. 흔한 오해: - “custom metric pipeline이 필요하다”: 많은 사람들이 로그를 스크레이프해서 custom metrics를 push해야 한다고 생각합니다. 하지만 logs-based metrics는 logs에서 metrics로의 managed 변환을 이미 제공합니다. - “node/application metrics를 사용한다”: 표준 metrics receiver는 client IP별 요청 수를 만들지 못합니다. 그 데이터는 일반적인 system metrics가 아니라 access logs에 있습니다. 시험 팁: 로그에서 파생된 metrics(카운트, rate, error pattern)가 필요하고 코드 변경이나 collector 추가가 금지되어 있다면, Cloud Logging + logs-based metrics + Cloud Monitoring dashboards/alerts를 떠올리세요. 또한 counter vs distribution metrics를 적절히 선택하고, 분당 시각화를 위해 1-minute alignment를 사용한다는 점을 기억하세요.

4
문제 4

Your team runs a CI pipeline that executes ~200 integration test jobs per day, and each job must call internal gRPC APIs that are reachable only on 10.20.0.0/16 in a Shared VPC with no external IPs or NAT; the security policy requires that test traffic must never traverse the public internet, you are not allowed to maintain bastion hosts or custom proxies, tests must finish within 10 minutes per run, and you want the least operational overhead for setup and ongoing management—what should you do?

Cloud Build Private Pools는 VPC subnet 내부에 private IP로 프로비저닝된 워커에서 빌드 단계를 실행합니다. 풀을 Shared VPC subnet에 연결하면 external IP, NAT, bastion, 커스텀 proxy 없이 10.20.0.0/16 gRPC API로 직접 프라이빗 라우팅이 가능합니다. 이는 운영 부담이 가장 적은 접근이며 실행마다 VM을 프로비저닝하는 오버헤드를 피하므로 각 테스트 실행을 10분 이내로 유지하는 데 도움이 됩니다.

빌드마다 Compute Engine VM을 생성하면 트래픽을 프라이빗하게 유지할 수는 있지만, VM 프로비저닝 시간, 이미지 유지보수/하드닝, startup-script 신뢰성, quota 관리, 정리(cleanup) 로직 등 운영 오버헤드가 증가합니다. 또한 부트스트래핑과 의존성 설치로 인해 10분 테스트 윈도우를 초과할 위험이 있습니다. 이 방식은 프라이빗 CI 실행을 위해 특별히 설계된 managed Private Pool을 사용하는 것보다 더 복잡합니다.

internal HTTPS Application Load Balancer는 프런트엔드를 재설계하지 않는 한 gRPC-only 프라이빗 API에 적합하지 않으며, 여전히 러너에서의 프라이빗 연결을 보장해야 합니다. Cloud Build의 기본 워커는 VPC 내부에 있지 않으므로, 방화벽 규칙으로 접근을 허용하는 것만으로는 충분하지 않습니다(소스가 프라이빗 subnet이 아님). 또한 load balancer 구성을 추가하게 되며, 러너 경로에 대한 no-public-internet 제약을 직접적으로 해결하지 못합니다.

global external HTTPS Load Balancer는 서비스를 퍼블릭 인터넷에 명시적으로 노출하므로 테스트 트래픽이 퍼블릭 인터넷을 절대 경유하면 안 된다는 요구사항을 위반합니다. Cloud Armor로 접근을 제한할 수는 있지만 경로를 프라이빗하게 만들지는 못하고, 단지 퍼블릭 트래픽을 필터링할 뿐입니다. 이 옵션은 공격 표면과 운영 복잡도를 증가시키며, 따라서 명시된 보안 정책과 가장 덜 부합합니다.

문제 분석

핵심 개념: 이 문제는 Cloud Build 네트워킹을 사용해 프라이빗 서비스에 대한 안전한 CI 연결을 테스트합니다. 핵심 기능은 Cloud Build Private Pools로, 빌드 워커가 private IP로 VPC 내에서 실행되도록 하여 퍼블릭 인터넷을 경유하지 않고 내부 엔드포인트에 대한 프라이빗 east-west 액세스를 가능하게 합니다. 정답이 맞는 이유: Cloud Build의 기본 워커는 Google 관리 인프라에서 실행되며, 일반적으로 특별한 연결 구성을 추가하지 않으면 퍼블릭 egress를 통해 대상에 접근합니다. 여기서는 API가 Shared VPC의 10.20.0.0/16 내부에서만 도달 가능하고 external IP가 없으며 NAT도 없고, 정책상 퍼블릭 인터넷 경로를 금지하며 bastion/proxy 유지도 금지합니다. Shared VPC subnet에 연결된 Private Pool은 빌드 실행 환경을 프라이빗 네트워크 내부에 직접 배치하므로 gRPC 호출이 VPC/Shared VPC 내에서 프라이빗하게 라우팅됩니다(또한 VPC가 global이고 라우팅/방화벽이 허용하면 리전 간도 가능). 이는 추가 VM 프로비저닝 단계 없이 풀 워커에서 직접 테스트를 실행하므로 10분 런타임 요구사항을 충족합니다. 주요 기능 / 구성: - 서비스 프로젝트에서 Cloud Build Private Pool을 생성하고, 필요한 경우 Private Service Connect/Shared VPC 권한과 함께 적절한 Shared VPC subnet(호스트 프로젝트)에 연결합니다. - 방화벽 규칙이 풀 워커 IP 범위(subnet 범위)가 필요한 포트에서 gRPC 백엔드에 도달하도록 허용하는지 확인합니다. - 최소 권한 IAM 적용: 풀 사용 및 필요한 API 액세스를 위한 Cloud Build service account 권한을 부여합니다. - Google Cloud Architecture Framework 보안 원칙(프라이빗 연결, 노출 최소화, 운영 부담 감소)과 일치합니다. 흔한 오해: - “빌드마다 ephemeral VM을 생성”은 프라이빗해 보이지만, 프로비저닝 시간, quota 관리, 이미지 하드닝, 라이프사이클 복잡도를 추가합니다. - “앞단에 load balancer를 둔다”는 액세스 패턴을 개선할 수 있지만, 트래픽이 퍼블릭 인터넷을 절대 경유하면 안 된다는 요구사항을 해결하지 못하며, 추가 구성 요소와 정책 예외를 유발합니다. 시험 팁: Cloud Build가 엄격한 no-public-internet 요구사항 하에서 private RFC1918-only 서비스에 접근해야 하는 상황을 보면 Private Pools를 떠올리세요. 또한 Shared VPC 제약을 유의하세요: 풀을 올바른 subnet에 연결하고 firewall/IAM이 구성되어야 합니다. 운영 오버헤드를 줄이고 지연/실행 시간 제약을 충족하는 managed 솔루션을 선호하세요.

5
문제 5

A biotech company aggregates container and application logs from 15 Google Cloud projects into a single Cloud Logging bucket in a dedicated observability project using aggregated sinks with a 30-day retention policy. Compliance requires that each of the 8 product squads can only view logs originating from their own project(s), while the SRE team must be able to view all logs across all projects. You must implement least-privilege access, avoid duplicating data, and minimize ongoing costs and operational overhead. What should you do?

오답. 중앙 bucket의 _Default view에 Logs Viewer를 부여하면 각 squad가 해당 bucket에 저장된 모든 로그(다른 squad의 프로젝트 포함)를 쿼리할 수 있어 컴플라이언스를 위반합니다. SRE에 observability 프로젝트의 Logs Viewer를 부여하는 것은 광범위한 액세스 측면에서 괜찮지만, squad 액세스 모델은 default view가 필터링되지 않으므로 최소 권한이 아닙니다.

오답. custom IAM roles는 squad가 가지는 Logging 권한(permissions)을 제한할 수는 있지만, 공유 bucket 내에서 어떤 로그 엔트리가 보이는지까지 제한할 수는 없습니다. 요구사항은 데이터 수준 분리(특정 project IDs의 로그만)입니다. 이는 custom roles나 중앙집중화 이후 소스 프로젝트에서의 접근 제한이 아니라 log views(필터링된 views)로 달성합니다.

정답. 중앙 bucket에서 squad별로 하나의 log view를 만들고 해당 squad의 project IDs만 매칭되도록 필터를 적용한 다음, 그 view에 roles/logging.viewAccessor를 부여합니다. 이렇게 하면 로그를 복제하지 않고도 최소 권한 가시성이 강제됩니다. SRE에는 _AllLogs 같은 넓은 view에 대한 액세스를 부여하여 모든 프로젝트에 걸쳐 쿼리할 수 있게 합니다. 이는 컴플라이언스를 충족하면서 비용과 운영 오버헤드를 최소화합니다.

오답. 별도의 BigQuery datasets로 export하면 데이터가 중복되어 비용(BigQuery 스토리지 및 쿼리 비용)과 운영 오버헤드(여러 sinks/datasets/permissions)가 증가합니다. 또한 SRE에 Logs Writer를 부여하는 것은 로그 조회와 무관하며 최소 권한을 위반합니다. 이 옵션은 액세스 분리는 해결하지만 “데이터 중복 회피”와 “비용/오버헤드 최소화” 요구사항을 충족하지 못합니다.

문제 분석

핵심 개념: 이 문제는 aggregated sinks를 사용한 중앙집중식 Cloud Logging과, 여러 소스 프로젝트가 단일 log bucket에 기록할 때 최소 권한(least privilege) 읽기 액세스를 어떻게 강제할지 평가합니다. 핵심 기능은 Cloud Logging log views (bucket views)와 IAM (Logs View Accessor)을 결합하여 로그 데이터를 복제하지 않고도 사용자가 쿼리할 수 있는 범위를 제한하는 것입니다. 정답인 이유: aggregated sinks를 사용하면 모든 로그가 observability 프로젝트의 하나의 bucket으로 들어갑니다. bucket의 default view에 액세스를 부여하면 사용자는 해당 bucket의 모든 엔트리를 쿼리할 수 있습니다. 컴플라이언스를 충족하려면 각 squad는 자신의 프로젝트(들)에서 온 로그만 볼 수 있어야 하고 SRE는 전체를 볼 수 있어야 합니다. squad별로 별도의 log view를 만들고 resource.labels.project_id(또는 logName/project)에 대한 필터를 적용하면, 쿼리 시점에 보이는 로그 엔트리가 제한됩니다. 각 squad에 자신에게 해당하는 view에 대해서만 roles/logging.viewAccessor를 부여하면 최소 권한이 강제됩니다. SRE에는 (일반적으로 _AllLogs 같은) 넓은 범위의 view에 대한 액세스를 부여하여 모든 로그를 가로질러 쿼리할 수 있게 할 수 있습니다. 핵심 기능 / 모범 사례: - Log buckets는 보존(retention) 제어(이미 30일)와 중앙집중식 스토리지를 제공합니다. - Log views는 데이터를 복사하지 않고도 bucket의 필터링된 이름 있는 부분집합을 제공하여, Google Cloud Architecture Framework의 보안 원칙인 최소 권한에 부합합니다. - view 수준의 IAM 바인딩(roles/logging.viewAccessor)은 공유 bucket에서 멀티 테넌트 로그 액세스를 위한 의도된 메커니즘입니다. - 이 접근은 비용과 오버헤드를 최소화합니다: 추가 export 없음, 중복 스토리지 없음, 가벼운 view/IAM 관리만 필요합니다. 흔한 오해: 많은 사람이 observability 프로젝트에 프로젝트 수준 Logs Viewer를 부여하면 충분하다고 생각하지만, 그러면 중앙집중화된 모든 로그가 노출됩니다. 또 다른 사람들은 custom roles로 해결하려 하지만, custom roles는 공유 bucket 내부에서 프로젝트별 row-level 필터링을 강제할 수 없습니다—views가 이를 수행합니다. 시험 팁: “central logging bucket” + “서로 다른 팀은 자기 로그만 볼 수 있음” + “중복을 피함”을 보면, Cloud Logging bucket views + roles/logging.viewAccessor를 떠올리세요. BigQuery/Storage로의 export는 분석/아카이빙 용도이지, 최소 권한 기반의 기본 조회 메커니즘이 아니며 비용과 운영 복잡도를 증가시킵니다.

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

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

6
문제 6

Your team operates a high-throughput webhook processor on Cloud Run (fully managed) in us-central1 with min instances set to 0, max instances set to 40, request concurrency set to 80, and container limits of 1 vCPU and 1 GiB memory; over the last 14 days peak traffic reached 2,500 RPS with p95 latency under 300 ms, and you need to accurately identify actual container CPU and memory utilization per revision to right-size resources and reduce Cloud Run costs by at least 20% without changing application code; which tool should you use to get these utilization metrics across all revisions?

Cloud Trace는 분산 추적(distributed tracing)을 위한 것으로, 엔드투엔드 요청 latency와 서비스 전반에서 시간이 소비되는 위치를 보여줍니다. 느린 요청을 진단하고 병목을 찾는 데는 도움이 되지만, Cloud Run revision별 권위 있는 컨테이너 CPU 및 메모리 사용률 메트릭을 제공하지는 않습니다. Trace 데이터는 요청 샘플링 기반이며, 모든 revision에 대한 용량/적정화 의사결정에 적합한 소스가 아닙니다.

Cloud Profiler는 코드 수준 프로파일링(CPU time, heap, allocations)을 제공하며 애플리케이션 성능 최적화에 유용합니다. 하지만 Cloud Run revision 전반에서 컨테이너 리소스 사용률(CPU/메모리 사용량 vs limit) 메트릭을 위한 1차 도구는 아닙니다. 또한 Cloud Run fully managed는 VM 기반 워크로드처럼 런타임에 Ops Agent를 설치하는 방식에 의존하지 않으므로, 요구사항과 맞지 않는 선택지입니다.

Cloud Monitoring이 정답인 이유는 Cloud Run이 컨테이너 CPU 및 메모리 사용률에 대한 내장 메트릭을 내보내고 revision별 필터링/그룹화를 지원하기 때문입니다. Metrics Explorer를 사용해 시간에 따른 사용률을 확인하고 revision_name으로 그룹화하며, revision을 비교하는 대시보드를 만들 수 있습니다. 이를 통해 애플리케이션 코드를 변경하지 않고도 정확한 적정화(CPU/메모리 limit, concurrency, min/max instances 조정)를 수행하여 비용을 줄일 수 있습니다.

Logs-based metrics는 로그 패턴 발생 횟수를 세거나 로그에서 숫자 필드를 추출할 수 있지만, 실제 컨테이너 CPU 및 메모리 사용률을 측정하는 신뢰할 수 있는 방법은 아닙니다. 또한 애플리케이션이 올바른 로그 데이터를 내보내는 것에 의존하는데, 문제에서 코드 변경을 금지하고 있습니다. 기존 로그가 있더라도 사용률을 추론하는 것은 간접적이고 오류가 발생하기 쉬우며, Cloud Monitoring의 네이티브 Cloud Run 메트릭에 비해 부적절합니다.

문제 분석

핵심 개념: 이 문제는 리소스 적정화(right-sizing)와 비용 최적화를 위한 Cloud Run 관측 가능성(observability)을 테스트합니다. 구체적으로, Cloud Run 서비스 전반에서 revision별로 정확한 컨테이너 CPU 및 메모리 사용률을 얻는 방법을 묻고 있으며, 이는 Cloud Monitoring(Google Cloud Observability의 일부)을 통해 수행합니다. 정답이 맞는 이유: Cloud Monitoring은 Cloud Run(fully managed)을 위한 1st-class 내장 메트릭을 제공하며, 여기에는 컨테이너 CPU 및 메모리 사용률, 요청 수, 인스턴스 수, 지연 시간(latency) 등이 포함됩니다. 이러한 메트릭은 애플리케이션 코드를 변경하지 않아도 자동으로 내보내지며, 서비스 이름과 revision 이름 같은 리소스 라벨로 필터링 및 그룹화할 수 있습니다. 따라서 시간에 따른 revision별 실제 사용률을 정량화하고, (예: 설정 변경 후) revision을 비교하며, 과도한 프로비저닝(예: p95 latency가 이미 낮은데 1 vCPU/1 GiB를 할당한 경우)을 식별하는 데 올바른 도구입니다. 주요 기능 / 사용 방법: Metrics Explorer에서 Cloud Run Revision / Cloud Run Service 메트릭(예: container CPU utilization 및 container memory utilization)을 선택합니다. 그런 다음 “revision_name”(그리고 필요 시 “service_name”)으로 그룹화하여 모든 revision에 걸친 사용률을 확인합니다. 대시보드를 구성해 피크/평균 사용률을 추적하고 요청률 및 인스턴스 수와 상관관계를 분석합니다. 이는 Google Cloud Architecture Framework의 cost optimization 및 operational excellence pillar에 맞춰 적정화 결정(CPU/메모리 limit, concurrency, min/max instances)을 지원합니다. 또한 limit 변경 후 회귀(regression)를 감지하기 위한 alerting policy도 만들 수 있습니다. 흔한 오해: Trace와 Profiler는 성능과 자주 연관되지만, Cloud Run에서 revision 전반에 걸친 권위 있는(authoritative) 컨테이너 수준 사용률 메트릭을 제공하지는 않습니다. logs-based metrics는 동작을 근사할 수는 있으나 CPU/메모리 사용률에는 신뢰할 수 없고, 애플리케이션 로깅에 의존하는데(그리고 코드를 변경할 수 없으므로) 적합하지 않습니다. 시험 팁: 관리형 컴퓨팅(Cloud Run, GKE, Compute Engine)에서 “사용률 메트릭(utilization metrics)”을 묻는다면 기본적으로 Cloud Monitoring을 선택하세요. Trace는 요청 latency 분해(breakdown), Profiler는 코드 수준 CPU/heap hotspot, logs-based metrics는 로그 이벤트 카운팅에 사용하며 인프라 사용률에는 쓰지 않습니다. 문제가 “across revisions”와 “no code changes”를 강조한다면, 라벨 기반 필터링/그룹화 및 대시보드를 활용하는 Monitoring을 떠올리면 됩니다.

7
문제 7

You are responsible for a customer-facing booking service deployed on Google Kubernetes Engine (GKE) using a blue/green deployment approach. The manifests include two Deployments (app-green and app-blue), a Service (app-svc), and an Ingress that routes traffic to the Service, as shown in the provided configuration. After updating app-green to the latest release, users report that most booking requests are failing in production, even though the release passed all pre-production tests. You must quickly restore service availability while giving developers a chance to debug the failing release. What should you do?

app-blue를 새 버전으로 업데이트하는 것은 blue/green 롤백의 목적을 무너뜨립니다. 새 릴리스가 장애를 유발한다면, 이를 blue로 승격하면 두 환경 모두가 문제 버전을 실행하게 되어 blast radius가 커질 가능성이 높습니다. 또한 마지막으로 검증된 정상 배포를 제거하여 복구를 더 어렵게 만들고 서비스 가용성 복구 시간을 증가시킵니다.

app-green을 이전 안정 버전으로 롤백하면 서비스를 복구할 수는 있지만, 가장 빠른 방법은 아니며 문제 Pod를 덮어써 버리기 때문에 개발자가 실패 릴리스를 디버깅할 수 있는 능력이 줄어듭니다. blue/green은 즉각적인 완화를 위해 트래픽을 안정 버전(blue)으로 되돌리는 동안, 실패 버전(green)은 배포된 상태로 유지하도록 설계되었습니다.

Service selector를 app: my-app만으로 변경하면(두 Deployment가 모두 app: my-app을 공유한다고 가정할 때) blue와 green Deployment의 Pod를 모두 선택하게 됩니다. 이는 사실상 통제되지 않은 canary/트래픽 분할 시나리오가 되어 사용자에게 보이는 오류가 계속 발생할 수 있고 동작이 일관되지 않게 됩니다. 또한 디버깅을 복잡하게 만들며 빠르게 가용성을 복구한다는 목표를 위반합니다.

Service selector를 app: my-app, version: blue로 변경하는 것은 전형적인 blue/green 트래픽 전환입니다. 이는 모든 프로덕션 트래픽(Ingress -> Service)을 즉시 안정적인 blue Pod로 라우팅하여 빠르게 가용성을 복구합니다. 실패 중인 green 릴리스는 개발자가 디버깅할 수 있도록 실행된 채로 격리되어 남을 수 있으며, logs, metrics, runtime state를 보존합니다.

문제 분석

핵심 개념: 이 문제는 Kubernetes labels/selectors를 사용하여 GKE에서 blue/green 배포 메커니즘을 테스트합니다. 일반적인 blue/green 구성에서는 두 개의 Deployment가 나란히 실행됩니다(blue = 안정 버전, green = 후보 버전). 트래픽은 안정적인 엔드포인트(Service/Ingress)가 어떤 Pod 집합을 대상으로 하는지 변경함으로써 전환됩니다. Ingress는 Service로 라우팅하고, Service는 labels를 통해 Pod를 선택합니다. 정답이 맞는 이유: 제공된 manifest에는 불일치가 있습니다. app-green이라는 Deployment는 version: blue로 라벨링되어 있는 반면, app-svc Service는 version: green을 선택합니다. app-green을 최신 릴리스로 업데이트한 후에도, 프로덕션 트래픽(Ingress -> Service)은 여전히 version: green과 일치하는 Pod로 라우팅됩니다. “green” Pod가 새로 업데이트된(그리고 실패 중인) 릴리스라면, 실패한 릴리스를 디버깅을 위해 계속 실행한 채로 가용성을 가장 빠르게 복구하는 방법은 Service selector를 검증된 정상 환경(blue)으로 다시 전환하는 것입니다. 옵션 D는 Service selector를 app: my-app, version: blue로 설정하여, green Deployment를 삭제하거나 롤백하지 않고도 즉시 모든 프로덕션 트래픽을 blue Pod로 전환합니다. 주요 특징 / 모범 사례: Kubernetes Service는 안정적인 virtual IP/DNS를 제공하고 label selector를 통해 엔드포인트를 동적으로 선택합니다. blue/green에서는 두 버전을 모두 배포해 둔 뒤 selector를 변경(또는 별도의 Service를 사용하고 Ingress backend를 전환)하여 트래픽을 뒤집습니다. 이는 SRE 관행과도 일치합니다. 즉, SLO를 복구하기 위한 빠른 롤백/완화 조치를 수행하면서도, 조사 목적의 실패 버전을 보존합니다. 또한 Google Cloud Architecture Framework의 신뢰성 원칙(빠른 복구와 통제된 변경을 위한 설계)도 지원합니다. 흔한 오해: 재배포로 롤백(옵션 B)하는 방법도 가능하지만 더 느리고, 실패 버전을 현장에서(in situ) 점검할 수 있는 능력을 제거합니다. blue를 새 버전으로 업데이트(옵션 A)하면 실패를 확산시킵니다. selector를 넓히는 것(옵션 C)은 의도치 않게 두 버전 모두로 트래픽을 보낼 수 있어 동작이 일관되지 않고 디버깅을 더 어렵게 만듭니다. 시험 팁: Ingress -> Service -> Pods 흐름을 보면, 트래픽 전환은 보통 Service selector 계층에서 수행된다는 점을 기억하세요. blue/green에서 가장 안전한 “지금 복구” 조치는 트래픽을 안정 색상(stable color)으로 다시 가리키고, 깨진 색상(broken color)은 디버깅과 사후 분석 데이터 수집을 위해 계속 실행하도록 두는 것입니다.

8
문제 8
(2개 선택)

You are setting up an automated container image build in Cloud Build for a payment reconciliation microservice. The source code is hosted in Bitbucket Cloud. Your compliance policy mandates that production-grade images must be built only from the release/v1 branch, and that all merges into release/v1 must be explicitly approved by the governance group with at least two approvers. You want the process to be as automated as possible while meeting these requirements. What should you do? (Choose two.)

pull request 트리거는 제안된 변경에 대해 테스트를 실행하는 데 유용할 수 있지만, 프로덕션 등급 이미지가 release/v1에서만 빌드되어야 한다는 요구사항을 충족하지 못합니다. PR 빌드는 종종 PR의 소스 브랜치 또는 임시 merge ref에서 실행되며, 결국 머지되지 않는 코드로부터 아티팩트를 생성할 수 있습니다. 이는 검증에는 좋지만, 통제된 프로덕션 이미지 생성에는 적합하지 않습니다.

included files 필터는 변경된 파일 경로를 기준으로 트리거 실행 시점을 제한할 뿐, 거버넌스 승인이나 브랜치 머지 정책을 다루지 않습니다. 또한 CODEOWNERS를 included files 필터에 추가하는 것은 개념적으로도 잘못입니다: CODEOWNERS는 리뷰 규칙을 위해 VCS에서 해석되며, 권한 부여를 위해 Cloud Build에서 해석되지 않습니다. 이는 거버넌스 승인 2건을 보장하지도, 빌드를 release/v1로 제한하지도 못합니다.

release/v1로 필터링된 push-to-branch 트리거는 자동화된 이미지 빌드가 release/v1 브랜치로 코드가 push/merge될 때만 발생하도록 직접 강제합니다. 이는 프로덕션 이미지가 올바른 브랜치 tip에서 빌드되도록 보장하는 가장 자동화된 방법입니다. 또한 feature 브랜치나 PR ref에서 빌드될 위험을 줄이고, 통제된 릴리스 워크플로에 부합합니다.

release/v1에 대한 Bitbucket 브랜치 보호는 “최소 2명의 승인자”와 “머지 전에 거버넌스 그룹이 명시적으로 승인”을 강제하기에 올바른 위치입니다. 이는 비준수 변경이 보호된 브랜치에 아예 반영되지 못하도록 방지합니다. 이는 예방적 제어(shift-left)이며 Cloud Build 트리거를 보완하여, 준수하는 머지만 프로덕션 빌드를 트리거할 수 있게 합니다.

Cloud Build 트리거 승인(approvals)은 빌드 실행 전에 수동 게이트를 추가하지만, release/v1로의 머지가 거버넌스 승인 2건을 갖도록 강제하지는 못합니다. Cloud Build의 Approval은 일반적으로 배포 승격이나 민감한 단계에 사용되며, VCS 머지-승인 정책을 충족하기 위한 것이 아닙니다. 또한 자동화를 저해하며, 빌드가 다른 방식으로 트리거되면 우회될 수 있습니다.

문제 분석

핵심 개념: 이 문제는 두 시스템 전반의 CI/CD 거버넌스 제어를 테스트합니다: (1) Cloud Build 트리거를 통해 프로덕션 이미지가 허용된 소스 브랜치에서만 빌드되도록 보장하는 것, (2) 소스 제어(Bitbucket)에서 해당 브랜치로의 머지가 승인 정책을 충족하도록 강제하는 것입니다. 규제 환경에서는 가장 강력한 제어가 가장 이른 지점(VCS)에서 정책을 강제하고, 이후 단계의 빌드를 자동화하는 것입니다. 정답이 맞는 이유: 프로덕션 등급 이미지는 release/v1에서만 빌드되도록 보장해야 합니다. 가장 직접적이고 자동화 가능한 방법은 release/v1 브랜치로의 push에 반응하는 Cloud Build 트리거(옵션 C)입니다. 이는 임의의 브랜치나 머지되지 않은 pull request가 아니라, 코드가 실제로 통제된 브랜치에 반영될 때만 빌드 파이프라인이 실행되도록 보장합니다. 별도로, 컴플라이언스 요구사항은 release/v1로의 모든 머지가 최소 2명의 승인자를 포함하여 거버넌스 그룹에 의해 명시적으로 승인되어야 한다는 것입니다. 이 제어는 Bitbucket 브랜치 보호(옵션 D)에 속하며, 최소 승인 수를 요구하고 누가 승인/머지할 수 있는지 제한할 수 있습니다. 이는 비준수 코드가 release/v1에 도달하기 전에 차단하므로, 빌드 단계에서 위반을 “적발”하려는 것보다 더 강력합니다. 주요 기능 / 모범 사례: - Cloud Build 트리거 필터링: “Push to a branch”를 구성하고 브랜치 regex를 release/v1만 매칭하도록 설정합니다. 이는 최소 권한 원칙에 부합하며 실수로 프로덕션 빌드가 발생하는 것을 줄입니다. - Bitbucket 브랜치 권한/보호: 2건의 승인을 요구하고, 특정 그룹(거버넌스)의 리뷰를 강제하며, 선택적으로 release/v1에 대한 직접 push를 제한합니다. - Architecture Framework 정렬: 거버넌스 및 보안 제어는 예방적(shift-left)이고 자동화되어야 하며, CI는 결정적이어야 하고 불변(immutable)이며 통제된 소스에 연결되어야 합니다. 흔한 오해: - PR 트리거(옵션 A)를 사용하면 머지되지 않은 코드를 빌드할 수 있으며, 이미지가 실제로 릴리스되는 내용과 일치한다는 보장을 제공하지 않습니다. - Cloud Build “Approval”(옵션 E)은 빌드 실행에 대한 수동 게이트이지, 브랜치로의 머지에 대한 거버넌스 제어가 아닙니다. 또한 운영 부담을 늘리고, 특정 그룹에서 2명의 승인자를 요구한다는 조건을 보장하지 못합니다. 시험 팁: 요구사항에 “브랜치 X로의 모든 머지는 승인되어야 한다”가 나오면 먼저 VCS 브랜치 보호를 보십시오. “브랜치 X에서만 빌드”가 나오면 CI 트리거의 브랜치 필터를 보십시오. 나중에 탐지하는 것보다 비준수를 예방하는 제어를 선호하십시오.

9
문제 9

You operate a high-frequency IoT telemetry ingestion service on Google Kubernetes Engine with separate production and staging clusters, each in its own VPC network; within each VPC, the API gateway nodes and stream processing nodes run on different subnets (api-subnet and proc-subnet), and a security analyst suspects an intermittent malicious beacon originating from the production API gateway nodes that occurs a few times per hour and lasts under 10 seconds, and you need to ensure network flow data is captured for forensic analysis without delaying the investigation; what should you do?

프로덕션 서브넷에만 Flow Logs를 활성화하는 것은 범위가 적절하고 스테이징 노이즈를 피하지만, sample volume scale 0.5는 10초 미만으로 지속되는 짧고 간헐적인 비콘을 놓칠 수 있습니다. 포렌식 조사에서는 몇 개의 플로우라도 누락되면 귀속(attribution)이나 타임라인 재구성이 불가능해질 수 있습니다. 이 옵션은 증거 완전성을 희생하면서 비용/볼륨을 너무 이르게 최적화합니다.

이 선택이 최선입니다. 의심 트래픽이 발생하고 통과하는 위치(프로덕션 api-subnet 및 proc-subnet)에서 즉시 VPC Flow Logs를 활성화하고, 짧은 비콘 활동을 캡처할 가능성을 극대화하기 위해 sample volume scale 1.0을 사용합니다. 인시던트 대응 우선순위(속도와 완전성)에 부합하며, 불필요한 로그 볼륨을 줄이기 위해 범위를 프로덕션으로 제한합니다.

스테이징에 먼저 롤아웃하면 프로덕션에서의 데이터 수집이 지연되어 “조사를 지연시키지 않고”라는 요구사항과 충돌합니다. 또한 스테이징에서 Flow Logs를 활성화해도 프로덕션에서 발생하는 비콘의 증거를 캡처하는 데 도움이 되지 않으며 로그 볼륨과 분석 노이즈만 증가시킵니다. 마지막으로 0.5 샘플링은 여전히 짧게 발생하는 플로우를 놓칠 위험이 있어 포렌식 목표를 약화시킵니다.

sample volume scale 1.0은 짧은 비콘을 캡처하는 데 적절하지만, 스테이징과 프로덕션 모두에 활성화하면 프로덕션 포렌식을 개선하지 못한 채 비용과 노이즈만 추가됩니다. 더 중요한 점은 스테이징 우선 롤아웃이 프로덕션 캡처를 지연시키며, 이는 조사를 지연시키지 말라는 요구사항에 의해 명시적으로 허용되지 않습니다.

문제 분석

핵심 개념: 이 문제는 VPC Flow Logs를 관측 가능성(observability) 및 포렌식 도구로서 평가합니다. VPC Flow Logs는 서브넷 내 VM NIC에 대한 네트워크 플로우 메타데이터(5-tuple, bytes, packets, 시작/종료 시간, 방향 등)를 캡처하며, GKE 노드 트래픽을 포함하고, 거의 실시간 조사를 위해 Cloud Logging으로 내보냅니다. 정답이 맞는 이유: 프로덕션 API gateway 노드에서 간헐적인 악성 비콘이 의심되며, 이는 시간당 몇 번만 발생하고 10초 미만으로 지속됩니다. 이렇게 짧게 발생하는 이벤트에서는 샘플링이 핵심 위험 요소입니다. 0.5로 샘플링하면 포렌식 상관관계에 필요한 정확한 플로우를 놓칠 수 있습니다. 관련된 프로덕션 서브넷(api-subnet 및 proc-subnet)에서 sample volume scale 1.0으로 Flow Logs를 활성화하면 단계적 롤아웃을 기다리지 않고 즉시 캡처 확률을 극대화할 수 있습니다. 요구사항에 “조사를 지연시키지 않고(without delaying the investigation)”라고 명시되어 있으므로, 스테이징 우선 변경은 부적절합니다. 주요 기능 / 구성: - 서브넷 단위 활성화: Flow Logs는 서브넷별로 구성되므로, api-subnet과 proc-subnet에서 활성화하면 관련 노드 풀과 east-west 트래픽 경로를 정확히 겨냥할 수 있습니다. - 샘플링(sample volume): 1.0은 대상 플로우를 모두 캡처하므로, 짧고 간헐적인 비콘에 가장 적합합니다. - 로그 가용성: Cloud Logging으로 내보내져 빠른 쿼리, 알림, BigQuery/SIEM으로의 내보내기가 가능합니다. - 비용/볼륨 트레이드오프: 1.0은 로그 볼륨과 비용을 증가시키지만, 긴급 포렌식에서는 비용보다 완전성이 더 중요합니다. 이후 인시던트가 파악되면 샘플링을 낮추거나 서브넷 범위를 좁힐 수 있습니다. 흔한 오해: - “항상 스테이징에 먼저 롤아웃”: 위험한 변경에 대한 좋은 SRE 관행이지만, 여기서는 관측 가능성만 추가하는 시간 민감한 변경입니다. 지연은 비콘을 캡처할 가능성을 낮춥니다. - “완전성을 위해 두 VPC 모두에 활성화”: 의심 소스는 프로덕션 API 노드입니다. 스테이징에 활성화하면 비용/노이즈만 늘고 프로덕션 인시던트에 대한 증거 수집을 개선하지 못합니다. 시험 팁: - 인시던트 대응 및 짧게 발생하는 네트워크 이상 징후에서는 캡처 충실도(더 높은 샘플링)와 속도를 우선하세요. - Flow Logs는 서브넷 범위임을 기억하고, 의심 소스와 관련 경로를 캡처할 수 있는 최소 범위를 선택하세요. - 결정을 Google Cloud Architecture Framework에 연결하세요: 관측 가능성과 보안 태세를 우선하고, 즉각적인 필요가 충족된 후 비용 최적화를 고려합니다.

10
문제 10

You are the on-call SRE for a live trivia streaming platform running on Google Kubernetes Engine (GKE) behind a global external HTTP(S) Load Balancer with geo-based routing; each of 4 regions (us-central1, europe-west1, asia-southeast1, southamerica-east1) contains 3 regional GKE clusters serving traffic via NEG backends, and at 18:05 UTC you receive a page that asia-southeast1 users have had 100% connection failures (HTTP 502) for the past 7 minutes while other regions are healthy and asia-southeast1 normally serves 25% of global requests and the availability SLO is 99.95% monthly with a rapid burn alert firing; you want to resolve the incident following SRE best practices. What should you do first?

정답입니다. 사용자 영향과 error-budget burn을 줄이기 위한 가장 빠르고 안전한 완화 조치입니다. asia-southeast1을 serving path에서 제거(백엔드 비활성화/드레이닝 또는 weight 조정)하여 트래픽이 정상 region으로 가도록 합니다. 이는 global external HTTP(S) Load Balancer의 multi-region 설계를 활용하며 되돌릴 수 있습니다. 서비스가 안정화된 후 asia-southeast1의 root cause를 조사할 수 있습니다.

CPU/memory 확인은 해당 region이 과부하인지 진단하는 데 도움이 될 수 있지만, 현재 502를 보는 사용자에 대한 가용성을 즉시 복구하지는 못합니다. 또한 region 전반에서 100% 502는 단순 리소스 포화보다는 더 광범위한 장애(health check, networking, ingress/proxy, endpoint readiness)를 시사하는 경우가 많습니다. SRE 대응에서는 심층 메트릭 분석보다 완화가 먼저입니다.

대규모 node pool 추가는 느리고 잠재적으로 비용이 큰 변경이며, 진행 중인 outage에서 1차 대응 조치가 아닙니다. 이는 capacity가 root cause라는 가정을 전제로 하지만, 증상(해당 region 전반의 HTTP 502)과는 부합하지 않습니다. scaling은 misconfiguration, network failure, load balancer/NEG health 문제를 해결하지 못할 수 있습니다. 먼저 traffic shift를 선호하고, 그 다음 표적화된 remediation을 수행하세요.

로그는 root cause 분석(예: ingress/controller 오류, upstream reset, TLS 이슈)에 유용하지만, regional outage가 전체 실패와 빠른 SLO burn을 유발하는 상황에서 첫 단계는 아닙니다. SRE 모범 사례는 먼저 사용자 영향을 완화(traffic reroute)한 뒤, logs/metrics/traces로 진단하고 영구적인 수정 사항을 구현하는 것입니다.

문제 분석

핵심 개념: 이 문제는 SRE 원칙에 따른 incident response를 평가합니다. 사용자 영향 감소를 우선하고, error budget을 보호하며, 안전하고 되돌릴 수 있는 완화 조치로 서비스를 빠르게 복구하는 것이 핵심입니다. 또한 geo-based routing과 NEG 백엔드를 사용하는 global external HTTP(S) Load Balancing을 다루며, 전체 서비스를 다운시키지 않고 단일 region을 격리할 수 있음을 포함합니다. 정답이 맞는 이유: asia-southeast1에서 7분 동안 100% connection failure(HTTP 502)가 발생했고 99.95% 월간 SLO에 대한 rapid burn alert가 발생한 상황에서는, 첫 번째 조치는 즉시 고객 영향을 완화하는 것입니다. asia-southeast1 백엔드를 비활성화/드레이닝(또는 해당 region이 0% 트래픽을 받도록 traffic steering 조정)하는 것은 빠르고 위험이 낮은 완화 조치로, 영향을 받는 사용자를 가장 가까운 정상 region으로 보내 가용성을 복구합니다. 이는 SRE 모범 사례(먼저 출혈을 멈추고, 그 다음 root cause를 조사)와 일치합니다. 또한 계속 error budget을 소모하지 않도록 하면서 트러블슈팅 시간을 확보해 줍니다. 주요 기능 / 모범 사례: Global external HTTP(S) Load Balancer는 health check와 traffic steering을 통해 multi-region 백엔드를 지원합니다. 특정 region이 502를 반환하면, serving에서 제거(또는 failover/weight 설정)하여 즉시 오류를 줄일 수 있습니다. GKE에서 NEG를 사용하면 backend health는 endpoint readiness와 health check에 좌우되며, regional 이슈(control plane, networking, misconfig, certificate, Envoy/Ingress 등)로 광범위한 502가 발생할 수 있습니다. SRE playbook은 일반적으로 심층 디버깅 전에 완화 단계(traffic shift, rollback, feature flag off)로 시작합니다. 흔한 오해: 로그/메트릭(B/D)부터 시작하고 싶을 수 있는데, 이는 root cause를 찾는 데는 도움이 되지만 사용자에게 보이는 오류를 즉시 줄이지는 못합니다. 또 다른 함정은 capacity(C)가 문제라고 가정하는 것입니다. 502는 단순 CPU/memory 압박보다는 backend unavailability, misrouting, proxy/upstream failure를 의미하는 경우가 많고, scaling은 느릴 수 있으며 근본 결함을 해결하지 못할 수 있습니다. 시험 팁: “rapid burn”, “100% failures”, “other regions healthy”를 보면, 상세 트러블슈팅 전에 서비스를 복구하는 가장 빠르고 되돌릴 수 있는 완화 조치(traffic shift/문제 region 비활성화)를 선택하세요. 조치를 SRE 우선순위(영향 완화, 안정화, 그 다음 진단 및 재발 방지)에 매핑하세요. 또한 global load balancer는 regional isolation과 failover를 위해 설계되었으므로 incident 동안 그 기능을 활용해야 합니다.

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

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

11
문제 11

Your retail analytics team is deploying a webhook service on Cloud Run that ingests inventory updates and uses the OpenTelemetry SDK with a BatchSpanProcessor to export traces to Cloud Trace every 5 seconds. Under light traffic (<1 request/second), about 30% of spans never appear in Cloud Trace even though requests return HTTP 200. The service is configured with min instances = 0, concurrency = 80, memory = 1 GiB, and 2 vCPU, and CPU is currently set to be allocated only during request processing. You must ensure reliable trace export without changing application code or adding external components. What should you do?

HTTP health check는 트래픽을 생성해 cold start를 줄일 수는 있지만, 근본 원인인 idle 상태에서의 CPU cycle 부족을 직접 해결하지는 못합니다. 인스턴스가 유지되더라도 Cloud Run이 요청 전용 CPU로 구성되어 있으면 요청 사이에 CPU를 여전히 제공하지 않을 수 있어, BatchSpanProcessor의 주기적 export timer가 안정적으로 실행되지 못합니다. 또한 trace flush를 보장하지 못한 채 인위적인 트래픽과 비용만 추가합니다.

정답입니다. Cloud Run을 CPU always allocated로 구성하면 활성 요청 처리 외부에서도 백그라운드 thread와 timer가 계속 실행됩니다. OpenTelemetry BatchSpanProcessor는 5초마다 span을 flush하기 위해 주기적 실행에 의존하는데, 요청 전용 CPU와 낮은 트래픽 환경에서는 인스턴스가 suspend 또는 종료되기 전에 exporter가 실행되지 않을 수 있습니다. 항상 켜진 CPU는 백그라운드 처리와 신뢰할 수 있는 텔레메트리 export를 위한 Cloud Run의 의도된 설정입니다.

CPU를 2 vCPU에서 4 vCPU로 늘리면 활성 요청 처리 중 처리량은 개선되지만, 낮은 트래픽에서 span이 누락되는 문제는 해결하지 못합니다. 이 문제는 요청이 없고 CPU가 아예 할당되지 않을 때 발생하므로, exporter의 예약된 flush가 실행될 수 없습니다. 요청 중 vCPU를 더 늘려도 idle 기간에 버퍼링된 span을 전송하려면 CPU 시간이 필요하므로 도움이 되지 않습니다.

Cloud Trace ingestion은 일시적인 네트워크 장애에 대해 재시도할 수 있지만, 여기서는 batch exporter가 주기적 flush를 실행할 CPU 시간을 받지 못해 span이 프로세스를 떠나지 못하는 경우가 많습니다. 인스턴스가 suspend 또는 종료될 때 span이 메모리에 버퍼링된 상태라면 재시도할 대상이 없습니다. 재시도에 의존하는 것은 애플리케이션 runtime에서 export되지 않은 텔레메트리에 대한 신뢰성 전략이 아닙니다.

문제 분석

핵심 개념: 이 문제는 Cloud Run 실행 시맨틱(요청 기반 CPU vs 항상 할당 CPU)과 서버리스 환경에서 백그라운드 텔레메트리 exporter(OpenTelemetry BatchSpanProcessor)가 어떻게 동작하는지를 평가합니다. 또한 관측 가능성 신뢰성, 즉 인스턴스가 throttled 또는 종료되기 전에 span이 flush되도록 보장하는 것도 다룹니다. 정답이 맞는 이유: Cloud Run이 요청 처리 중에만 CPU를 할당하도록 구성된 경우, 컨테이너는 HTTP 요청을 실제로 처리하는 동안에만 CPU 시간을 받습니다. OpenTelemetry BatchSpanProcessor는 타이머(5초마다)로 export를 수행합니다. 트래픽이 적을 때(<1 rps) 요청 사이에 긴 idle 구간이 생깁니다. 그 idle 기간에는 Cloud Run이 CPU를 할당하지 않을 수 있으므로, 예약된 export/flush 루프가 실행되지 않을 수 있습니다. 인스턴스가 idle 상태가 되어 freeze되거나 종료되면(min instances = 0은 scale-to-zero 가능성을 높임), 메모리에 버퍼링된 span은 요청이 200을 반환했더라도 export되지 못할 수 있습니다. CPU를 “always allocated”로 설정하면 요청이 진행 중이 아닐 때도 exporter의 주기적 작업이 실행될 수 있어, batch processor가 span을 안정적으로 flush할 수 있습니다. 주요 기능 / 모범 사례: Cloud Run의 “CPU allocation” 설정은 백그라운드 처리가 필요한 워크로드(메트릭/trace exporter, async queue, 주기적 작업)를 위해 특별히 설계되었습니다. 항상 켜진 CPU는 요청 종료 시점에 강제 flush하도록 코드를 변경할 수 없을 때의 표준적인 완화책입니다. 이는 Google Cloud Architecture Framework의 observability 가이드와도 일치합니다. 즉, 텔레메트리 파이프라인을 플랫폼 라이프사이클 이벤트(scale-to-zero, 인스턴스 shutdown)에 견고하게 설계하고, 버퍼링된 텔레메트리 손실을 피해야 합니다. 흔한 오해: health check로 서비스를 “warm”하게 유지(옵션 A)하면 scale-to-zero를 줄일 수는 있지만, 요청 사이에 CPU 시간을 보장하지는 못합니다. 핵심 문제는 cold start가 아니라 idle 시 CPU throttling입니다. vCPU를 늘리는 것(옵션 C)도 idle 동안 CPU가 아예 할당되지 않는다면 도움이 되지 않습니다. 재시도에 의존(옵션 D)하는 것은 실패 모드를 오해한 것입니다. span이 export되지 않으므로 재시도할 대상 자체가 없습니다. 시험 팁: Cloud Run + OpenTelemetry/agent/exporter가 타이머 기반으로 flush하는 경우를 기억하세요: 요청 전용 CPU는 백그라운드 작업을 떨어뜨릴 수 있습니다. 코드를 수정해 동기적으로 flush할 수 없다면 “CPU always allocated”를 선택하세요(그리고 min instances는 exporter 정확성보다는 latency를 위해 고려).

12
문제 12

Your fintech startup operates three GKE Autopilot clusters (dev, staging, prod) across us-central1 and europe-west4 and uses a GitOps workflow with a single Git repository per team. Product squads often need Google Cloud resources (for example, 12 Pub/Sub topics, 4 Cloud SQL instances, and multiple IAM bindings) to support their microservices. You must let engineers declare these resources as code from within their Kubernetes namespaces, enforce least-privilege access with Kubernetes RBAC, and have the system continuously reconcile desired state so that any manual console change is corrected within 10 minutes, following Google-recommended practices. What should you do?

Config Connector가 정답인 이유는 팀이 자신의 namespace 내부에서 Kubernetes CRDs를 사용해 Google Cloud 리소스를 관리할 수 있게 해주기 때문입니다. Kubernetes RBAC가 누가 이러한 CRDs를 적용/변경할 수 있는지 제어하고, KCC는 원하는 상태를 지속적으로 reconcile하여 콘솔에서의 수동 드리프트를 자동으로 수정합니다. 또한 GitOps 워크플로와 정렬되며, namespace를 전용 Google Cloud service account/권한(대개 Workload Identity 사용)에 매핑하여 최소 권한을 지원합니다.

Terraform을 실행하는 Cloud Build는 Git에서 인프라를 프로비저닝할 수 있지만 Kubernetes namespace 네이티브가 아닙니다. 엔지니어는 Kubernetes object로서 “Kubernetes namespace 내부에서” 리소스를 선언하는 것이 아니라 Terraform 변경을 제출하고 파이프라인 실행에 의존하게 됩니다. 10분 이내 드리프트 수정은 예약 실행이나 외부 드리프트 탐지를 추가하지 않는 한 자동이 아니며, Terraform은 보통 공유 credential과 state를 사용하므로 namespace별 최소 권한 구현이 더 어렵습니다.

Terraform을 실행하는 장기 실행 Pod는 프로덕션 GitOps 및 Autopilot 운영에서 안티패턴입니다. 이는 견고한 state 관리, 안전한 credential 처리, 거버넌스가 부족합니다. 또한 엔지니어가 namespace 내에서 리소스를 선언할 수 있는 Kubernetes 네이티브 CRDs를 제공하지 않으며, 지속적 reconciliation/드리프트 수정은 커스텀 로직이 필요합니다. Autopilot은 node 수준 작업을 제한하기도 하며, Pod에서 임시 인프라 도구를 실행하면 운영 리스크가 증가합니다.

Terraform을 실행하는 Kubernetes Job은 Pod보다 일회성 실행에는 낫지만, CronJob 또는 외부 스케줄러를 추가하지 않는 한 10분 이내의 지속적 reconciliation 요구사항을 충족하지 못합니다. 또한 Config Connector처럼 RBAC 경계를 가진 namespace 범위의 Kubernetes 네이티브 리소스 선언을 제공하지 않습니다. Terraform state, locking, credential은 멀티 팀, 멀티 클러스터 구성에서 여전히 복잡합니다.

문제 분석

핵심 개념: 이 문제는 GitOps 원칙을 사용하여 Google Cloud에서 Kubernetes 네이티브 인프라 관리를 테스트합니다. 핵심 서비스는 Config Connector (KCC)로, Google Cloud 리소스를 Kubernetes Custom Resources (CRDs)로 노출하고 이를 지속적으로 reconcile하여, 자동화, 최소 권한, 운영 우수성이라는 Google Cloud Architecture Framework 원칙에 부합합니다. 정답이 맞는 이유: 엔지니어가 “Kubernetes namespace 내부에서” Google Cloud 리소스를 선언하고, Kubernetes RBAC로 최소 권한을 강제하며, 약 10분 이내에 드리프트를 지속적으로 reconcile해야 합니다. Config Connector는 이를 위해 설계되었습니다. 팀은 자신의 namespace에서 YAML manifest(예: Pub/SubTopic, SQLInstance, IAMPolicyMember)를 적용하고, KCC의 controller가 해당 Google Cloud 리소스를 생성/업데이트합니다. 드리프트 수정은 controller reconciliation loop에 내재되어 있어, 외부 파이프라인 실행 없이도 콘솔에서의 수동 변경이 자동으로 되돌려집니다. 주요 기능 / 구성: - Namespace 범위 관리: KCC의 namespace mode를 사용하여 각 squad가 자신의 namespace에 매핑된 리소스만 관리하도록 합니다. - 최소 권한: Kubernetes RBAC(누가 namespace에서 CRDs를 생성/업데이트할 수 있는지)와 Google Cloud IAM을 결합하고, namespace/팀별 전용 service account(대개 Workload Identity 사용)를 통해 필요한 권한만 부여합니다(예: 특정 project 또는 folder에 대한 pubsub.admin, 필요 시 cloudsql.admin). - 지속적 reconciliation: controller가 원하는 상태와 실제 상태를 정기적으로 reconcile하여 “10분 이내에 수정” 요구사항을 충족합니다. - GitOps 적합성: CRDs를 동일한 팀 repo에 저장하고 GitOps 도구(예: Config Sync/Argo CD/Flux)가 이를 적용하게 하면, KCC가 cloud resource lifecycle을 처리합니다. 흔한 오해: Terraform 기반 옵션(Cloud Build, Pod, Job)은 리소스를 프로비저닝할 수 있지만, Kubernetes 네이티브의 namespace별 API가 아니며 추가 스케줄링/자동화를 구축하지 않는 한 지속적인 드리프트 reconciliation을 본질적으로 제공하지 않습니다. 또한 Terraform은 보통 더 광범위한 credential과 state 관리를 필요로 하므로 namespace 수준에서 최소 권한을 구현하기가 더 복잡합니다. 시험 팁: “Kubernetes manifest로 Google Cloud 리소스 관리”, “namespace 격리”, “지속적 reconciliation”을 보면 Config Connector를 떠올리세요. Terraform은 중앙집중형 IaC에 매우 적합하지만, KCC는 RBAC 경계를 가진 Kubernetes 중심의 멀티 테넌트, GitOps 기반 리소스 관리를 위한 Google 권장 패턴입니다.

13
문제 13

You are planning capacity for a real-time video engagement analytics platform ahead of an international rollout; the platform runs entirely in containers on Google Kubernetes Engine (GKE) Standard using a regional cluster in asia-southeast1 across three zones with the cluster autoscaler enabled, you forecast 10% month-over-month user growth over the next six months, current steady-state workload consumes about 28% of total deployed CPU capacity, and the service must remain resilient to the loss of any single zone; you want to minimize user impact from either growth or a zonal outage while avoiding unnecessary spend; how should you prepare to handle the predicted growth?

정답. 이 접근은 node pool max size와 regional quotas를 통해 autoscaling이 실제로 가능함을 보장하고, 올바른 requests/limits로 HPA가 pods를 정확히 scale하도록 하며, 존 손실을 시뮬레이션한 대표 load tests로 동작을 검증함으로써 성장과 존 장애를 모두 다룹니다. 영구적인 overprovisioning이 아니라 테스트로 검증된 elastic scaling에 의존하므로 불필요한 지출을 피하면서 사용자 영향도 최소화합니다.

오답. Cluster Autoscaler는 무제한 scaling을 보장하지 않습니다. node pool max size, regional quotas(vCPU, IP addresses 등)에 의해 제한되며 provisioning time 때문에 느려질 수도 있습니다. 또한 pod requests/limits와 HPA가 적절히 설정되지 않으면 시스템이 pods를 적절히 scale하지 못해 pending pods 또는 poor binpacking이 발생할 수 있습니다. 또한 존 장애에 대한 N+1 capacity를 검증하지도 않습니다.

오답. steady-state utilization 28%는 6개월 안전을 보장하지 않습니다. 10% month-over-month 성장은 6개월 동안 복리로 누적되어 약 77% 증가합니다. 더 중요한 것은 한 존을 잃어도 남은 존들이 부하를 흡수해야 한다는 점이며, overall utilization이 낮아 보여도 존별 capacity와 scheduling 제약으로 hotspots가 발생할 수 있습니다. 이 선택지는 quota 상한을 무시하고 load/failure testing을 통한 검증도 제공하지 않습니다.

틀렸습니다. 지금 60%의 추가 node capacity를 미리 프로비저닝하는 것은 최선의 접근 방식이 아닙니다. 6개월 동안 매월 10%씩 성장하면 복리로 약 77%가 되므로, 60%는 예측된 증가량과도 정확히 일치하지 않습니다. 더 중요한 점은 capacity를 미리 구매하면 즉시 비용이 증가하며, 실제 급증 상황이나 단일 zone 장애 동안 autoscaling limits, quotas, pod requests, scheduling behavior가 올바르게 작동하는지도 여전히 검증하지 못한다는 것입니다. 더 나은 방법은 node pool maximums와 quotas를 검증하고, HPA와 resource requests를 올바르게 구성하며, 대표적인 load 및 failure 테스트를 실행하여 capacity가 정적으로 과다 프로비저닝되는 대신 탄력적으로 확장될 수 있도록 하는 것입니다.

문제 분석

핵심 개념: 이 문제는 autoscaling이 적용된 GKE Standard의 capacity planning을 평가하며, 특히 신뢰성(존 간 N+1)과 비용 효율성의 균형을 다룹니다. 또한 Kubernetes resource requests/limits, Horizontal Pod Autoscaler (HPA), Cluster Autoscaler, 그리고 Google Cloud quota planning도 함께 다룹니다. 정답이 맞는 이유: 옵션 A는 불필요한 지출을 피하면서도 예측 가능한 성장과 단일 존 장애에 모두 대비하는 유일한 선택지입니다. 3개 존에 걸친 regional cluster에서 한 존을 상실해도 복원력을 유지하려면, 남은 2개 존이 전체 워크로드를 감당할 수 있어야 합니다(또는 최소한 graceful degradation으로 SLO를 유지). 현재 CPU utilization 28%는 배포된 전체 capacity 대비 수치이지만, 이것이 자동으로 “안전한 headroom”을 의미하지는 않습니다. 그 이유는 (1) 성장이 복리로 누적되며(~1.1^6 ≈ 1.77, 약 77% 증가), (2) capacity가 존별로 분산되어 있고, (3) pod scheduling 제약, requests, 그리고 HPA 동작이 장애/스파이크 상황에서 capacity가 실제로 사용 가능한지 여부를 결정하기 때문입니다. max node pool size와 regional quotas를 검증하면 autoscaling이 필요 시 실제로 노드를 추가할 수 있음을 보장할 수 있습니다. 주요 기능 / 모범 사례: - HPA는 metrics 기반으로 pods를 scale하며, 올바른 scaling 판단과 binpacking을 위해 정확한 CPU/memory requests가 필요합니다. - Cluster Autoscaler는 리소스 부족으로 pods가 pending일 때 nodes를 추가/제거하며, node pool max size와 프로젝트/리전 quotas(CPU, IPs 등)에 의해 제한됩니다. - Load testing(단일 존 손실 시뮬레이션 포함)은 장애 상황에서의 실제 capacity를 검증하고 PodDisruptionBudgets, topology spread constraints, anti-affinity rules가 의도대로 동작하는지 확인합니다. - Google Cloud Architecture Framework와 정렬됩니다: reliability(실패를 전제로 설계), performance(부하 하에서 검증), cost optimization(overprovisioning 회피). 흔한 오해: autoscaler가 “모든 것을 처리한다”(B)거나 28% utilization이면 headroom이 충분하다고(C) 가정하기 쉽습니다. 하지만 둘 다 quota 상한, 존 단위 장애 시나리오, 그리고 scaling을 막거나 비효율적인 node 사용을 유발할 수 있는 requests/limits 오구성을 간과합니다. 큰 capacity를 미리 확보하는 것(D)은 리스크를 줄이지만 비용을 낭비하며, 존 장애 시 SLO를 충족하는지 여전히 증명하지 못합니다. 시험 팁: GKE scaling 문제에서는 (1) 올바른 autoscaling 계층(HPA + Cluster Autoscaler), (2) quota 및 max-size 검증, (3) load testing과 failure testing을 통한 경험적 검증을 결합한 답을 찾으세요. Regional resilience 문제는 보통 N+1 planning과 존 제거 상태에서의 테스트를 의미합니다.

14
문제 14

You lead a team building Cloud Run–based microservices for a fintech product. Each repository includes end-to-end integration tests under tests/e2e that deploy a temporary Cloud Run revision into the staging project svc-stg-001 and delete it after completion. Source control is GitHub, and feature branches follow the pattern feature/*. You must automatically run the integration tests on every pull request targeting the main branch and block merges until tests pass. Tests should run only when files under service/ or tests/e2e/ change, and each run must finish within 30 minutes. You want a managed, GCP-native solution to automate this workflow. What should you do?

Compute Engine에서 자체 관리 Jenkins는 관리형 GCP 네이티브 접근이 아니며 상당한 운영 오버헤드(패치, 스케일링, 가용성, 보안 하드닝)를 유발합니다. 6시간마다 스케줄링하는 것은 모든 pull request 업데이트마다 실행하고 테스트가 통과할 때까지 merge를 차단해야 한다는 요구사항을 충족하지 못합니다. 또한 관련 파일 변경 여부와 무관하게 실행되어 리소스를 낭비하며, 추가 설정 없이는 GitHub required status checks와 본질적으로 통합되지 않습니다.

리뷰어가 수동으로 로컬에서 실행하는 방식은 신뢰할 수 없고 자동화할 수 없습니다. 일관된 환경, 재현성, 감사 가능성을 보장할 수 없으며, 모든 PR 업데이트마다 자동으로 테스트를 실행해야 한다는 요구사항을 충족하지 못합니다. 또한 PR에 첨부된 로그는 검증 가능한 CI 신호가 아니고 사람의 실수나 누락에 취약하므로, 강제된 status check를 기반으로 merge를 안정적으로 차단할 수 없습니다.

main으로의 push에서만 테스트를 실행하면 pull request가 merge된 이후에 테스트가 수행되므로, 테스트가 통과할 때까지 merge를 차단해야 한다는 요구사항을 위반합니다. 이 접근은 깨진 변경이 main에 반영되어 잠재적으로 후속 배포를 트리거할 수 있어 위험을 증가시킵니다. 또한 모든 PR 업데이트마다 실행해야 한다는 요구사항을 충족하지 못하고, PR-triggered CI에 비해 개발자에게 더 느린 피드백을 제공합니다.

Cloud Build GitHub App pull request triggers는 관리형이며 GitHub PR 이벤트와 직접 통합됩니다. Path filters는 service/** 또는 tests/e2e/**가 변경될 때만 build가 실행되도록 하여 선택적 실행 요구사항을 충족하고 비용을 통제합니다. build timeout을 30분으로 설정하면 런타임 제약을 강제합니다. GitHub branch protection에서 Cloud Build status check를 필수로 요구하면 테스트가 통과할 때까지 merge가 차단되어 end-to-end로 gating 요구사항을 충족합니다.

문제 분석

핵심 개념: 이 문제는 관리형 GCP 네이티브 서비스로 PR 기반 CI를 구현하는 것을 테스트합니다. 핵심 서비스는 Cloud Build(CI 실행), Cloud Build GitHub App triggers(PR 이벤트용), 그리고 GitHub required status checks(merge 차단용)입니다. 또한 path filters를 통한 선택적 실행과 build timeouts를 통한 런타임 제한 강제도 테스트합니다. 정답인 이유: 옵션 D는 모든 요구사항을 직접 충족합니다. main을 대상으로 하는 모든 pull request 업데이트마다 자동으로 실행되고, 관련 경로(service/** 또는 tests/e2e/**)가 변경될 때만 실행되며, Cloud Build timeout으로 최대 30분 런타임을 강제하고, GitHub branch protection rules에서 Cloud Build status check 통과를 필수로 요구하여 merge를 차단합니다. Cloud Build는 완전 관리형(서버 불필요)이며 Google Cloud IAM과 네이티브로 통합되고, 최소 권한의 전용 service account를 사용해 staging 프로젝트(svc-stg-001)에 ephemeral Cloud Run revisions를 배포할 수 있습니다. 주요 기능 / 구성: 1) Cloud Build GitHub App PR trigger: PR 이벤트(opened/synchronize/reopened)를 수신하고 main을 대상으로 합니다. 2) Path filters: service/** 및 tests/e2e/**를 포함하여 관련 없는 문서/설정 변경이 build minutes를 소모하지 않도록 합니다. 3) Build timeout: 30m로 설정하여 하드 실행 제약을 충족합니다. 4) GitHub branch protection: merge 전에 Cloud Build check context가 통과하도록 요구합니다. 5) 보안 및 거버넌스: staging에서 Cloud Run revisions를 deploy/delete할 수 있도록 범위를 제한한 Cloud Build service account를 사용하고, secrets는 Secret Manager에 저장하며, 이미지는 Artifact Registry를 사용합니다. 이는 Google Cloud Architecture Framework 원칙(자동화, 최소 권한, 신뢰할 수 있는 전달)에 부합합니다. 흔한 오해: 자체 관리 Jenkins(A)로도 구현은 가능하지만 “managed, GCP-native”를 위반하고 운영 부담이 추가되며, 6시간 스케줄은 “모든 PR 업데이트” 요구사항을 충족하지 못합니다. 로컬 실행(B)은 강제하거나 감사(audit)할 수 없습니다. merge 후에만 테스트(C)하는 것은 너무 늦고 merge를 차단하지 못합니다. 시험 팁: DevOps 시험 문제에서는 요구사항을 trigger type(PR vs push), gating mechanism(required status checks), 그리고 효율성 제어(path filters, timeouts)에 매핑하세요. “managed”와 “GCP-native”가 보이면 자체 호스팅 CI보다 Cloud Build/Cloud Deploy를 우선하고, GitHub branch protection 또는 동등한 정책을 통해 merge를 명시적으로 차단하는지 확인하세요.

15
문제 15

Your retail analytics application runs on Cloud Run in us-central1 behind Cloud Load Balancing and depends on BigQuery and Cloud Storage; over the past week, P95 latency spiked from 180 ms to 3000 ms and 5xx errors peaked at 4.2% during three separate incidents. You need to build a Cloud Monitoring dashboard to troubleshoot and specifically determine whether the spikes are caused by your service or by outages/degradations in Google Cloud services you rely on (e.g., Cloud Load Balancing, BigQuery, Cloud Storage); what should you do?

Log-based metrics는 logs에서 발견되는 특정 error 패턴(예: 여러분의 서비스로 반환된 BigQuery API errors)을 정량화할 수 있습니다. 하지만 이는 여러분의 workloads가 기록한 내용을 반영할 뿐, Google Cloud에 기반 인시던트가 있었는지 여부를 보여주지는 않습니다. 또한 logging이 불완전하거나 sampling이 발생하면 이슈를 놓칠 수도 있습니다. 이는 증상 추적에는 도움이 되지만, Google이 관리하는 서비스 성능 저하로 스파이크가 발생했는지 신뢰성 있게 attribution하지는 못합니다.

logs widget은 troubleshooting 중 최근 errors와 stack traces를 빠르게 확인하는 데 유용합니다. 하지만 raw logs는 노이즈가 많고 수동 필터링이 필요하며, 여전히 애플리케이션이나 서비스가 출력한 내용만 보여줍니다. Google Cloud 서비스 health에 대한 권위 있고 큐레이션된 인시던트 컨텍스트를 제공하지 않습니다. 이 접근은 상관관계 분석이 느리고, Google Cloud 의존성이 성능 저하되었는지 여부에 직접 답하지 못합니다.

Alerting policies는 metric이 임계값을 넘을 때 알림을 보내므로 detection과 SLO 기반 paging에 유용합니다. 하지만 이 문제는 원인(여러분의 서비스 vs Google Cloud 의존성 outage)을 판단하기 위한 dashboard 구축에 관한 것입니다. Alerting만으로는 attribution을 제공하지 못하며, “system error metrics”는 여러분의 프로젝트에 영향을 주는 Google Cloud 서비스 인시던트와 상관관계를 만들기 위한 직접적인 메커니즘이 아닙니다.

Personalized Service Health annotations는 여러분의 프로젝트와 관련된 서비스 및 영향 범위로 스코프된 Google Cloud 서비스 인시던트/disruption 마커를 Cloud Monitoring dashboards에 추가합니다. 이를 통해 latency/5xx 스파이크와 Cloud Load Balancing, BigQuery, Cloud Storage의 의존성 인시던트를 즉시 상관관계로 연결할 수 있습니다. 이는 인시던트 triage 중 플랫폼/의존성 성능 저하와 애플리케이션 수준 문제를 구분하도록 목적에 맞게 설계되었습니다.

문제 분석

핵심 개념: 이 문제는 의존성 관련 인시던트에 대한 관측 가능성(observability)을 평가합니다. 즉, 애플리케이션이 유발한 latency/5xx와 기반 Google Cloud 서비스의 장애/성능 저하를 구분하는 것입니다. 핵심 역량은 Cloud Monitoring 내에서 여러분의 metrics(Cloud Run, load balancer)와 Google이 관리하는 서비스 health 신호를 상관관계로 연결하는 것입니다. 정답이 맞는 이유: Personalized Service Health (PSH)는 여러분이 사용하는 Google Cloud 서비스(예: Cloud Load Balancing, BigQuery, Cloud Storage)에 대해 프로젝트별, 제품별 인시던트 및 disruption 정보를 제공하며, 관련 이벤트를 Cloud Monitoring dashboards의 annotations로 표시할 수 있습니다. PSH annotations를 활성화하면 P95 latency 급증과 5xx error 피크의 정확한 시간 구간을, 여러분의 프로젝트/region에 영향을 주는 Google Cloud 서비스 인시던트와 시각적으로 상관관계로 확인할 수 있습니다. 이는 요구사항(스파이크가 여러분의 서비스 때문인지, 의존성의 outage/성능 저하 때문인지 판단)을 직접적으로 충족합니다. 주요 기능 / Best Practices: PSH annotations는 dashboards에 시간 기반 마커로 통합되어, “외부에서 무언가 발생했나?”를 빠르게 triage할 수 있게 합니다. 이는 Google Cloud Architecture Framework(Operational Excellence 및 Reliability)와도 부합하며, mean time to detect/identify (MTTD/MTTI)를 개선하고 인시던트 대응 중 toil을 줄입니다. 실무에서는 PSH annotations를 Cloud Run request latency, Cloud Run 5xx rate, HTTP(S) Load Balancer backend latency/5xx, 그리고 client-side BigQuery/Storage error/latency metrics 차트와 함께 사용하여, 실패가 upstream(Google 서비스 disruption)에서 기인했는지 또는 여러분의 서비스(code, scaling, cold starts, concurrency, timeouts) 내부에서 발생했는지 분리합니다. 흔한 오해: log-based metrics나 logs widgets를 구축하고 싶어지지만, 이는 주로 애플리케이션이 관측한 것(증상)을 보여줄 뿐, Google Cloud 자체가 여러분의 프로젝트에 영향을 주는 인시던트를 겪었는지에 대한 권위 있는 신호는 아닙니다. “system error metrics”에 대한 alerting도 필요한 attribution을 제공하지 못합니다. 문제가 있음을 알려주기는 하지만, root cause가 플랫폼 의존성인지 여부를 설명해주지는 않습니다. 시험 팁: 문제가 Google Cloud 서비스 outage/성능 저하로 인한 이슈인지 판단하라고 명시하면, logs-only 접근보다는 PSH(및 관련 service health/incident 표면)를 찾으세요. DevOps 시험 시나리오에서는 단순한 detection뿐 아니라, 상관관계 분석과 인시던트 triage 속도를 개선하는 솔루션을 우선시하세요.

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

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

16
문제 16

Your video analytics platform is deploying a frame-processing microservice on both GKE Autopilot in us-central1 (200 pods across 5 namespaces) and 30 on-premises Linux servers in a private data center; you must collect detailed, function-level performance data (CPU and heap profiles) with under 5% overhead, keep profiles for 30 days, and visualize everything centrally in a single Google Cloud project without building or operating your own metrics pipeline—what should you do?

Cloud Profiler는 함수 수준 attribution을 제공하는 지속적, 낮은 오버헤드의 CPU 및 heap 프로파일링을 위한 Google Cloud 관리형 서비스입니다. GKE Autopilot 워크로드와 on-prem Linux 서비스 모두에 Profiler agent를 설치하면 프로파일을 단일 Cloud project로 업로드하여 중앙 시각화 및 분석을 할 수 있습니다. 이는 5% 미만 오버헤드 목표를 충족하고 커스텀 metrics pipeline을 구축/운영하는 것을 피하게 해주며, 주로 agent 통합과 IAM/network 접근만 관리하면 됩니다.

Cloud Debugger는 지속적 CPU/heap 프로파일링이 아니라 애플리케이션 상태(snapshot) 검사와 재배포 없이 logpoint를 추가하는 용도입니다. 타이밍 데이터가 포함된 debug log를 내보내면 로깅 볼륨과 오버헤드가 증가하고, 통계적으로 의미 있는 함수 수준 CPU/heap attribution이 부족하며, 성능 분석을 위한 준(準) 커스텀 파이프라인이 됩니다. 또한 Cloud Profiler에 필적하는 시간 경과에 따른 집계 프로파일링 뷰를 자연스럽게 제공하지 않습니다.

/metrics endpoint를 노출하고 timing library를 사용하는 것은 관리형 프로파일링이라기보다 커스텀 메트릭 수집에 가깝습니다. Cloud Monitoring uptime check는 가용성/endpoint 확인을 위한 것이며, 여러 pod/namespace 및 on-prem server 전반에서 Prometheus 스타일 메트릭을 대규모로 스크레이프하도록 의도된 것이 아닙니다. Managed Service for Prometheus를 사용하더라도 CPU/heap 프로파일의 함수 수준 attribution이 아니라 메트릭을 수집하는 것이며, 더 많은 instrumentation 및 ingestion 구성요소를 운영하게 됩니다.

서드파티 APM agent는 프로파일링을 제공할 수 있지만, 자체 metrics pipeline을 구축/운영하지 않으려는 요구사항을 위반하고 운영 복잡성(agent 관리, 라이선스, 데이터 export, 저장, 시각화)을 추가합니다. 나중에 분석하기 위해 bucket/database로 export하는 것은 Google Cloud에서의 관리형 통합 프로파일링 경험이 아니며 비용과 유지보수를 증가시킵니다. 시험에서는 요구사항이 일치할 때 퍼스트파티 관리형 observability 서비스를 우선 선택하세요.

문제 분석

핵심 개념: 이 문제는 하이브리드 환경 전반에서 코드 수준 성능 프로파일링을 위한 Google Cloud의 관리형 observability 도구를 평가합니다. 핵심 서비스는 Cloud Profiler로, 실행 중인 애플리케이션에서 낮은 오버헤드로 통계적 CPU 및 heap 프로파일을 지속적으로 수집하고 이를 Google Cloud project에 중앙 저장/시각화합니다. 정답이 맞는 이유: 함수 수준 성능 데이터(CPU 및 heap 프로파일), 5% 미만 오버헤드, 30일 보관, 그리고 커스텀 파이프라인을 운영하지 않고 Google Cloud에서 단일 중앙 뷰가 필요합니다. Cloud Profiler는 이를 위해 설계되었습니다. 애플리케이션에 Profiler agent를 통합(또는 지원 언어 agent 사용)하면 프로파일이 project의 Cloud Profiler로 업로드됩니다. GKE(Autopilot 포함)에서 실행되는 워크로드와 on-prem Linux server에서 실행되는 워크로드 모두에서 동작하며, on-prem은 Google Cloud APIs에 인증(일반적으로 service account credentials 또는 workload identity federation)할 수 있고 Profiler endpoint에 도달할 수 있으면 됩니다. 이는 “파이프라인을 구축/운영하지 않음” 요구사항을 직접 충족합니다. 주요 기능 / 구성 / 모범 사례: - 낮은 오버헤드의 지속적 프로파일링: sampling 기반 프로파일링은 일반적으로 오버헤드를 5%보다 훨씬 낮게 유지하도록 설계되었습니다. - 프로파일 유형: CPU 및 heap(그리고 언어/runtime에 따라 기타 유형)은 함수 수준의 attribution을 제공합니다. - 중앙 시각화: 프로파일은 하나의 project 내 Cloud Profiler UI에서 집계 및 탐색되며, Google Cloud Architecture Framework의 Operational Excellence 및 Reliability pillar(측정, 관찰, 개선)와 정렬됩니다. - 보관: Cloud Profiler는 시간 경과에 따른 분석을 위해 프로파일을 보관(일반적으로 30일 운영 윈도우에 맞춤)하여 회귀(regression) 탐지를 가능하게 합니다. - 하이브리드 지원: on-prem 서비스는 service account credentials 또는 federation을 사용해 프로파일을 업로드할 수 있습니다. egress 및 IAM 권한(예: roles/cloudprofiler.agent)을 보장하세요. 흔한 오해: 팀은 종종 프로파일링을 로깅(Cloud Logging) 또는 디버깅(Cloud Debugger)과 혼동합니다. 로그와 debugger snapshot은 증상을 보여줄 수는 있지만, 시간에 걸친 통계적으로 유효한 낮은 오버헤드의 함수 수준 CPU/heap attribution을 제공하지는 못합니다. 마찬가지로 “/metrics endpoint”와 uptime check는 가용성과 기본 메트릭을 위한 것이지, 심층 코드 프로파일링을 위한 것이 아닙니다. 시험 팁: “함수 수준 CPU/heap 프로파일”, “낮은 오버헤드”, “파이프라인을 만들지 않고 관리형/중앙화”가 보이면 Cloud Profiler를 떠올리세요. 요청 수준 지연 시간과 분산 호출 그래프는 Cloud Trace, 로그는 Cloud Logging, 메트릭은 Cloud Monitoring을 생각하면 됩니다. 또한 하이브리드 identity/authentication과 IAM role을 올바른 구현 세부사항의 일부로 고려하세요.

17
문제 17

Your fintech startup adheres to SRE practices, and a SEV-1 incident is causing elevated HTTP 5xx errors (38%) in the payment authorization service in us-central1, impacting approximately 65% of live transactions; you are the designated Communications Lead, engineering has no ETA for recovery, and within the first 10 minutes you’ve received over 40 internal Slack DMs and 120 customer tickets requesting updates. What should you do to efficiently keep everyone informed while the mitigation is in progress?

Slack을 30분마다 다음 업데이트 시간과 함께 업데이트하는 것은 내부 커뮤니케이션에 좋은 관행이지만, 수정(fix)을 찾을 때까지 고객 업데이트를 보류하는 것은 그렇지 않습니다. 트랜잭션 영향이 큰 SEV-1에서는 ETA가 없더라도 고객에게 즉각적인 인지(acknowledgement), 영향 범위, 지속적인 업데이트가 필요합니다. 외부 커뮤니케이션 지연은 티켓 볼륨을 증가시키고 신뢰를 훼손합니다.

이는 SRE 인시던트 커뮤니케이션 모범 사례와 일치합니다: 합의된 채널(internal incident room 및 public status page)을 통해 주기적 업데이트를 게시하고 항상 다음 업데이트 시간을 포함합니다. 높은 인바운드 수요 하에서도 확장 가능하며, 단일 진실 공급원을 만들고, engineering/IC에 대한 인터럽트를 줄이며, ETA가 없을 때 기대치를 설정합니다. 이는 완화(mitigation) 중 가장 효율적인 접근입니다.

내부 업데이트를 위임하는 것은 도움이 될 수 있지만, 고객 티켓에 애드혹 노트로 1:1 답변하는 것은 확장되지 않으며(10분에 120개 티켓) 메시징이 일관되지 않거나 부정확해질 위험이 있습니다. Communications Lead는 status page와 표준화된 템플릿을 통해 브로드캐스트 업데이트를 주도하고, 필요 시 티켓 응답에서 해당 업데이트를 참조해야 합니다.

모든 내부 문의를 Incident Commander로 전달하는 것은 역효과입니다. IC는 반복 질문 처리보다 조정과 의사결정에 집중해야 합니다. 이 옵션은 IC 부하를 증가시키고 완화(mitigation)를 지연시킵니다. Communications Lead의 목적은 질문을 통합하고 정기적이며 권위 있는 업데이트를 게시함으로써 대응자를 인터럽트로부터 보호하는 것입니다.

문제 분석

핵심 개념 - 이 문제는 SRE 인시던트 관리 커뮤니케이션, 특히 SEV-1 동안 Communications Lead 역할을 테스트합니다. SRE/ICS 스타일 인시던트 대응에서는 대응자의 방해를 줄이고 이해관계자 신뢰를 유지하기 위해 커뮤니케이션이 구조적이고 예측 가능하며 합의된 채널을 통해 브로드캐스트되어야 합니다. 정답이 맞는 이유 - 옵션 B가 정답인 이유는 단일 진실 공급원(single source of truth)을 수립(고객용 public status page, 직원용 internal incident room/channel)하고, 새로운 정보가 없더라도 모든 메시지에 다음 업데이트 시간을 포함해 커밋하기 때문입니다. 38% 5xx errors와 65% 트랜잭션 영향이 있는 상황에서는 이해관계자에게 빈번하고 일관된 업데이트가 필요합니다. Engineering에 ETA가 없으므로, 가장 중요한 조치는 기대치를 설정하고 예정된 업데이트를 게시하여 인바운드 노이즈를 줄이는 것입니다. 이는 Slack DMs와 고객 티켓 과부하를, 모두가 동일한 권위 있는 업데이트를 보도록 리다이렉트함으로써 직접적으로 해결합니다. 주요 특징 / 모범 사례 - SRE 모범 사례에는 다음이 포함됩니다: (1) 사전 정의된 인시던트 역할(Incident Commander, Communications Lead, Ops/Tech Lead), (2) 합의된 커뮤니케이션 채널(internal incident room, email distribution lists, paging policies, external status page), (3) “next update at <time>” 커밋을 포함한 업데이트 주기, (4) 영향도, 진행 중인 완화(mitigation), workaround에 대한 투명성, (5) 애드혹 인터럽트를 방지하여 엔지니어의 컨텍스트 스위칭을 최소화. 이는 Google Cloud Architecture Framework의 운영 우수성(operational excellence) 원칙(명확한 프로세스, 신뢰할 수 있는 운영, 효과적인 인시던트 대응)과 정렬됩니다. 흔한 오해 - A는 그럴듯해 보이지만(내부 우선), 고객 커뮤니케이션을 지연하면 티켓 볼륨이 증가하고 신뢰가 훼손됩니다. 고객은 ETA가 없더라도 적시에 인지(acknowledgement)할 필요가 있습니다. C는 고객 중심처럼 보이지만, 1:1 답변은 확장되지 않으며 메시징이 일관되지 않게 됩니다. D는 모든 내부 문의를 Incident Commander로 라우팅하여 IC 부하를 증가시키고 효과를 떨어뜨립니다. Communications Lead가 커뮤니케이션을 흡수하고 간소화해야 합니다. 시험 팁 - DevOps/SRE 시험 문제에서는 다음을 선호하세요: 커뮤니케이션 중앙화, 대응자 인터럽트 감소, 예측 가능한 업데이트 주기 제공, status pages/incident rooms를 권위 있는 소스로 사용. ETA가 없을 때는 없다고 명시하되, 다음 업데이트 시간은 반드시 커밋하세요. 이는 성숙한 인시던트 커뮤니케이션의 특징입니다.

18
문제 18

Your retail analytics team uses Cloud Build to deploy a containerized Python service to Cloud Run (min instances: 0, max instances: 3) on the staging project; the latest deployment failed because the container exited at startup with exit code 78 and the log message 'KeyError: PAYMENT_SERVICE_URL not set', which has occurred in roughly 30% of recent staging runs when new configs are introduced; you must determine the root cause and add a control in the CI/CD workflow that prevents future rollouts when required environment variables are missing, ensuring the pipeline fails in under 2 minutes if any of PAYMENT_SERVICE_URL, OAUTH_ISSUER, or REGION is absent or empty; what should you do?

Cloud Run에서 canary 롤아웃은 새 revision으로 소량의 트래픽을 전환해 영향을 제한할 수 있습니다. 그러나 여전히 깨진 revision을 배포하며, 필수 환경 변수가 누락되었을 때 롤아웃을 방지해야 한다는 요구사항을 충족하지 못합니다. 또한 탐지가 결정적 사전 배포 점검이 아니라 런타임 동작과 트래픽 패턴에 의존하므로 CI/CD 파이프라인을 2분 내에 실패시키지 못할 수도 있습니다.

Static code analysis(linting, 스타일 점검, dependency scanning)는 CI에서 가치가 있지만 런타임 구성 주입(환경 변수와 secrets)을 검증하지는 않습니다. 오류는 시작 시점의 env var 누락이며, 이는 보통 배포 구성, Secret Manager 바인딩, 또는 build substitutions에서 비롯됩니다. 따라서 static analysis는 문제를 신뢰성 있게 잡아내거나 필요한 “없음 또는 비어 있음” 점검을 강제하지 못합니다.

이는 근본 원인 범주(일관되지 않거나 누락된 구성 주입)를 직접 해결합니다. Cloud Build 단계 하나를 추가해 빠르게 실행하면서 PAYMENT_SERVICE_URL, OAUTH_ISSUER, REGION이 설정되어 있고 비어 있지 않은지 검증하되, Cloud Run에 의도된 것과 동일한 Secret Manager/substitution 소스를 사용합니다. 검증이 실패하면 빌드가 실패하고 deploy 단계가 게이트되어 롤아웃을 방지합니다. 이는 결정적이며 2분보다 훨씬 짧게 완료될 수 있습니다.

Cloud Audit Logs는 IAM 또는 구성 변경이 배포에 영향을 주었는지 판단하는 데 도움이 되어 트러블슈팅에 유용합니다. 하지만 이는 사후 대응적이며 예방적이지 않고, env var가 누락되었을 때 릴리스를 차단하는 CI/CD 제어를 추가하지 않습니다. 또한 빠른 파이프라인 실패를 보장하지 못하며, 이 옵션에 설명되지 않은 수동 검토나 추가 자동화가 필요합니다.

문제 분석

핵심 개념: 이 문제는 Cloud Build를 사용한 Cloud Run 배포에 대한 CI/CD 파이프라인 제어, 특히 불량 릴리스를 방지하기 위한 “shift-left” 검증을 테스트합니다. 실패(누락된 env var로 인한 KeyError와 exit code 78)는 런타임 스케일링이나 관측 가능성 문제가 아니라 구성 검증 문제입니다. 정답인 이유: 옵션 C는 deploy 단계가 실행되기 전에 필수 환경 변수(PAYMENT_SERVICE_URL, OAUTH_ISSUER, REGION)가 존재하고 비어 있지 않은지 검증하는 빠르고 결정적인 게이트를 Cloud Build에 추가합니다. 문제가 새 config가 도입될 때 발생하고 실행의 약 30%에서만 나타난다는 점은 구성 주입이 일관되지 않음을 강하게 시사합니다(예: Secret Manager 바인딩 누락, Cloud Build substitution 누락, 또는 build config의 조건부 로직). Cloud Run에 사용되는 것과 동일한 env/secret wiring으로 빌드된 컨테이너(또는 경량 검증 entrypoint)를 실행하는 사전 배포 smoke test는 누락된 변수를 신뢰성 있게 포착하고 요구사항인 <2분 내에 파이프라인을 실패시킬 수 있습니다. 핵심 기능 / 모범 사례: - Cloud Build gating: 빠르게 실행되는 단계(예: env var를 확인하는 스크립트, 또는 “--check-config” 같은 인자로 컨테이너 실행)를 추가합니다. 그런 다음 deploy 단계가 이에 의존하도록 만듭니다. - Secret Manager 통합: secrets가 Cloud Build(availableSecrets) 또는 substitutions를 통해 가져와지도록 보장하고, 검증 단계와 deploy 단계에 명시적으로 전달합니다. 이는 Google Cloud Architecture Framework의 신뢰성 원칙(자동화 및 배포 전 점검을 통해 실패를 예방)과 일치합니다. - 결정적 실패: “없음 또는 비어 있음”을 확인하면 부분 롤아웃을 피하고, 명확한 오류로 조기에 실패시켜 MTTR을 줄입니다. 흔한 오해: - Canary 롤아웃(A)은 영향 범위를 줄이지만 불량 revision의 배포 자체를 막지는 못합니다. 시작에 실패하는 Cloud Run revision은 여전히 오류를 유발하고 시간을 낭비합니다. 요구사항은 config가 누락되었을 때 롤아웃을 방지하는 것입니다. - Static analysis(B)는 코드 품질을 개선하지만 누락된 런타임 구성 값을 감지하지 못합니다. - Audit logs(D)는 IAM/config 변경을 조사하는 데 도움이 되지만 예방적 CI/CD 제어를 추가하지 않으며 <2분 fail-fast 요구사항을 충족하지 못합니다. 시험 팁: 프롬프트가 “향후 롤아웃을 방지”하고 “빠르게 실패”하라고 요구할 때는 점진적 배포나 배포 후 모니터링보다 파이프라인 게이트(unit/integration/smoke/config validation)를 우선하세요. Cloud Run의 경우 배포 전에 구성과 secrets를 검증하고, 엄격한 파이프라인 시간 요구사항을 충족하도록 점검을 빠르고 결정적으로 유지하세요.

19
문제 19

You are defining latency SLOs for a globally distributed checkout API used by a subscription media platform during concert livestream spikes; stakeholders expect consistent availability and fast responses, and current user feedback indicates performance is satisfactory. Over a rolling 30-day window, telemetry aggregated across all active-active regions shows the 90th percentile latency is 85 ms and the 95th percentile latency is 210 ms, measured at the HTTP request boundary. What latency SLO should the team publish?

이는 현재 관측된 성능보다 더 엄격합니다(70 ms p90 vs 85 ms, 180 ms p95 vs 210 ms). 게시하면 정상 조건에서도 서비스가 즉시 SLO를 위반하여 error budget을 빠르게 소모하고 불필요한 escalation 또는 릴리스 동결을 촉발할 것입니다. SLO를 더 타이트하게 하는 것은 사용자가 불만족하거나, 이미 성능을 개선했고 이를 지속할 수 있을 때에만 적절합니다.

이는 사용자가 만족한다고 보고하는 가운데, 입증된 30일 성능과 일치합니다. 현재 역량과 사용자 경험에 정렬된, 방어 가능하고 측정 가능한 SLO이며, 실제 운영 여유(headroom)를 반영하는 error budget을 생성합니다. 또한 (너무 엄격해) 만성적인 SLO 위반을 유발하는 것과 (너무 관대해) 회귀를 허용하는 것 모두를 피합니다. 프롬프트를 고려할 때 최선의 선택입니다.

이는 현재 성능보다 느슨하게 SLO를 설정합니다(110 ms p90, 240 ms p95). 충족하기는 더 쉽지만, 회귀에 대한 민감도를 낮추고 이해관계자에게 제공하는 신뢰성 약속을 약화시킵니다. 사용자가 이미 더 나은 성능에 만족하고 있으므로, SLO를 완화하는 것은 이점이 없고 점진적 성능 저하가 발생해도 조치를 트리거하지 못하게 할 수 있습니다.

이는 현재 성능보다 상당히 느슨하며, 특히 tail latency가 checkout 완료에 영향을 주는 글로벌 스파이크 이벤트 동안 의미 있는 latency 회귀를 가릴 가능성이 큽니다. 이런 관대한 SLO는 운영 제어 메커니즘으로서 SLO의 목적을 훼손하고, error budget이 너무 커져 feature 작업과 reliability 작업 간 우선순위 결정을 이끌지 못하게 만듭니다.

문제 분석

핵심 개념: 이 문제는 Service Level Objectives (SLOs)를 정의하기 위한 SRE 관행, 특히 롤링 윈도우 동안 관측된 사용자 경험을 기반으로 한 latency SLO를 테스트합니다. Google의 SRE 접근 방식에서 SLO는 현실적이어야 하고, 정의된 경계에서 측정 가능해야 하며, 사용자 기대와 비즈니스 성과에 정렬되어야 합니다. 또한 운영 의사결정을 이끄는 error budget을 생성합니다. 정답이 맞는 이유: 프롬프트는 이해관계자들이 일관된 availability와 빠른 응답을 기대하며, 더 중요하게는 현재 사용자 피드백이 성능에 만족한다고 말합니다. 지난 30일 동안 서비스는 모든 active-active 리전에서 HTTP request boundary 기준으로 90th percentile latency 85 ms, 95th percentile latency 210 ms를 이미 제공하고 있습니다. 현재 달성 중인 성능과 동일한 SLO를 게시하는 것(옵션 B)은 사용자가 만족하고 있으며 현재의 검증된 역량을 반영하는 SLO가 필요할 때 적절합니다. 이는 사용자 이득 없이 즉시 error budget을 소모하게 되는 이상적인(aspirational) 목표를 설정하는 것을 피하고, 회귀(regression)를 허용할 수 있는 목표 완화도 피합니다. 핵심 특징 / Best Practices: - 사용자에게 보이는 경계(여기서는 HTTP request boundary)에서 SLO를 정의하고, 리전 간 일관된 집계를 사용합니다. - 롤링 윈도우(30일)를 사용해 스파이크(예: 콘서트 라이브스트림 급증)를 완화하면서도 최근 동작을 반영합니다. - 일반적인 latency와 tail latency를 나타내는 percentile(p90/p95)을 선택합니다. Tail latency는 사용자 경험과 분산 시스템에서 중요합니다. - SLO는 의사결정(릴리스 게이트, incident response)을 안내하고 error budget을 관리할 수 있을 만큼 충분히 안정적이어야 합니다. 흔한 오해: 팀은 종종 SLO를 개선 목표와 혼동합니다. 현재 성능보다 더 타이트한 SLO(옵션 A)를 설정하는 것은 유혹적이지만, 지속적인 SLO 위반을 만들고 불필요한 toil을 강요합니다. 반대로 더 느슨한 SLO(옵션 C/D)는 실제 회귀를 숨기고 책임성을 약화시킬 수 있습니다. 시험 팁: 사용자 피드백이 긍정적이고 신뢰할 수 있는 telemetry가 있다면, 희망하는 수준이 아니라 오늘 일관되게 달성 가능한 수준으로 SLO를 설정하세요. 개선 목표는 내부 엔지니어링 로드맵에 속하며, SLO는 error budget으로 뒷받침하고 방어할 수 있는 신뢰성 약속을 나타내야 합니다. 또한 측정 지점(client vs load balancer vs service)과 집계 방식(global vs per-region)을 확인하세요. 이는 percentile 값에 실질적인 영향을 줄 수 있습니다.

20
문제 20

You work for a fintech company headquartered in Frankfurt where an Organization Policy enforces constraints/gcp.resourceLocations to allow only europe-west3 and europe-west1 for all resources. When you tried to create a secret in Secret Manager using automatic replication, you received the error: "Constraint constraints/gcp.resourceLocations violated for [orgpolicy:projects/1234567890] attempting to create a secret in [global]". You must resolve the error while remaining compliant and ensure the secret’s data resides only in the allowed EU regions. What should you do?

오답입니다. Organization Policy를 제거하면 즉각적인 오류는 해결되지만 컴플라이언스 및 거버넌스 요구사항을 깨뜨립니다. 규제 대상 핀테크 환경에서는 위치 제약이 보통 데이터 레지던시와 리스크 관리를 위해 의무화됩니다. 문제는 컴플라이언스를 유지하고 secret 데이터를 허용된 EU 리전에만 두어야 한다고 명시하므로, guardrail을 약화하거나 제거하는 것은 제시된 제약과 모범 사례를 위반합니다.

오답입니다. Automatic replication으로 secret을 생성하는 것이 바로 위반을 유발한 원인입니다. Automatic replication은 Google이 복제본 저장 위치를 제어하므로 global 위치로 취급되며, europe-west1과 europe-west3 외의 리전을 포함할 수 있습니다. constraints/gcp.resourceLocations 하에서는 global 리소스 또는 배치가 비결정적인 리소스가 생성에 실패하는 경우가 흔합니다.

정답입니다. User-managed replication을 사용하면 허용된 리전(europe-west3 및/또는 europe-west1)을 명시적으로 선택할 수 있어, secret 데이터가 해당 위치에만 상주하도록 보장하고 constraints/gcp.resourceLocations를 충족합니다. 이 접근은 컴플라이언스를 유지하고 감사 가능성을 지원하며, 정책을 변경하기보다 조직 정책에 맞게 리소스 구성을 조정한다는 거버넌스 모범 사례와도 일치합니다.

오답입니다. 허용 목록에 global을 추가하면 automatic replication은 허용되겠지만, secret material이 europe-west1과 europe-west3에만 유지된다는 보장은 더 이상 할 수 없습니다. “Global”은 의도한 리전 범위를 넘어 확장될 수 있는 Google-managed 배치를 의미하므로, 엄격한 데이터 레지던시 요구사항을 약화시킵니다. 이 옵션은 또한 컴플라이언스 요구사항에 반하여 조직의 거버넌스 통제를 약화시킵니다.

문제 분석

핵심 개념: 이 문제는 Organization Policy Service 제약조건(constraints/gcp.resourceLocations)과 이것이 Secret Manager 복제와 어떻게 상호작용하는지를 테스트합니다. Secret Manager secret은 조직에서 허용한 리소스 위치를 준수하는 위치에서만 생성되어야 합니다. “Automatic replication”은 Google이 멀티 리전 배치를 관리하며, 명시적으로 허용된 집합 밖의 위치를 포함할 수 있으므로 “global”로 취급됩니다. 정답이 맞는 이유: constraints/gcp.resourceLocations가 europe-west3와 europe-west1만 허용하는 상황에서 automatic replication으로 secret을 생성하면 secret의 복제 위치가 [global]이므로 정책을 위반합니다. 정책을 준수하고 허용된 EU 리전 내에서만 데이터 레지던시를 보장하려면 user-managed replication을 사용하고 europe-west3 및/또는 europe-west1을 명시적으로 선택하여 secret을 생성해야 합니다. 이렇게 하면 secret의 복제 정책이 결정적(deterministic)이고 감사 가능(auditable)해져, 정책과 핀테크 규제 기대사항을 모두 충족합니다. 주요 기능 / 모범 사례: - Secret Manager는 두 가지 복제 모드를 지원합니다: automatic(Google-managed, “global”)과 user-managed(customer-specified regions). - Organization Policy constraints/gcp.resourceLocations는 지원되는 리소스를 생성할 수 있는 위치와 데이터가 상주할 수 있는 위치를 제한합니다. - 규제 대상 워크로드에서는 데이터 레지던시, 컴플라이언스 증빙, 예측 가능한 failover 특성을 위해 user-managed replication이 모범 사례입니다. - Google Cloud Architecture Framework의 거버넌스 및 컴플라이언스 원칙과 정렬됩니다: 중앙에서 guardrail을 강제하고, 통제를 약화시키기보다 워크로드를 정책에 맞게 설계합니다. 흔한 오해: Automatic replication은 “가용성이 더 높고” “EU 안에 있을 것”처럼 들릴 수 있지만, 허용된 리전 내에만 머문다는 보장이 없고 global로 표현되어 정책 위반을 유발합니다. 또 다른 오해는 org policy를 완화(제거하거나 global을 추가)하여 오류를 “해결”하는 것인데, 이는 거버넌스를 약화시키고 규제 요구사항을 위반할 가능성이 큽니다. 시험 팁: constraints/gcp.resourceLocations와 [global]을 언급하는 오류를 보면, 위치 제한과 충돌하는 “automatic/multi-region/global resource”를 떠올리세요. 컴플라이언스에 맞는 패턴은 허용 목록과 일치하는 regional 또는 user-managed 배치를 선택하는 것입니다. secret과 key의 경우, 규제 산업(금융/헬스케어)에서 리전을 명시적으로 선택하는 것이 흔한 시험 주제입니다.

합격 후기(6)

R
R**********Nov 24, 2025

학습 기간: 1 month

The exam has many operational scenarios, and Cloud Pass prepared me well for them. The explanations were clear and helped me understand not just the “what” but the “why” behind each solution.

진
진**Nov 20, 2025

학습 기간: 1 month

문제와 해설이 있어서 좋았고, 시험에서 무난하게 합격했어요. 시험에서 안보이던 유형도 나왔는데 잘 풀긴 했네요

J
J************Nov 17, 2025

학습 기간: 1 month

The practice questions were challenging in a good way, and many matched the style of the real exam. I passed!

N
N************Nov 14, 2025

학습 기간: 1 month

very close to the real exam format

D
D***********Oct 18, 2025

학습 기간: 1 month

I used Cloud Pass during my last week of preparation, and it helped me fill in gaps I didn’t even know I had.

모의고사

Practice Test #1

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

다른 GCP 자격증

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 Data Engineer

Google Professional Data 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 Cloud DevOps 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를 다운로드하세요 — 모의고사, 학습 진도 추적 등을 제공합니다.