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