YAML
YAML 변환기
YAML과 JSON을 양방향으로 변환.
YAML과 JSON에 대하여
YAML과 JSON은 맵, 리스트, 문자열, 숫자, 불리언이라는 같은 구조를 서로 다른 표기법으로 나타냅니다. YAML은 들여쓰기에 기대어 사람이 직접 작성하는 형식이고, JSON은 명시적이며 대부분의 API와 라이브러리가 실제로 처리하는 형식입니다. 변환은 대체로 기계적이지만, YAML에는 주석이나 앵커처럼 JSON이 표현할 수 없는 기능이 있다는 점은 유의해야 합니다.
YAML의 타입 규칙은 보기보다 좁습니다. true/false(및 True나 TRUE 같은 대소문자 변형)만 불리언으로 파싱되며, yes, no, on, off는 그냥 문자열로 남습니다. 이는 그런 값들도 불리언으로 취급했던 일부 구형 YAML 파서와 다른 점으로, 국가 코드 NO가 조용히 false가 되어버릴 수 있다는 이유로 온라인에서 "노르웨이 문제"라고 알려진 불일치입니다. 여기서 더 흔히 마주치는 놀라움은 정밀도 문제입니다. JSON 숫자는 IEEE-754 배정밀도 부동소수점이므로, 2^53을 넘는 64비트 정수는 원래 YAML 값이 정확했더라도 변환되는 순간 한두 자리를 잃을 수 있습니다.
사용되는 곳
- 쿠버네티스 매니페스트나 docker-compose 파일을 스크립트용 JSON으로 바꾸기
- API 응답을 YAML을 요구하는 설정 파일에 붙여넣기
- CI 파이프라인 정의가 예상대로 해석되는지 확인하기
- 도구를 옮기면서 두 설정 형식을 비교하기
자주 묻는 질문
주석은 어떻게 되나요?
사라집니다. JSON에는 주석 문법이 없어서 YAML을 JSON으로 바꾸면 # 로 시작하는 줄이 모두 영구히 없어집니다. 주석이 중요하다면 YAML 원본을 보관하세요.
앵커와 별칭도 지원하나요?
네. 다만 JSON은 참조를 표현할 수 없으므로 가리키는 값으로 펼쳐집니다. 별칭이 다른 별칭을 참조하면 크기가 매우 빠르게 불어나기 때문에, 지나치게 커질 변환은 시도하지 않고 거부합니다.
입력한 데이터가 저장되나요?
아닙니다. 변환은 해당 요청에 대해서만 서버에서 처리되며, 이후 기록되거나 보관되지 않습니다.
JSON으로 변환한 뒤 큰 정수가 살짝 바뀐 이유는 무엇인가요?
JSON은 모든 숫자를 IEEE-754 배정밀도 부동소수점(JavaScript가 쓰는 것과 같은 숫자 타입)으로 표현하며, 이는 2^53(9,007,199,254,740,991)까지만 정수를 정확히 담을 수 있습니다. 64비트 데이터베이스 ID나 Discord 스타일의 스노플레이크 ID 같은 YAML 값은 이를 넘을 수 있고, JSON 숫자로 변환하면 조용히 반올림됩니다. 정확한 정밀도가 중요하다면, 변환 전에 그런 값을 따옴표로 감싼 YAML 문자열로 두세요. 그러면 숫자가 아니라 JSON 문자열로 전달됩니다.