GN⁺: 우리가 YAML을 템플릿하는 이유 (2019년)
(leebriggs.co.uk)YAML 템플릿 사용에 대한 의문
- YAML 템플릿 사용이 언제부터 일반적인 것으로 받아들여졌는지, 이것이 어떻게 받아들여질 수 있는지에 대한 질문 제기.
- cfgmgmtcamp 2019에서 Kubernetes 구성 관리의 필요성과 kr8 솔루션에 대해 발표함.
- 발표 중 YAML 템플릿에 대한 의문을 제기하여 온라인과 컨퍼런스에서 활발한 토론이 일어남.
구성 문제
- 애플리케이션과 인프라가 일정 규모 이상으로 성장하면 구성 복잡성의 문제에 직면함.
- 다양한 환경(개발, 스테이징, 프로덕션)이나 지역(유럽, 북미)에서 배포되는 애플리케이션의 구성이 서로 다를 수 있음.
- 시스템 관리자나 DevOps 엔지니어는 구성 관리의 복잡성을 잘 알고 있으며, 각각의 도구가 YAML을 사용하여 이 문제를 해결함.
우리는 후퇴했는가?
- 클라우드 컴퓨팅으로 산업의 요구가 변화하면서 새로운 도구들이 등장함.
- CloudFormation과 Helm과 같은 도구들은 우수한 구성 도구이지만, YAML 템플릿을 설계할 때 산업 전반적으로 실수를 했다고 믿음.
- Helm 차트가 사용자 정의 매개변수를 받는 예시를 들어 설명함.
Helm 차트
- Helm 차트는
values.yaml
파일을 통해 외부 매개변수를 받아 차트를 렌더링함. - 간단한 문자열 매개변수부터 시작하여 선택적 필드나 배열, 맵을 구성할 때의 복잡성을 설명함.
- YAML의 엄격한 공백 요구 사항과 템플릿 시스템의 한계를 지적함.
JSON, Jsonnet & YAML
- YAML은 JSON의 상위 집합이며, 두 형식 간의 변환은 간단함.
- Jsonnet은 데이터 템플릿 언어로서 JSON 구성을 생성하는 것을 목적으로 함.
Jsonnet의 교회
- Jsonnet은 Kubernetes 커뮤니티 외부에서는 잘 알려지지 않은 새로운 언어임.
- Jsonnet을 사용하여 외부 변수를 사용하는 JSON 구성을 쉽게 생성할 수 있음.
- 선택적 필드, 맵, 매개변수를 다루는 방법과 Jsonnet의 추가 기능을 설명함.
Kr8
- Kr8는 여러 Kubernetes 클러스터의 구성을 쉽고 간단하게 만들고 조작하는 데 사용되는 모든 방법을 사용함.
- 여기서 설명한 개념에 공감한다면 Kr8을 확인해볼 것을 권장함.
GN⁺의 의견
- YAML 템플릿의 복잡성: 이 글은 YAML 템플릿의 복잡성과 한계를 지적하며, 구성 관리에 있어서 산업이 직면한 문제를 잘 드러냄.
- Jsonnet의 장점: Jsonnet이 YAML 템플릿의 대안으로 제시되며, 그 사용의 용이성과 유연성을 강조함으로써 새로운 도구에 대한 관심을 유도함.
- 구성 관리의 미래: 이 글은 구성 관리의 미래에 대한 통찰을 제공하며, DevOps 및 시스템 관리자들에게 새로운 접근 방식을 모색할 기회를 제공함.
Hacker News 의견
-
YAML 설정 파일에 대한 불만이 많음. GitHub Actions에서도 가장 나쁜 부분으로 여겨지며, 다른 독점적 설정 언어들(HCL, ASL 등)에 대해서도 비슷한 느낌을 받음. 선언적 API는 좋지만, 선언을 프로그래밍적으로 생성할 수 있게 해달라는 요구가 있음.
-
코드로 설정을 선언하고 생성하는 것이 더 나은 경험을 제공함. AWS CDK가 이 부분을 정확히 이해하고 있으며, 타입 안전한 언어와 IDE 지원을 통해 설정과 클라우드 인프라의 선언적 정의를 작성할 수 있음.
-
YAML 템플릿이 비합리적이라는 데 동의하며, 복잡한 로직이 필요할 때는 실제 프로그래밍 언어를 사용하여 YAML/JSON 등을 생성해야 한다고 주장함. 이렇게 하면 많은 문제를 해결할 수 있음.
-
Kubernetes에 대한 논의가 있었으며, Kubernetes API가 직관적이고 잘 정의된 JSON 스키마를 가지고 있음에도 불구하고, 사람들은 Helm 차트 사용법을 배우는 데 시간을 많이 소비함. Jsonnet, Ksonnet, Nu, CUE는 큰 인기를 얻지 못했으며, 대부분의 사람들이 kubectl에 내장된 Kustomize를 사용하는 것으로 보임.
-
개발자들이 설정을 어떻게 올바르게 처리해야 하는지에 대해 충분히 고민하지 않는다는 지적이 있음. 모든 프로그래밍이 사실상 설정의 문제라고 할 수 있으며, 모든 설정은 결국 어떤 함수의 매개변수로 전달됨. 설정을 중앙 데이터베이스에 저장하는 것이 더 나을 수 있음.
-
CI/CD에서 YAML이 거의 프로그래밍 언어처럼 사용되는 경우가 있는데, 이는 매우 장황하고 직관적이지 않으며, 제대로 정의되지 않은 벤더 특정 언어로 여겨짐.
-
Helm이 승리한 것에 대해 유감을 표함. Helm 차트 작업은 매우 불편하며, 에디터가 도움을 줄 수 없고, 모든 데이터를 'indent 4'를 통해 올바르게 정렬해야 함. Helm이 Kubernetes의 종말을 가져올 것이라는 예측이 있음.
-
문자열 보간을 사용하여 기계가 읽을 수 있는 코드를 생성하는 것은 바람직하지 않다는 개인적인 철학을 가짐. SQL 인젝션과 크로스사이트 스크립팅과 같은 문제가 계속 발생할 것임. HTML을 생성하기 위해 템플릿 파일을 사용하지 않아야 한다고 주장함.
-
YAML을 선택하는 사람들이 문제를 인식하지 못하는 것 같다는 의견이 있음. 인간 중심의 데이터 표현과 컴퓨터 중심의 데이터 표현 사이에는 직접적인 충돌이 있음. YAML과 JSON은 실제로는 서로 다른 데이터 형식임.
-
YAML을 좋아하지만 Helm 차트 작업 시 매일 저주를 내린다는 의견이 있음. Helm을 싫어하면서도 모두가 사용하기 때문에 여전히 사용할 것이라는 입장을 보임.
-
cuelang으로 전환하는 것을 고려하고 있으며, 이는 Jsonnet보다 더 잘 설계되었다고 생각함. Kubernetes에는 이미 상태 조정 기능이 있으므로 삭제 기능만 추가되면 됨.