[Daily morning study] Platform Engineering๊ณผ Internal Developer Platform (IDP) ๊ฐ๋
#daily morning study
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 ๋ฑ)๋ ๋น์ทํด ๋ณด์ด์ง๋ง ์ฐจ์ด๊ฐ ์๋ค.
| ๊ตฌ๋ถ | PaaS | IDP |
|---|---|---|
| ์ ์ด๊ถ | ํ๋ซํผ ๋ฒค๋ | ์กฐ์ง ๋ด๋ถ ํ๋ซํผ ํ |
| ์ปค์คํฐ๋ง์ด์ง | ์ ํ์ | ์กฐ์ง ์๊ตฌ์ ๋ง๊ฒ ์์ ์ปค์คํฐ๋ง์ด์ง |
| ์ธํ๋ผ ์ ํ | ์ข ์ | ๋ฉํฐ ํด๋ผ์ฐ๋ยทํ์ด๋ธ๋ฆฌ๋ ์ง์ ๊ฐ๋ฅ |
| ์ด์ ์ฃผ์ฒด | ์ธ๋ถ | ๋ด๋ถ ํ๋ซํผ ํ |
๋ํ 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)์ ํตํด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด:
- ์ ์ฅ์ ์๋ ์์ฑ (GitHub ์ฐ๋)
- CI/CD ํ์ดํ๋ผ์ธ ์๋ ๊ตฌ์ฑ (GitHub Actions)
- ์ฟ ๋ฒ๋คํฐ์ค Helm ์ฐจํธ ๊ธฐ๋ณธ ๊ตฌ์ฑ ํฌํจ
- ๋ชจ๋ํฐ๋ง ๋์๋ณด๋ ์๋ ํ๋ก๋น์ ๋ (Grafana)
- ์๋น์ค ์นดํ๋ก๊ทธ ๋ฑ๋ก
์ด ๊ณผ์ ์ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๋ฉฐ์น ๊ฑธ๋ฆฌ๋ ์์ ์ด ์๋ถ์ผ๋ก ์ค์ด๋ ๋ค.
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์ ์ฃผ์ ํธ๋ ๋๋ก ๋ค๋ฃจ๊ณ ์๋ค.