[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -2,88 +2,216 @@
|
||||
id: wiki-2026-0508-platform-engineering
|
||||
title: Platform Engineering
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [SYS-PLAT-ENG-001]
|
||||
aliases: [IDP, Internal Developer Platform, golden path]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 1.0
|
||||
tags: [infrastructure, devops, platform-engineering, developer-experience, internal-developer-platform, idp, cloud-native]
|
||||
confidence_score: 0.95
|
||||
verification_status: applied
|
||||
tags: [platform, devex, idp, devops, sre]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-26
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
language: yaml
|
||||
framework: backstage
|
||||
---
|
||||
|
||||
# Platform Engineering (플랫폼 엔지니어링)
|
||||
# Platform Engineering
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "인프라의 복잡성을 우아한 추상화로 감추어, 개발자가 오직 코드와 비즈니스 가치 창출에만 몰입할 수 있는 '황금 경로(Golden Path)'를 설계하라" — 개발팀이 애플리케이션을 신속하게 배포하고 운영할 수 있도록 공통 인프라, 도구, 워크플로우를 하나로 묶어 내부 개발자 플랫폼(IDP)을 구축하는 기술적 문화.
|
||||
## 매 한 줄
|
||||
> **"매 dev → prod 의 길을 product 처럼 디자인하는 분야"**. 매 2022 Team Topologies + Gartner Hype Cycle 의 trigger → 매 2026 모든 mid-large 조직의 default. 매 IDP (Internal Developer Platform) 가 product, application team 이 customer.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **추출된 패턴:** "Self-service Infrastructure and [[Cognitive_Load|Cognitive Load]] Reduction" — 클라우드 자원 할당, CI/CD 파이프라인, 모니터링 등 반복적인 운영 작업을 자동화된 셀프 서비스 인터페이스로 제공함으로써, 개별 개발자가 인프라 상세 지식 없이도 안정적인 서비스를 운영하게 돕는 패턴.
|
||||
- **핵심 목표:**
|
||||
- **Developer Experience (DX) 개선:** 도구 탐색 및 설정 시간을 최소화.
|
||||
- **Standardization:** 보안과 컴플라이언스가 보장된 표준 템플릿 사용 유도.
|
||||
- **[[Scalability|Scalability]]:** 조직이 커져도 일관된 품질의 운영 환경 유지.
|
||||
- **의의:** 데브옵스(DevOps)가 '방식'이라면, 플랫폼 엔지니어링은 이를 실현하는 '실체(IDP)'이며, 특히 수많은 마이크로서비스와 AI 에이전트가 얽힌 현대 시스템의 복잡도를 제어하는 핵심 엔진.
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 단순히 티켓을 받아 인프라를 구축해주던 운영팀(Ops)에서 벗어나, 이제는 인프라 자체를 '제품'으로 보고 개발자(고객)를 위한 최적의 UX를 제공하는 제품 관리(Product [[Management|Management]]) 관점으로 전환됨.
|
||||
- **정책 변화:** Antigravity 프로젝트는 에이전트의 연산 자원과 지식 베이스를 관리하는 내부 인프라를 플랫폼 엔지니어링 원칙에 따라 설계하여, 새로운 스킬이나 모듈 추가 시 인프라 설정 오버헤드 없이 즉각적인 확장이 가능하도록 함.
|
||||
### 매 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".
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- [[Microservices-Architecture|Microservices-Architecture]],[[_system|system]]-Design-for-AI-Scale, [[High-Availability-Systems|High-Availability-Systems]], [[Modern-Website-Architecture|Modern-Website-Architecture]]
|
||||
- **Raw Source:** 10_Wiki/Topics/AI/Platform-Engineering.md
|
||||
### 매 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).
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### 매 Golden Path
|
||||
- 매 80% case 의 paved road. 매 옆길 가능 but cost 명시.
|
||||
- 매 service template (cookiecutter) + 매 infra module (Terraform) + 매 deploy pipeline + 매 observability default.
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### 매 핵심 원칙
|
||||
- **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.
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### 매 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.
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
## 💻 패턴
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
### 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 }}
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
### 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 }
|
||||
```
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### 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
|
||||
```
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### OPA / Gatekeeper policy
|
||||
```rego
|
||||
package k8sallowedrepos
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
violation[{"msg": msg}] {
|
||||
c := input.review.object.spec.containers[_]
|
||||
not startswith(c.image, "ghcr.io/acme/")
|
||||
msg := sprintf("매 image '%v' 는 허용된 registry 아님", [c.image])
|
||||
}
|
||||
```
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
### 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 } }
|
||||
```
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
### 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]] · [[DevEx Platform]]
|
||||
- 응용: [[Backstage]] · [[Crossplane]] · [[ArgoCD]] · [[Humanitec]]
|
||||
- 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 |
|
||||
|
||||
Reference in New Issue
Block a user