[Daily morning study] Platform Engineering๊ณผ Internal Developer Platform (IDP) ๊ฐœ๋…

#daily morning study

Image


Platform Engineering์ด๋ž€

Platform Engineering์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๋นŒ๋“œยท๋ฐฐํฌยท์šด์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ถ€ ํ”Œ๋žซํผ(Internal Developer Platform, IDP)์„ ์„ค๊ณ„ํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋ง ๋ถ„์•ผ๋‹ค.

์ „ํ†ต์ ์ธ DevOps ๋ชจ๋ธ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธํ”„๋ผ ํ”„๋กœ๋น„์ €๋‹, ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ •, ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ • ๋“ฑ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ๋‹ค. ํŒ€ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด ์ž‘์—…์€ ์ค‘๋ณตยท๋น„ํšจ์œจยท์˜ค๋ฅ˜์˜ ์›์ธ์ด ๋๋‹ค. Platform Engineering์€ ์ด๋ฅผ ํ”Œ๋žซํผ ํŒ€์ด โ€œ์…€ํ”„ ์„œ๋น„์Šค ๋„๊ตฌโ€๋กœ ์ถ”์ƒํ™”ํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.


IDP (Internal Developer Platform)

IDP๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธํ”„๋ผ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌยท๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋‚ด๋ถ€ ํ”Œ๋žซํผ์ด๋‹ค.

IDP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ:

๊ธฐ๋Šฅ์„ค๋ช…
์…€ํ”„ ์„œ๋น„์Šค ํ™˜๊ฒฝ ํ”„๋กœ๋น„์ €๋‹๊ฐœ๋ฐœ์ž๊ฐ€ ํด๋ฆญ ๋˜๋Š” YAML ํ•œ ์žฅ์œผ๋กœ ํ™˜๊ฒฝ ์ƒ์„ฑ
CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ถ”์ƒํ™”๊ณตํ†ต ํŒŒ์ดํ”„๋ผ์ธ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต
์„œ๋น„์Šค ์นดํƒˆ๋กœ๊ทธ์กฐ์ง ๋‚ด ๋ชจ๋“  ์„œ๋น„์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐยท์˜์กด์„ฑ ๊ด€๋ฆฌ
๋น„๋ฐ€ ๊ด€๋ฆฌ ํ†ตํ•ฉVault, AWS Secrets Manager ์—ฐ๊ฒฐ ๋‹จ์ˆœํ™”
๋กœ๊ทธยท๋ฉ”ํŠธ๋ฆญยทํŠธ๋ ˆ์ด์‹ฑ ์—ฐ๊ฒฐ๊ด€์ธก์„ฑ(observability) ์Šคํƒ ์ž๋™ ์—ฐ๊ฒฐ

IDP์˜ ํ•ต์‹ฌ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ โ€œ์•ˆ์ „ํ•œ ์ถ”์ƒํ™”(golden path)โ€๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•œ Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ , ํ”Œ๋žซํผ ํŒ€์ด ์ •์˜ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•œ๋‹ค.


IDP vs PaaS

IDP์™€ PaaS(Heroku, Cloud Foundry ๋“ฑ)๋Š” ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๊ตฌ๋ถ„PaaSIDP
์ œ์–ด๊ถŒํ”Œ๋žซํผ ๋ฒค๋”์กฐ์ง ๋‚ด๋ถ€ ํ”Œ๋žซํผ ํŒ€
์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ œํ•œ์ ์กฐ์ง ์š”๊ตฌ์— ๋งž๊ฒŒ ์™„์ „ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
์ธํ”„๋ผ ์„ ํƒ์ข…์†๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œยทํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ง€์› ๊ฐ€๋Šฅ
์šด์˜ ์ฃผ์ฒด์™ธ๋ถ€๋‚ด๋ถ€ ํ”Œ๋žซํผ ํŒ€

๋Œ€ํ‘œ IDP ์˜คํ”ˆ์†Œ์Šค ์†”๋ฃจ์…˜

Backstage (by Spotify)

๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” IDP ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. React ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ์ž ํฌํ„ธ๋กœ, ์„œ๋น„์Šค ์นดํƒˆ๋กœ๊ทธยท์†Œํ”„ํŠธ์›จ์–ด ํ…œํ”Œ๋ฆฟยท๋ฌธ์„œ๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

# Backstage ์„œ๋น„์Šค ์นดํƒˆ๋กœ๊ทธ ๋“ฑ๋ก ์˜ˆ์‹œ
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-service
  description: ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค
  annotations:
    github.com/project-slug: myorg/payment-service
spec:
  type: service
  lifecycle: production
  owner: payments-team
  system: checkout-system

Backstage์—์„œ catalog-info.yaml์„ ์ €์žฅ์†Œ ๋ฃจํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฉด ํ”Œ๋žซํผ์ด ์ž๋™์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ธ์‹ยท๋“ฑ๋กํ•œ๋‹ค.

Port

๋…ธ์ฝ”๋“œ ์ค‘์‹ฌ์˜ IDP SaaS ์†”๋ฃจ์…˜์ด๋‹ค. ๊ฐœ๋ฐœ์ž ํฌํ„ธ์„ JSON/YAML๋กœ ์ •์˜ํ•˜๊ณ  GitHubยทJiraยทKubernetes ๋“ฑ ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•œ๋‹ค.

Humanitec

IDP ์—”์ง„์œผ๋กœ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋กœ์ง์„ โ€œScoreโ€ ๋ช…์„ธ๋กœ ์ถ”์ƒํ™”ํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ธํ”„๋ผ ์„ธ๋ถ€ ์‚ฌํ•ญ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜๋„(intent)๋งŒ ๊ธฐ์ˆ ํ•˜๋ฉด ๋œ๋‹ค.

# Score ๋ช…์„ธ ์˜ˆ์‹œ (Humanitec)
apiVersion: score.dev/v1b1
metadata:
  name: web-app
containers:
  web:
    image: myorg/web-app:latest
    resources:
      requests:
        cpu: "0.1"
        memory: "128Mi"
service:
  ports:
    www:
      port: 80
      targetPort: 8080

Golden Path

Golden Path๋Š” ํ”Œ๋žซํผ ํŒ€์ด ์กฐ์ง ๋‚ด ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋…น์—ฌ ๋งŒ๋“  ํ‘œ์ค€ ๊ฐœ๋ฐœยท๋ฐฐํฌ ๊ฒฝ๋กœ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ Backstage์˜ ์†Œํ”„ํŠธ์›จ์–ด ํ…œํ”Œ๋ฆฟ(scaffolder)์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด:

  1. ์ €์žฅ์†Œ ์ž๋™ ์ƒ์„ฑ (GitHub ์—ฐ๋™)
  2. CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ ๊ตฌ์„ฑ (GitHub Actions)
  3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Helm ์ฐจํŠธ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ํฌํ•จ
  4. ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ ์ž๋™ ํ”„๋กœ๋น„์ €๋‹ (Grafana)
  5. ์„œ๋น„์Šค ์นดํƒˆ๋กœ๊ทธ ๋“ฑ๋ก

์ด ๊ณผ์ •์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ฉฐ์น  ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด ์ˆ˜๋ถ„์œผ๋กœ ์ค„์–ด๋“ ๋‹ค.


Platform Engineering์˜ ํŒ€ ๊ตฌ์กฐ

Platform Engineering์—์„œ๋Š” ํ”Œ๋žซํผ ํŒ€์ด ๋ณ„๋„๋กœ ์กด์žฌํ•œ๋‹ค. ์ด ํŒ€์˜ ๊ณ ๊ฐ์€ ์™ธ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€ ๊ฐœ๋ฐœ์ž๋‹ค. ๊ทธ๋ž˜์„œ Thiago Ghisi, Manuel Pais ๋“ฑ DevOps ์—ฐ๊ตฌ์ž๋“ค์€ ํ”Œ๋žซํผ ํŒ€์„ โ€œX-as-a-Serviceโ€ ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ•์กฐํ•œ๋‹ค.

์ค‘์š”ํ•œ ์›์น™:

  • SLA๋ฅผ ๊ฐ€์ง„ ๋‚ด๋ถ€ ์ œํ’ˆ์ฒ˜๋Ÿผ ์šด์˜: ํ”Œ๋žซํผ๋„ ๋ฒ„์ „ ๊ด€๋ฆฌ, ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ, ์ง€์› ์ฑ„๋„์„ ๊ฐ–์ถฐ์•ผ ํ•œ๋‹ค.
  • ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜(DX) ์ธก์ •: DORA ๋ฉ”ํŠธ๋ฆญ ์™ธ์—๋„ ํ”Œ๋žซํผ ์‚ฌ์šฉ๋ฅ , ๊ฐœ๋ฐœ์ž ๋งŒ์กฑ๋„(NPS) ๋“ฑ์„ ์ธก์ •ํ•œ๋‹ค.
  • ์˜ตํŠธ์ธ ๋ฐฉ์‹: ๊ฐ•์ œ๊ฐ€ ์•„๋‹Œ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฑ„ํƒ๋˜๋„๋ก ํ•œ๋‹ค.

IDP ๋„์ž… ์‹œ ํ”ํ•œ ์‹ค์ˆ˜

1. ๋„ˆ๋ฌด ์ด๋ฅธ ๊ณผ๋„ํ•œ ์ถ”์ƒํ™” ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์™„๋ฒฝํ•œ ํ”Œ๋žซํผ์„ ๋งŒ๋“ค๋ ค๋‹ค ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ œ Pain Point๋ฅผ ๋†“์นœ๋‹ค. ๋จผ์ € ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ์™€ ๊ด€์ฐฐ์„ ํ†ตํ•ด ๊ฐ€์žฅ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ํŒŒ์•…ํ•˜๊ณ  ๊ฑฐ๊ธฐ์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

2. ํ”Œ๋žซํผ ํŒ€์˜ ๊ณ ๋ฆฝ ํ”Œ๋žซํผ ํŒ€์ด ๊ฐœ๋ฐœ ํŒ€์˜ ํ”ผ๋“œ๋ฐฑ ์—†์ด ๋…์ž์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋ฉด ์•„๋ฌด๋„ ์“ฐ์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์ด ๋œ๋‹ค. Embedded Platform Engineer๋ฅผ ๋„์ž…ํ•˜๊ฑฐ๋‚˜ ์ •๊ธฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ ์„ธ์…˜์„ ํ†ตํ•ด ํ˜„์žฅ ์š”๊ตฌ๋ฅผ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค.

3. ๊ธฐ์กด ๋„๊ตฌ์˜ ๋ฌด์กฐ๊ฑด ๊ต์ฒด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ต์ˆ™ํ•œ ๋„๊ตฌ(GitHub, Terraform ๋“ฑ)๋ฅผ ๊ต์ฒดํ•˜๋ฉด ์ €ํ•ญ์ด ํฌ๋‹ค. IDP๋Š” ๊ธฐ์กด ๋„๊ตฌ๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๋ ˆ์ด์–ด๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ ์ด๋‹ค.


์ •๋ฆฌ

Platform Engineering์€ DevOps ๋ฌธํ™”์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋‹ค. ์กฐ์ง์ด ์ปค์งˆ์ˆ˜๋ก ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ธํ”„๋ผ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์€ ๋น„ํšจ์œจ๊ณผ ์˜ค๋ฅ˜๋ฅผ ๋‚ณ๋Š”๋‹ค. IDP๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์…€ํ”„ ์„œ๋น„์Šค ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋ฉด ๋ฐฐํฌ ๋นˆ๋„๋ฅผ ๋†’์ด๊ณ , ์ธ์ง€ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋ฉฐ, ์กฐ์ง ์ „์ฒด์˜ ์—”์ง€๋‹ˆ์–ด๋ง ์†๋„๋ฅผ ๋Œ์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

Backstage๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ IDP ์ƒํƒœ๊ณ„๋Š” ๊ณ„์† ์„ฑ์žฅํ•˜๊ณ  ์žˆ๊ณ , CNCF์—์„œ๋„ Platform Engineering์„ ์ฃผ์š” ํŠธ๋ Œ๋“œ๋กœ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค.