BASHA TECH

YAML과 JSON의 차이 (+XML 설명) 본문

Computer

YAML과 JSON의 차이 (+XML 설명)

Basha 2023. 12. 21. 23:07
728x90

Xml과 Json 파일 포맷은 많이 들어보셨는지요?

아마 많이 쓰고 계실 걸로 생각 됩니다. 그럼 이런 포맷들은 왜 사용할까요?

그걸 먼저 설명드리면,

우리가 타 시스템 간에 데이터를 주고 받을 때 데이터 포맷에 대한 약속이 필요합니다.

혼자 시스템을 개발하거나 내부 시스템 끼리는 "1-바샤-학생,2-개똥이-친구" 이라는 문자열을 만들어서 "-(하이픈)"을 파싱해서 순서대로 "1"은 일련번호, "바샤"은 이름, "학생"는 구분이라는 규칙과, ",(콤마)"는 리스트를 나타내는 구분자라는 규칙을 세울 수 있을 겁니다.

그럼 데이터를 내부 시스템에 전송할때 포맷에 대한 형태는 말로써 혹은 내부 문서로써 정의해 놓으면 되기 때문에 데이터 크기는 엄청 작아 질 수 있겠네요.

근데 문제는 타 시스템들과의 연동을 할때입니다.

내부에서 세운 규칙을 타 시스템들과 데이터를 주고 받을때다 문서로주고 받기도 번거롭고, 데이터 규칙에 대한 문서들이 많아지게 되는 문제가 있습니다.

그래서 Xml이나 Json과 같은 데이터 포맷을 정의하고 그 포맷에는 규칙도 있습니다.

아주 오래전부터 사용되었던 포맷은 Xml이겠네요.

좀 정신없는 그림이지만..

이렇게 태그형식을 통해서 Key와 Value를 구분하고, 태그안에 태그를 넣어서 부모와 자식관계의 구조를 나타냅니다.

저도 요즘은 Xml 포맷을 자주 접하지 않아서 보고 있으면 어지럽네요;

근데 위에 Object와 Array 부분은 표시를 해놨지만 Xml포맷상으로는 구분이 안되는 부분도 있습니다.

다음은 똑같은 내용의 Json 포맷입니다.

딱 봐도 간소해 보이네요. 좀 눈에 피로가 풀리는것 같습니다. ㅎ

그리고 Object 일 경우 {} 로 감싸주고있고, Array일 경우 []로 감싸주고 있어서 구분도 되고요.

Key도 아까 Xml처러 두번 들어가지 않아서 좋네요.

근데 {}, [], "" 이런 문자들이 지금은 좀 거추장스러워 보입니다.

(yaml 파일을 알기 전까진 몰랐지만요 ㅎ)

다음은 Yaml 입니다. 야믈이라고 보통 읽고요. yml 이라고도 씁니다.

안구정화가 되네요.

  • **(하이픈)**을 통해서 Array임을 알수가 있습니다.

yaml을 몰라서 안쓴 사람은 있어도 한번 yaml을 쓰게되면 다른포맷은 불편하게 느껴지게 된다고 말씀드리고 싶네요.

가독성 비교를 한번 해볼까요?

yaml 포맷은 이제 많은 곳에서 사용되고 있습니다.

저도 개발 시스템 설정파일은 예전엔 conig.properies를 사용했는데 이제는 대부분은 config.yaml로 모두 바꾼 상태고요.

쿠버네티스에서도 API를 전송할땐 json 규격도 사용되지만

일반적으로 yaml을 권장하고 있습니다.


구성 파일의 데이터 가독성에 관해 이야기하면 JSON 과 YAML을 모두 교대로 사용할 수 있습니다. 따라서 가독성 측면에서 비교가 매우 어렵습니다. 구성 파일에서 JSON은 YAML 과 마찬가지로 동일한 데이터 유형을 표현할 수 있습니다 . YAML은 키/값 쌍의 집합 이지만 그 안에 개체가 없습니다.

또한 JSON은 JavaScript 와 같은 프로그래밍 언어로 데이터를 저장하는 데 광범위하게 사용되는 본격적인 데이터 구조입니다 . 반면에 YAML은 구성 파일 외부에 존재하지 않습니다.

JSON 은 직렬화 형식 측면에서 가장 적합한 반면 YAML은 구성 측면에서 더 좋습니다. JSON 에는 JavaScript 객체에서 시작된 직렬화 형식이 있습니다.

JSON 에서는 문자열을 큰따옴표로 사용할 수 있지만 YAML은 작은따옴표와 큰따옴표를 모두 지원합니다. 주석은 YAML 에서 해시 또는 숫자 기호를 통해 표시되는 반면 JSON 에서는 주석이 허용되지 않습니다 .


JSON  이 더 나은지 YAML이 더 나은지 결정하는 것은 매우 어렵습니다 . 가독성은 YAML이 훨씬 더 좋지만 크기로 갈수록 JSON이 우위를 차지합니다. JSON 은 YAML 보다 비교적 빠릅니다 . 그러나 데이터 구성이 작다면 인터페이스가 훨씬 더 친숙하기 때문에 YAML이 더 좋습니다.

JSON에는 객체, 배열, 문자열, 숫자, null 및 부울과 같은 6가지 데이터 유형을 인코딩하는 기능이 있습니다. JSON은 기계가 구문 분석하기가 훨씬 쉽고 Python 데이터 인코딩을 허용하지만 디코딩하는 동안 취약점이 있는 YAML에 비해 매우 유연합니다. 이것이 바로 YAML을 구문 분석하기가 너무 어려운 이유입니다.

728x90
반응형
Comments