Pkl – Apple’s config lang


최근에 Apple이 내부에서 사용하던 Configuration language를 오픈소스로 공개헀습니다. 바로 Pkl(피클)인데요, 과연 Pkl은 JSON과 YAML과 함께 Config의 스타가 될 수 있을까요?

오늘은 Pkl에 대해 알아봅니다.

name = "Swallow"

job {
  title = "Sr. Nest Maker"
  company = "Nests R Us"
  yearsOfExperience = 2
}

Style

기본적으로 YAML 포맷을 많이 닮았습니다. 차이가 있다면 그룹 단위로 묶일 때 JSON 과 같이 중괄호로 묶어서 조금 더 경계가 명확하게 보일 수 있어서 좋네요.

Pkl / Json / Yaml

Dynamic Config

Pkl은 JSON, YAML과 같은 Static Config Format이 아닙니다. Rubyconfig, HCL과 같이 config 내부에서 로직을 담을 수 있기 때문에 조건에 따른 또는 반복적인 Config 선언 등 확장성이 좋습니다.

예를들어 config 내부에서 if와 같은 Expressions을 사용할 수 있습니다.

name = "Swallow"

job {
  title = "Sr. Nest Maker"
  company = "Nests R Us"
  yearsOfExperience = if (2 + 2 == 5) 1 else 2
}

Type Constraints

Config 내에서 각 설정에 대한 type을 명시하여 유효성을 검사할 수도 있습니다.

class Bird {
  name: String(length >= 3) // 괄호 내부의 데이터는 Type validation의 조건
  parent: String(this != name)
}

pigeon: Bird = new {
  name = "Pigeon" // String이고 3 이상이기 때문에 통과함
  parent = "Pigeon Sr."
}

Pkl CLI

Installation

OS 별 설치는 Installation 문서를 참고하시기 바랍니다.

Usage

Pkl은 CLI 도구로도 제공됩니다. CLI 이용하면 pkl 파일을 쉽게 생성할 수 있고 대화형 쉘을 제공하기 때문에 REPL 루프가 포함됩니다.

# Render pkl module
pkl eval

# Start a REPL session
pkl repl

Conclusion

처음에는 JSON, YAML 같은 Static Config 생각하고 호기심에 접했지만 실제론 Rubyconfig와 같이 language라서 더 좋은 인상을 남긴 것 같습니다. 실제로 사용해볼 기회가 얼마나 있을지는 모르겠지만, k8s 등으로 많은 configration이 생기고 복잡성이 증가함에 따라 Pkl이 가지는 장점들이 더 부각되지 않을까 싶습니다.

레퍼런스도 잘 되어 있어서 관심 있으시다면 한번쯤은 경험해보시는 것을 추천합니다 😀



Source link