HCL 문법 참조
HCL 문법 참조
이 섹션의 다른 페이지에서는 HCL에 나타날 수 있는 다양한 구성 구문을 설명했어요. 이 페이지는 언어의 더 낮은 수준의 문법을 더 자세히 설명해서, 그 구문들이 만들어지는 구성 요소를 보여줘요.
출처: 문서
본문
이 페이지는 사람이 읽고 쓰기 쉽게 설계된 풍부한 언어인 HCL의 네이티브 문법(native syntax) 을 설명해요.
HCL의 이 낮은 수준 문법은 다른 애플리케이션, 특히 다른 HashiCorp 제품의 구성 언어에서도 사용되는 HCL이라는 문법으로 정의돼요. Nomad를 사용하는 데 HCL의 모든 세부 사항을 알 필요는 없으므로, 이 페이지는 가장 중요한 세부 사항을 요약해요. 관심이 있다면 HCL 네이티브 문법 사양에서 HCL 문법의 전체 정의를 찾을 수 있어요.
인자와 블록 (Arguments and Blocks)
HCL 문법은 인자(arguments)와 블록(blocks)이라는 두 가지 핵심 문법 구문을 중심으로 만들어져요.
인자 (Arguments)
인자는 특정 이름에 값을 할당해요.
image_id = "nginx:1.19"
등호 앞의 식별자는 인자 이름이고, 등호 뒤의 표현식은 인자의 값이에요.
인자가 나타나는 문맥에 따라 유효한 값 타입이 결정돼요(예를 들어 각 job 블록 타입은 인자 타입을 정의하는 스키마를 가지고 있어요). 하지만 많은 인자는 임의의 표현식을 허용해서, 값을 리터럴로 지정하거나 다른 값에서 프로그래밍 방식으로 생성할 수 있게 해줘요.
블록 (Blocks)
블록은 다른 내용을 담는 컨테이너예요.
task "webserver" {
driver = "docker"
config {
# ...
}
}
블록은 타입(이 예제에서는 task)을 가져요. 각 블록 타입은 타입 키워드 뒤에 몇 개의 라벨(labels) 이 와야 하는지 정의해요. task 블록 타입은 라벨 하나를 기대하며, 위 예제에서는 webserver가 그 라벨이에요. 특정 블록 타입은 필요한 라벨을 여러 개 가질 수도 있고, 중첩된 config 블록 타입처럼 아무 라벨도 필요로 하지 않을 수도 있어요.
블록 타입 키워드와 라벨 뒤에 블록 본문(body) 은 {와 } 문자로 구분돼요. 블록 본문 안에서는 추가 인자와 블록을 중첩할 수 있어서, 블록과 관련 인자의 계층 구조를 만들어요.
HCL은 제한된 수의 최상위 블록 타입(top-level block types) 을 사용하는데, 이는 구성 파일에서 다른 블록 밖에 나타날 수 있는 블록이에요.
식별자 (Identifiers)
인자 이름, 블록 타입 이름, 그리고 task, 입력 변수 등의 대부분의 Nomad 관련 구문 이름은 모두 식별자예요.
식별자는 문자, 숫자, 밑줄(_), 하이픈(-)을 포함할 수 있어요. 식별자의 첫 문자는 숫자여서는 안 되는데, 리터럴 숫자와의 혼동을 피하기 위해서예요.
완전한 식별자 규칙을 위해 Nomad는 ASCII 하이픈 문자 -를 포함하도록 확장된 Unicode 식별자 문법을 구현해요.
주석 (Comments)
HCL은 세 가지 다른 주석 문법을 지원해요.
# 한 줄 주석 스타일은 기본 주석 스타일이며 대부분의 경우 사용해야 해요. 자동 구성 형식화 도구는 이중 슬래시 스타일이 관용적이지 않으므로 // 주석을 자동으로 # 주석으로 변환할 수 있어요.
문자 인코딩과 줄 끝 (Character Encoding and Line Endings)
Nomad 구성 파일은 항상 UTF-8로 인코딩되어야 해요. 언어의 구분자는 모두 ASCII 문자지만, Nomad는 식별자, 주석, 문자열 값에서 비 ASCII 문자를 받아들여요.
Nomad는 Unix 스타일 줄 끝(LF만)이나 Windows 스타일 줄 끝(CR 다음에 LF)이 있는 구성 파일을 모두 받아들이지만, 관용적인 스타일은 Unix 관례를 사용하는 것이므로 자동 구성 형식화 도구는 CRLF 끝을 자동으로 LF로 변환할 수 있어요.
더 알아보기 (Learn more)
- HCL 표현식에 대해 자세히 알아보세요.