MODOO HUB ← 모두의 툴
Dev · Instrument

YAML Diff 비교기

두 YAML을 입력하면 추가·삭제·변경된 항목을 색상으로 구분하여 표시합니다

📖 YAML Diff 비교기는 사실 YAML을 이해하지 못한다 가이드 보기

YAML Diff 비교기

이 도구의 파서는 정규식 ^(\s*)([\w.\-]+)\s*:\s*(.*)$로 한 줄씩 "키: 값" 형태만 훑는 방식이며, 줄 앞의 들여쓰기는 정규식에 캡처만 될 뿐 실제로는 어디에도 쓰이지 않습니다. 그 결과 database: 아래 들여써진 host:, port: 같은 키도 중첩 없이 모두 같은 최상위 평면 객체에 그대로 들어가며, 서로 다른 섹션에 같은 이름의 키가 있으면(예: database.host와 cache.host) 하나가 다른 하나를 덮어써 버립니다. "- 항목" 형태의 블록 스타일 배열은 콜론이 없어 정규식에 아예 매칭되지 않아 통째로 무시되고, 인라인 배열(tags: [a, b])도 실제로 배열로 해석되지 않고 문자열 그대로 취급됩니다.

자주 묻는 질문

이 도구가 실제로 YAML의 들여쓰기(중첩 구조)를 이해하나요?

아니요. 정규식이 줄 앞의 공백을 캡처하기는 하지만 그 값은 어디에서도 사용되지 않습니다. 들여쓰기 깊이와 무관하게 매칭된 모든 키가 하나의 평면(flat) 객체에 똑같이 저장됩니다.

중첩된 키 차이를 점(dot) 표기법으로 보여준다는 게 사실인가요?

정확히는 아닙니다. 들여쓰기 자체를 파싱 단계에서 무시하기 때문에 애초에 어떤 키가 어떤 부모 아래 있었는지 정보가 남지 않고, 그래서 점 표기법으로 경로를 표시할 근거 자체가 만들어지지 않습니다.

서로 다른 섹션에 같은 이름의 키가 있으면 어떻게 되나요?

예를 들어 database: host: a.comcache: host: b.com이 한 파일에 같이 있으면, 들여쓰기가 무시되므로 두 host 키가 같은 최상위 이름 공간에서 충돌해 나중에 파싱된 값이 앞의 값을 덮어씁니다. 실제로는 서로 다른 두 값인데 비교 결과에는 하나만 반영될 수 있습니다.

YAML의 블록 스타일 목록("- 항목")도 비교되나요?

아니요. 파서의 정규식은 콜론(:)이 있는 "키: 값" 줄만 인식하므로, 하이픈으로 시작하는 블록 스타일 목록 줄은 매칭되지 않아 비교 대상에서 통째로 빠집니다.

인라인 배열(예: tags: [a, b, c])은 어떻게 비교되나요?

실제 배열로 해석되지 않습니다. "[a, b, c]"라는 문자열 그대로 값으로 저장되고, 그 문자열 전체가 다시 JSON.stringify로 감싸질 뿐 배열 원소 단위 비교는 이루어지지 않습니다.

YAML 주석(#)의 변경 사항도 감지되나요?

거의 감지되지 않습니다. 콜론이 없는 순수 주석 줄은 정규식에 매칭되지 않아 완전히 무시되며, "값 # 주석" 형태로 값 뒤에 붙은 주석은 주석 텍스트까지 값의 일부로 그대로 저장되어, 주석만 바꿔도 마치 값 자체가 바뀐 것처럼 표시됩니다.

앵커(&)나 별칭(*), 여러 줄 문자열(|, >) 같은 고급 YAML 문법도 지원되나요?

지원되지 않습니다. 이 파서는 단순한 한 줄짜리 "키: 값" 패턴만 인식하므로, 앵커·별칭·블록 스칼라 같은 YAML 고급 문법은 매칭되지 않거나 값의 일부로 잘못 흡수될 수 있습니다.

대용량 YAML 파일도 처리할 수 있나요?

모든 처리가 브라우저 안에서 줄 단위 정규식 매칭으로 이루어지므로 아주 큰 파일은 느려질 수 있습니다. 위에서 설명한 한계들 때문에 실무에서 중요한 설정 비교라면 결과를 그대로 신뢰하지 말고 원본 파일도 함께 대조하는 것이 안전합니다.