Platform Engineering
개발자 생산성을 위한 내부 플랫폼을 구축하는 분야
개발자 생산성을 위한 내부 플랫폼을 구축하는 분야
플랫폼 엔지니어링(Platform Engineering)은 개발팀이 셀프 서비스로 인프라를 프로비저닝하고 애플리케이션을 배포할 수 있는 내부 개발자 플랫폼(IDP, Internal Developer Platform)을 구축하고 운영하는 분야입니다. Gartner는 2026년까지 80%의 대기업이 플랫폼 팀을 운영할 것으로 예측합니다.
핵심 목표는 "개발자 경험(Developer Experience, DX) 향상"입니다. 개발자가 Kubernetes, Terraform, CI/CD 도구의 복잡한 설정을 직접 다루지 않고, 추상화된 인터페이스를 통해 "새 서비스 생성", "데이터베이스 프로비저닝", "환경 복제" 같은 작업을 몇 번의 클릭으로 수행할 수 있게 합니다.
대표적인 도구로 Backstage(Spotify 오픈소스), Port, Humanitec, Kratix 등이 있습니다. 이들은 서비스 카탈로그, 셀프서비스 포털, 개발자 문서 통합, 골든 패스(Golden Path) 템플릿을 제공합니다.
실무에서는 "개발자 10명당 플랫폼 엔지니어 1명" 비율이 권장되며, 플랫폼 팀은 개발팀을 고객처럼 대하고 그들의 피드백을 기반으로 플랫폼을 지속적으로 개선합니다. 잘 구축된 플랫폼은 신규 개발자 온보딩 시간을 2주에서 2일로 단축시킵니다.
# Backstage 소프트웨어 템플릿 (catalog-info.yaml)
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: create-node-service
title: Node.js 마이크로서비스 생성
description: 표준화된 Node.js 서비스를 자동으로 생성합니다
tags:
- nodejs
- microservice
- recommended
spec:
owner: platform-team
type: service
parameters:
- title: 서비스 정보
required:
- serviceName
- team
properties:
serviceName:
title: 서비스 이름
type: string
description: 소문자, 하이픈만 허용 (예: user-api)
pattern: '^[a-z][a-z0-9-]*$'
team:
title: 담당 팀
type: string
enum: ['backend', 'frontend', 'data', 'platform']
description:
title: 서비스 설명
type: string
- title: 인프라 설정
properties:
database:
title: 데이터베이스
type: string
enum: ['none', 'postgresql', 'mongodb', 'redis']
default: 'none'
cpu:
title: CPU 요청량
type: string
enum: ['100m', '250m', '500m', '1000m']
default: '250m'
memory:
title: 메모리 요청량
type: string
enum: ['128Mi', '256Mi', '512Mi', '1Gi']
default: '256Mi'
steps:
# 1. GitHub 저장소 생성
- id: fetch-template
name: 템플릿 가져오기
action: fetch:template
input:
url: ./skeleton
values:
serviceName: ${{ parameters.serviceName }}
team: ${{ parameters.team }}
database: ${{ parameters.database }}
- id: publish-github
name: GitHub 저장소 생성
action: publish:github
input:
repoUrl: github.com?owner=my-org&repo=${{ parameters.serviceName }}
defaultBranch: main
protectDefaultBranch: true
# 2. Kubernetes 리소스 생성
- id: create-kubernetes
name: Kubernetes 네임스페이스 및 리소스 생성
action: kubernetes:apply
input:
manifest: |
apiVersion: v1
kind: Namespace
metadata:
name: ${{ parameters.serviceName }}
labels:
team: ${{ parameters.team }}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${{ parameters.serviceName }}
namespace: ${{ parameters.serviceName }}
spec:
replicas: 2
selector:
matchLabels:
app: ${{ parameters.serviceName }}
template:
spec:
containers:
- name: app
resources:
requests:
cpu: ${{ parameters.cpu }}
memory: ${{ parameters.memory }}
# 3. 데이터베이스 프로비저닝 (선택시)
- id: provision-database
name: 데이터베이스 프로비저닝
if: ${{ parameters.database != 'none' }}
action: crossplane:create
input:
apiVersion: database.example.com/v1
kind: ${{ parameters.database | capitalize }}Instance
metadata:
name: ${{ parameters.serviceName }}-db
# 4. Backstage 카탈로그 등록
- id: register-catalog
name: 서비스 카탈로그 등록
action: catalog:register
input:
repoContentsUrl: ${{ steps['publish-github'].output.repoContentsUrl }}
catalogInfoPath: /catalog-info.yaml
output:
links:
- title: 저장소
url: ${{ steps['publish-github'].output.remoteUrl }}
- title: 서비스 카탈로그
icon: catalog
entityRef: ${{ steps['register-catalog'].output.entityRef }}
시니어: "신규 서비스 생성할 때마다 DevOps팀에 티켓 열고 3일씩 기다리는 게 병목이에요. 플랫폼 팀 구성해서 셀프서비스 포털 만들어볼까요?"
주니어: "좋습니다. Backstage로 템플릿 만들면 개발자들이 직접 서비스 생성하고 DB 프로비저닝까지 할 수 있어요. 초기 구축에 2달 정도 예상합니다."
면접관: "Platform Engineering과 DevOps의 차이점이 뭐라고 생각하세요?"
지원자: "DevOps는 개발-운영 협업 문화이고, Platform Engineering은 그 문화를 실현하는 도구와 플랫폼을 만드는 역할입니다. 개발자를 고객으로 보고, DX를 최우선으로 합니다."
리뷰어: "이 템플릿, 골든 패스에서 벗어나는 옵션이 너무 많아요. 선택지를 줄이고 합리적인 기본값을 제공하는 게 좋을 것 같아요."
개발자: "맞아요. CPU/메모리 옵션 제거하고 서비스 크기(small/medium/large)로 추상화하겠습니다."