플랫폼 엔지니어링

개발자가 자율적으로 인프라를 사용할 수 있는 내부 개발자 플랫폼 구축


개발자가 자율적으로 인프라를 사용할 수 있는 내부 개발자 플랫폼 구축

목표: 개발자 경험을 향상시키고 운영 부담을 줄이는 플랫폼을 설계할 수 있는 수준


🎯 플랫폼 엔지니어링 개요

개념

graph TB
    subgraph "전통적 방식"
        DEV["👨‍💻 개발자"] -->|"티켓"| OPS["⚙️ 운영팀"]
        OPS -->|"수동"| INFRA["🏗️ 인프라"]
    end
    
    subgraph "플랫폼 엔지니어링"
        DEV2["👨‍💻 개발자"] -->|"Self-Service"| PLATFORM["🛠️ Platform"]
        PLATFORM -->|"자동화"| INFRA2["🏗️ 인프라"]
        PLATFORM -->|"Golden Path"| DEV2
    end

핵심 원리:

  • 셀프 서비스: 개발자가 직접 인프라 프로비저닝
  • 골든 패스: 표준화된 워크플로우 제공
  • 내부 복잡성 추상화: 복잡한 인프라 숨김
  • 개발자 경험: DX 최적화

🏗️ 내부 개발자 플랫폼 (IDP)

아키텍처

graph TB
    subgraph "IDP"
        PORTAL["🌐 Developer Portal"] -->|"API"| BACKEND["🔧 Platform Backend"]
        BACKEND -->|"Orchestration"| GITOPS["🔄 GitOps"]
        BACKEND -->|"Provisioning"| TF["🏗️ Terraform"]
        BACKEND -->|"Deployment"| K8S["☸️ Kubernetes"]
        
        GITOPS -->|"Apply"| K8S
        TF -->|"Create"| CLOUD["☁️ Cloud"]
    end
    
    subgraph "개발자"
        DEV["👨‍💻 개발자"] -->|"Self-Service"| PORTAL
    end

주요 구성 요소

구성 요소설명예시
Developer Portal셀프 서비스 UIBackstage, Port
Service Catalog서비스 목록Backstage Catalog
Scaffolder프로젝트 템플릿Cookiecutter
GitOps배포 자동화ArgoCD, Flux
IaC인프라 프로비저닝Terraform, Pulumi
Policy Engine정책 적용OPA, Kyverno

🛠️ Backstage

설치

# Backstage 앱 생성
npx @backstage/create-app@latest

# 개발 서버 실행
cd my-backstage-app
yarn dev

엔티티 등록

# catalog-info.yaml
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: my-service
  description: My microservice
  annotations:
    github.com/project-slug: myorg/my-service
    argocd/app-name: my-service
    grafana/dashboard-selector: "tags @> 'my-service'"
spec:
  type: service
  lifecycle: production
  owner: team-platform
  system: payment-system
  dependsOn:
    - component:database
    - resource:redis

템플릿

# template.yaml
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: microservice-template
  title: Microservice Template
  description: Create a new microservice
spec:
  owner: team-platform
  type: service
  
  parameters:
    - title: Service Information
      required:
        - name
        - owner
      properties:
        name:
          title: Name
          type: string
        owner:
          title: Owner
          type: string
          ui:field: OwnerPicker
    
    - title: Infrastructure
      properties:
        database:
          title: Database
          type: string
          enum: ['postgresql', 'mysql', 'none']
        cache:
          title: Cache
          type: boolean
  
  steps:
    - id: fetch-base
      name: Fetch Base
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}
    
    - id: publish
      name: Publish
      action: publish:github
      input:
        allowedHosts: ['github.com']
        description: ${{ parameters.description }}
        repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
    
    - id: register
      name: Register
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: '/catalog-info.yaml'

📋 플랫폼 성숙도 모델

레벨 1: 수동

graph LR
    DEV["개발자"] -->|"문서"| OPS["운영팀"]
    OPS -->|"수동"| INFRA["인프라"]
  • 문서 기반 프로세스
  • 수동 승인 필요
  • 긴 리드타임

레벨 2: 반자동

graph LR
    DEV["개발자"] -->|"스크립트"| INFRA["인프라"]
    INFRA -->|"검토"| OPS["운영팀"]
  • 자동화된 스크립트
  • 수동 검토 필요
  • 부분적 셀프 서비스

레벨 3: 자동

graph LR
    DEV["개발자"] -->|"Self-Service"| PLATFORM["플랫폼"]
    PLATFORM -->|"자동"| INFRA["인프라"]
  • 완전한 셀프 서비스
  • 정책 기반 제어
  • 골든 패스 제공

📋 체크리스트

  • 플랫폼 엔지니어링 이해
  • IDP 아키텍처 설계
  • Backstage 설치
  • 서비스 카탈로그 구성
  • 템플릿 작성
  • 셀프 서비스 구현
  • 골든 패스 정의
  • 정책 엔진 설정
  • 모니터링 구성
  • 개발자 온볇ィング

🔗 관련 노트

  • 03-01-GitOps-원칙 — GitOps
  • 03-09-GitOps-ArgoCD — ArgoCD
  • 01-05-인프라코드-Terraform — Terraform

마지막 업데이트: 2026-06-01