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

들여쓰기 — 스페이스만, 항상

~10 min · yaml, indentation, whitespace

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

YAML 의 가장 중요한 규칙

YAML 은 들여쓰기로 중첩을 표시해. 그리고 그 들여쓰기는 스페이스만 써. 탭은 안 돼. 파서 대부분은 들여쓰기에 탭이 보이면 대놓고 에러를 내. 더 나쁜 건 그냥 받아주고 정렬만 소리 없이 망가뜨리는 소수의 파서고.

얼마나 들여쓰기

spec 자체는 관대해. 같은 블록 안에서만 칸 수가 일정하면 몇 칸이든 돌아가. 관행은 2 칸이야. 옛 Ansible role 이나 일부 Kubernetes manifest 예제처럼 4 칸을 쓰는 데도 있고. 파일마다 하나를 정해서 끝까지 지켜.

부모의 이름 너머 들여쓰기

자식은 부모의 콜론이 아니라 이름을 넘어서까지 들여써야 해. foo:\n bar: 1 이 되는 이유는 barfoo 가 시작하는 자리보다 뒤에 앉아 있어서야. 한 칸만 어긋나도 파서가 거부하거나, 더 고약하게는 데이터 모양을 다르게 읽어버려.

'tab vs space' 함정: 에디터는 파일 종류를 보고 탭을 알아서 바꿔줘. 그런데 YAML 파일이 그냥 'plain text' 로 인식되면 에디터가 탭을 그대로 집어넣고, YAML 파서가 거기서 죽어. 이때 에러는 보통 'expected mapping value, got X' 라면서 들여쓴 줄을 가리키지, 탭 이야기는 한마디도 안 해. 에디터에서 YAML 파일은 무조건 스페이스를 넣도록 잡아둬.

Code

표준 2 칸 들여쓰기·yaml
server:
  host: localhost
  port: 8000
  database:
    name: pippa
    pool_size: 5
logging:
  level: info
  format: json
같은 데이터, 4 칸 들여쓰기 (역시 유효)·yaml
server:
    host: localhost
    port: 8000
    database:
        name: pippa
        pool_size: 5
깨진 — 탭과 스페이스 혼합·text
server:
  host: localhost     ← spaces
	port: 8000          ← TAB → parser dies
  database:           ← spaces
      name: pippa     ← inconsistent indent depth
에디터 설정 (VS Code)·json
// .vscode/settings.json
{
  "[yaml]": {
    "editor.tabSize": 2,
    "editor.insertSpaces": true,
    "editor.detectIndentation": false
  }
}

External links

Exercise

실제로 쓰는 YAML 파일을 하나 골라. docker-compose.yaml 이든 workflow 파일이든 상관없어. cat -A file.yaml (Linux) 이나 cat -te file.yaml (macOS) 을 돌려봐. 출력에 뜨는 ^I 마커가 탭 문자야. 그 다음 에디터가 YAML 파일에서 탭을 스페이스로 펴도록 설정하고, 파일을 한 번 고친 뒤 다시 확인해. 마지막으로 그 에디터 설정을 dotfiles 에 남겨둬.

Progress

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

댓글 0

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

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