XML(Extensible Markup Language)
개요
<students>
<student>
<name>Park</name>
<id>150</id>
</student>
<student>
<name>Javis</name>
<id>136</id>
</student>
</students>
HTML과 유사한 문자 기반의 마크업 언어이다. 하지만 HTML과는 달리, 데이터를 보여주는 목적이 아닌 저장 및 전달 목적으로만 쓰인다. 또한 HTML 태그처럼 미리 정의되어 있지 않고, 사용자가 직접 정의할 수 있다.
특징
1. 다른 목적의 마크업 언어(ex. HTML)을 만드는 데 사용되는 다목적 마크업 언어이다.
2. XML은 다른 시스템끼리 다양한 종류의 데이터를 손쉽게 교환할 수 있도록 지원한다.
3. 새로운 태그를 만들 수 있기 때문에 확장성이 좋다.
4. 데이터를 보여주지 않고, 데이터를 저장하고 저장하는 것만을 목적으로 한다.
5. 텍스트 데이터 형식의 언어로 모든 XML 문서는 유니코드 문자로만 이루어진다.
- 유니코드: 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
JSON
개요
{"students":[
{
"name" : "park",
"id" : "150"
},
{
"name" : "javis",
"id" : "136"
}
]}
위 XML 예시를 JSON으로 나타낸 것이다. JSON은 속성-값 쌍 또는 키-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신(AJAX)에서 사용되고, XML을 대체할 수 있다.
특징
1. 자바스크립트를 확장하여 만들어졌다.
2. 자바스크립트 객체 표기법을 따른다.
3. 사람과 기계가 모두 읽기 편하도록 고안되었다.
4. 프로그래밍 언어와 운영체제에 독립적이다.
XML vs JSON
공통점
1. 데이터를 저장하고 전달하기 위해 고안되었다.
2. 기계와 사람이 모두 쉽게 읽을 수 있다.
3. 계층적인 데이터 구조를 가진다.
4. 다양한 프로그래밍 언어에 의해 파싱이 가능하다.
5. 둘 다 XMLHttpRequest 객체를 이용하여 서버로부터 데이터를 전송받을 수 있다.
차이점
1. JSON은 종료 태그를 사용하지 않는다.
2. JSON이 XML보다 짧다.
3. JSON 데이터를 XML 데이터보다 빨리 읽고 쓸 수 있다.
4. XML은 배열을 사용할 수 없지만, JSON은 배열을 사용할 수 있다.
5. 각자 파싱하는 방법이 다르다.
⭐ API 설계 관점에서의 비교
항목 | XML | JSON |
메타데이터의 비중 | 높음(XML 태그 때문에) | 낮음 |
파싱의 편의성 | 낮음 | 높음(JSON 데이터를 객체나 다중 배열로 즉각 변환 가능) |
파싱의 성능 | 상대적으로 낮음 | 상대적으로 높음 |
인자 및 응답 데이터의 문서화 | 일반 범용 문서 형식 및 XML 전용 문서 형식(XSD; XML Schema Definition)으로 작성 가능 | 일반 범용 문서 형식 및 JSON Schema로 작성 가능 |
인자 및 응답 데이터의 형식 정의 | 강함(값의 형식과 구조에 대한 명확한 정의가 가능) | 약함(값의 형식과 구조에 대한 정의가 어려움) |
인자 및 응답 데이터의 형식 검증 | 편리(XSD문서를 통해 자동화 검증 가능) | 불편(직접 형식 및 구조를 검증해야 함) |
그럼, 무엇이 더 나은가?
위 글을 읽어보면 둘 다 데이터 전달에 쓰이는 형식 같은데 무엇을 더 많이 쓰고 있을까?
정답은 JSON이다. 과거에는 XML이 더 많이 쓰였지만, JSON이 1) 특정 언어에 종속되지 않고, 2) 더 적은 용량으로 데이터 전송이 가능하고, 3) 구조 정의가 간편하고 가독성이 뛰어나다는 장점을 가지고 있기 때문이다.
이외에도 XML이 String 타입을 갖는데 비해 JSON은 string, number, array. boolean과 같은 다양한 타입을 사용할 수 있다는 장점이 있다.
그럼 JSON이 '더 적은 데이터의 양'과 '상대적으로 높은 처리 성능'을 가지고 있는 거네? JSON >>> XML 아닌가? 라고 생각할 수 있는데 또 그렇지만은 않다. 아직도 많은 개발자가 XML을 사용하고 있고, XML을 JSON의 강력한 라이벌로 지목하는 가장 큰 이유는 바로 '데이터의 형식적 무결성' 때문이다. 웹 API에서 입출력 데이터의 무결성을 검증·확보·유지하는 과정은 메모리나 성능적인 이익보다 더 중요할 수 있다.
1. 무결성을 확보하기 위해 개발자는 커스텀 데이터 규약을 정의하는 문서를 작성 및 공유해야 하며, 이 규약 문서는 강제성이 있어야 한다.
2. 규약 문서를 토대로 입출력 데이터에 대해 검증한다. 즉, 규약을 어겼을 때는 에러를 발생시키고 어느 부분을 어겼는지 알려줌으로써 무결성을 판단하는 기준이 되는 것이다.
3. 입력 데이터가 규약을 지킨다면 웹 API 호출 시 잘못된 인자로 인한 오동작을 예방할 수 있고, 출력 데이터가 규약을 지킨다면 잘못된 형식의 데이터를 클라이언트에게 보내어 파싱 에러를 유발하지 않는다.
위와 같이 커스텀이 자유로운 JSON에 비해 오래된 역사로 잘 다듬어진 XSD를 따르는 XML은 '무결성' 부분에 있어 강력한 힘을 가진다. 따라서 XML을 사용하면 웹 API 개발자 및 사용자는 XSD 파일을 공유하고 확인하는 것만으로도 해당 웹 API의 호출 규약을 이해할 수 있다.
지금까지 XML과 JSON의 개념과 이를 비교해보았다. XML이 더 좋다, JSON이 더 좋다를 쓰고 싶은 것이 아니라, 궁극적으로 말하고자 하는 바는 모든 경우에 강점을 갖는 경우는 없으니, API를 설계하고 개발할 때 본인의 상황에 맞는 데이터 형식을 선택하라는 것이다.
참고
'Spring' 카테고리의 다른 글
스프링에서 마이바티스(Mybatis) 사용하기 (0) | 2021.10.13 |
---|---|
프로토타입 빈(Prototype Bean) (0) | 2021.10.09 |
마이바티스(MyBatis) (0) | 2021.10.01 |
Spring Project 시작하기 (0) | 2021.09.24 |
AOP (0) | 2021.09.24 |
댓글