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

스칼라 — string, number, boolean, null

~12 min · yaml, scalars, strings, norway

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

YAML 은 스칼라 타입을 알아서 정하고, 덮어쓸 수도 있다

따옴표 없이 쓴 port: 8000 은 정수로 읽혀. port: "8000" 이라고 쓰면 문자열이 되고. 즉 파서가 생김새만 보고 타입을 찍는 거야. 편하라고 만든 이 기능이 동시에 YAML 에서 제일 유명한 함정이기도 해.

다섯 스칼라 스타일

  • 따옴표 없음 (plain)name: Pippa. 파서가 타입을 찍어.
  • 작은따옴표name: 'Pippa'. 무조건 문자열이야. 백슬래시도 글자 그대로 남고.
  • 큰따옴표name: "Pippa". 역시 무조건 문자열인데, JSON 식 escape (\n, \t, \u00e9) 를 받아줘.
  • Literal block (|) — 여러 줄을 담고 줄바꿈을 그대로 지켜.
  • Folded block (>) — 여러 줄을 담되 줄을 스페이스로 이어붙여.

Boolean, Norway 문제

YAML 1.1 은 따옴표 없는 스물두 개의 문자열을 boolean 으로 읽어. 파서 상당수가 아직 이걸 기본으로 쓰고, 1.22 이전 Kubernetes 도 여기 포함돼. 목록은 이래. y, Y, yes, Yes, YES, n, N, no, No, NO, true, True, TRUE, false, False, FALSE, on, On, ON, off, Off, OFF. 그래서 country: NO 라고 쓰면 country: False 가 돼버려. 해결은 하나야. 키워드처럼 생긴 문자열 값은 무조건 따옴표로 감싸. country: "NO" 라고 쓰면 문자열로 남아.

Null

따옴표 없이 쓰면 null 로 읽히는 형태가 넷 있어. null, Null, NULL, ~. 콜론 뒤에 아무것도 안 쓴 빈 값도 null 이고. 'null' 이라는 글자 자체가 필요하면 따옴표로 감싸서 'null' 이라고 써.

Norway 문제 (실제 사례): 어떤 config 파일이 국가를 두 글자 ISO 코드로 나열했어. countries: [GB, IE, NO, DE] 이렇게. YAML 1.1 파서가 NOFalse 로 바꿔버렸지. 노르웨이가 목록에서 통째로 사라졌고, 예약 시스템은 노르웨이 주소로 메일을 안 보내기 시작했어. 원인을 찾는 데 몇 주가 걸렸고. 키워드로 잘못 읽힐 여지가 있는 건 전부 따옴표로 감싸.

Code

다섯 스칼라 스타일·yaml
bare:    Pippa
single:  'Pippa'
double:  "Pippa"
literal: |
  This is line one.
  This is line two.
  Newlines preserved.
folded:  >
  This is one
  long sentence
  joined by spaces.
타입 추측 — bare 값·yaml
an_int:    42
a_float:   3.14
a_neg:     -17
sci:       6.022e23
a_bool:    true
a_null:    null
an_empty:                # also null
empty_str: ""            # explicit empty string
Norway 문제·yaml
# 위험 — YAML 1.1 에서 다 boolean 으로 파싱
country_a: NO        # → False
country_b: ON        # → True
flag:      yes       # → True

# 안전 — quote 해서 string 강제
country_a: "NO"
country_b: "ON"
flag:      "yes"
1.2 수정 (파서 지원하면)·yaml
%YAML 1.2
---
# YAML 1.2 에선 true/false/True/False/TRUE/FALSE 만 boolean.
# 'yes', 'no', 'on', 'off' 는 이제 plain string.
# 대부분 modern 파서가 1.2 기본; 옛것은 여전히 1.1 규칙.

External links

Exercise

두 글자 국가 코드를 죽 나열한 YAML 파일을 하나 써. NO, ON, OFF 를 꼭 넣고. PyYAML 의 yaml.safe_load 로 파싱해봐. 노르웨이와 친구들이 boolean 으로 변해 있을 거야. 이제 하나씩 작은따옴표로 감싸고 다시 파싱해. 그 diff 하나가 Norway 문제를 30 초 만에 설명해줘.

Progress

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

댓글 0

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

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