---
id: wiki-2026-0508-platform-engineering
title: Platform Engineering
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [IDP, Internal Developer Platform, golden path]
duplicate_of: none
source_trust_level: A
confidence_score: 0.95
verification_status: applied
tags: [platform, devex, idp, devops, sre]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: yaml
  framework: backstage
---

# Platform Engineering

## 매 한 줄
> **"매 dev → prod 의 길을 product 처럼 디자인하는 분야"**. 매 2022 Team Topologies + Gartner Hype Cycle 의 trigger → 매 2026 모든 mid-large 조직의 default. 매 IDP (Internal Developer Platform) 가 product, application team 이 customer.

## 매 핵심

### 매 DevOps 와 차이
- **DevOps** = 매 culture / practice ("you build it, you run it").
- **Platform Engineering** = 매 그 cognitive load 를 줄이는 product approach.
- 매 DevOps 의 "everyone owns infra" → 매 burnout. PE 는 매 "platform team owns paved road".

### 매 4 component (Humanitec, CNCF Platform WG)
1. **Developer Control Plane**: 매 portal (Backstage), CLI, API.
2. **Integration & Delivery**: 매 CI/CD, GitOps (ArgoCD, Flux).
3. **Resource Plane**: 매 K8s, cloud, DB, message queue.
4. **Security Plane**: 매 secrets, policy (OPA), supply chain (SLSA, Sigstore).

### 매 Golden Path
- 매 80% case 의 paved road. 매 옆길 가능 but cost 명시.
- 매 service template (cookiecutter) + 매 infra module (Terraform) + 매 deploy pipeline + 매 observability default.

### 매 핵심 원칙
- **Treat platform as product**: 매 PM, roadmap, NPS, SLO.
- **Self-service**: 매 ticket → 매 button.
- **Opinionated**: 매 freedom of choice 의 cost > 매 standardization 가치.
- **Thinnest viable platform** (Pulumi 표현): 매 build 보다 reuse.
- **Telemetry-driven**: 매 DORA + DevEx (SPACE) measurement.

### 매 metric
- **DORA**: deploy freq, lead time, MTTR, change fail rate.
- **DevEx (SPACE)**: Satisfaction, Performance, Activity, Communication, Efficiency.
- **Platform**: time-to-first-deploy, % services on golden path, ticket reduction.

## 💻 패턴

### Backstage software template
```yaml
# template.yaml
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: nodejs-service
  title: 매 Node.js Service (Golden Path)
spec:
  parameters:
    - title: Basics
      properties:
        name: { type: string, pattern: "^[a-z][a-z0-9-]*$" }
        owner: { type: string, ui:field: OwnerPicker }
  steps:
    - id: fetch
      action: fetch:template
      input:
        url: ./skeleton
        values: { name: "${{ parameters.name }}" }
    - id: publish
      action: publish:github
      input:
        repoUrl: github.com?owner=acme&repo=${{ parameters.name }}
        defaultBranch: main
    - id: register
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
```

### Score / workload spec (platform-agnostic)
```yaml
# score.yaml — 매 dev 가 작성, 매 platform 이 K8s/ECS/Cloud Run으로 번역
apiVersion: score.dev/v1b1
metadata: { name: hello-svc }
containers:
  api:
    image: ghcr.io/acme/hello:1.2.3
    variables:
      DB_URL: ${resources.db.url}
resources:
  db:
    type: postgres
service:
  ports:
    web: { port: 80, targetPort: 3000 }
```

### Crossplane composition (provisioning)
```yaml
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata: { name: postgres-aws }
spec:
  compositeTypeRef:
    apiVersion: platform.acme/v1alpha1
    kind: XPostgres
  resources:
    - base:
        apiVersion: rds.aws.upbound.io/v1beta2
        kind: Instance
        spec:
          forProvider:
            engine: postgres
            engineVersion: "16.3"
            instanceClass: db.t4g.micro
            allocatedStorage: 20
            backupRetentionPeriod: 7
```

### OPA / Gatekeeper policy
```rego
package k8sallowedrepos

violation[{"msg": msg}] {
  c := input.review.object.spec.containers[_]
  not startswith(c.image, "ghcr.io/acme/")
  msg := sprintf("매 image '%v' 는 허용된 registry 아님", [c.image])
}
```

### ArgoCD ApplicationSet (multi-env)
```yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata: { name: hello-svc }
spec:
  generators:
    - list:
        elements:
          - { env: dev, cluster: dev-cluster, replicas: "1" }
          - { env: prod, cluster: prod-cluster, replicas: "5" }
  template:
    metadata: { name: "hello-svc-{{env}}" }
    spec:
      project: default
      source:
        repoURL: https://github.com/acme/hello
        path: deploy
        helm:
          parameters:
            - { name: replicas, value: "{{replicas}}" }
      destination: { server: "{{cluster}}" }
      syncPolicy: { automated: { prune: true, selfHeal: true } }
```

### DORA metric collection
```ts
// 매 GitHub deploy event → DORA metric
github.on("deployment_status", async (e) => {
  if (e.deployment_status.state !== "success") return;
  const deployedAt = new Date(e.deployment_status.created_at);
  const commitTime = await getCommitTime(e.deployment.sha);
  const leadTimeSec = (+deployedAt - +commitTime) / 1000;
  await metrics.write({
    service: e.deployment.environment.split("-")[0],
    deploy_freq_inc: 1,
    lead_time_sec: leadTimeSec,
  });
});
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| <50 engineers | Lightweight: shared Helm charts, GitOps, basic Backstage |
| 50-500 | Full IDP: Backstage + golden paths + Crossplane |
| 500+ | Multi-cluster, multi-region, FinOps integrated |
| Heterogeneous stack | Score / OAM 로 abstract |
| Highly regulated (gov/fin) | OPA policy + SLSA L3 + signed images |

**기본값**: 매 Backstage + GitOps (ArgoCD) + opinionated golden path + DORA.

## 🔗 Graph
- 부모: [[DevOps]] · [[SRE]] · [[Team Topologies]]
- 변형: [[Internal Developer Platform]]
- 응용: [[Backstage]] · [[Crossplane]] · [[ArgoCD]]
- Adjacent: [[GitOps]] · [[Service Catalog]] · [[Golden Path]] · [[DORA Metrics]]

## 🤖 LLM 활용
**언제**: 매 50+ engineer 조직, 매 multi-team friction, 매 cognitive load 증가, 매 onboarding 느림.
**언제 X**: 매 single team / startup pre-PMF — 매 platform overhead 의 prematurely.

## ❌ 안티패턴
- **Platform team = ticket queue**: 매 product mindset 의 X. → 매 self-service 못 함.
- **Build everything**: 매 OSS 안 쓰고 자체 — 매 cost 폭발.
- **No customers**: 매 application team 의 needs 무시.
- **YAML hell**: 매 abstraction 안 만들고 raw K8s manifest 강요.
- **Tightly coupled stack**: 매 Score/OAM 없이 → 매 cloud lock.
- **Measure 부재**: 매 NPS/DORA 없으면 매 ROI 증명 X.

## 🧪 검증 / 중복
- Verified (CNCF Platform WG whitepaper, Team Topologies, ThoughtWorks Tech Radar 2026, Humanitec State of Platform Engineering reports).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — IDP components + golden path patterns |
