본문 바로가기
C.W.K.
Stream
Lesson 06 of 08 · published

Table — 섹션, 중첩, inline

~12 min · toml, tables, sections

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

구조화된 config 작성하는 세 방법

표준 table — [section]

[name] 으로 시작하는 줄이 새 table 을 열어. 그 아래부터 다음 table 헤더가 나올 때까지의 모든 key 가 그 table 에 들어가. 이름은 key 문법을 그대로 따라 (bare 든 quoted 든, 중첩이면 점을 찍고).

중첩 table — [section.subsection]

table 헤더에 찍은 점이 곧 중첩이야. [server.database]server table 안의 database table 을 가리켜.

Inline table — { key = value, ... }

중괄호로 묶은 table 은 한 줄에 들어가. 좌표 하나, 설정값 하나처럼 자잘한 덩어리에 써. [section] 을 통째로 여는 게 과하게 느껴질 때 말이야. 다만 inline table 은 거기서 완결돼. 한 번 써놓으면 나중에 [section] 헤더로 뭘 더 붙일 수가 없어.

YAML 보다 순서 덜 중요

[a] 보다 [a.b] 를 먼저 써도 되고, [a] 를 아예 안 써도 돼. 안 쓰면 있는 걸로 쳐주거든. 파서가 알아서 맞춰. 대신 값을 하나 치러. 파일을 위에서 아래로 읽은 순서가 실제 파싱된 구조와 늘 맞아떨어지지는 않아. 유연함을 얻고 그만큼 내주는 거야.

'table 은 다시 못 열어': [server] 로 한 번 연 table 은 나중에 [server] 로 또 열 수 없어. 그 table 의 key 는 헤더 하나 아래에 다 모아둬. sub-table 이나 array of table 은 이야기가 다른데, 그건 다음 lesson 에서 볼게.

Code

표준 table·toml
title = "My App"
version = "1.0"

[server]
host = "localhost"
port = 8000

[database]
url = "postgresql://localhost/pippa"
pool_size = 5
중첩 table·toml
[server]
host = "localhost"
port = 8000

[server.tls]
enabled = true
cert_file = "./certs/server.pem"

[server.tls.cipher]
list = ["AES256-GCM", "CHACHA20"]
minimum_version = "TLS1.2"
Inline table·toml
# 같은 데이터, 두 스타일
# 스타일 A — 표준 table:
[point]
x = 0.5
y = 1.7

# 스타일 B — inline table:
point = { x = 0.5, y = 1.7 }

# Inline table 이 배열 안에서 좋음:
endpoints = [
  { name = "login",   path = "/auth/login",  rate_limit = 60 },
  { name = "signup",  path = "/auth/signup", rate_limit = 5  },
  { name = "chat",    path = "/chat",        rate_limit = 30 },
]

External links

Exercise

네 단계 넘게 중첩된 깊은 YAML config 를 하나 골라. 같은 데이터를 중첩 table 헤더 ([a.b.c]) 를 써서 TOML 로 옮겨. 그리고 둘을 나란히 읽어봐. 깊이 중첩된 config 라면 TOML 처럼 평평하게 눕히고 접두어를 붙이는 쪽이 YAML 의 공백 들여쓰기보다 분명할 때가 많아. 값이 어느 가지에 사는지 한눈에 보이거든.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.