
애플리케이션 간 데이터 교환에 사용되는 데이터 표현
모두 데이터 직렬화 형식이다.
데이터를 정의하는 규칙을 제공하는 마크업 언어
< > 를 사용해서 데이터를 구분한다.
html과 유사한 구조를 가지고 있고, Tree구조로 데이터를 저장한다.
많은 변수와 동적 구성을 로드하는데 유용하다.

*공공데이터 포털에 있는 경기노선조회 api
해당 api는 xml데이터로만 정보를 제공해준다.
해당 데이터처럼 xml데이터는 html과 유사한 구조이면서 <>로 데이터를 구분하고 있다.
다만 이 불러온 데이터를 바로 웹에서 바로 사용할 수 없기 때문에 구문 분석기가 필요하다.
이로 인해 시스템 내적으로도 부담이 된다. (최근 api들이 json으로 데이터를 제공하는 이유)
구문 분석기를 사용하면 프로세스가 느려지고 복잡해지는 경우가 많아지는 문제가 있다.
정리하자면, xml은 기계가 데이터를 읽는 방식에 더 중점을 두고 있고, 복잡한 데이터 오류 검사에 효과적이다.
같은 데이터지만 사람과 기계 모두가 읽을 수 있는 데이터 교환 방식이다.
(키-값) 페어로 데이터를 구분한다.

요즘 api에서 제공하는 데이터가 보통 json형식으로, 위에서 보는 것과 같이 데이터 형식이 사람이 읽고, 쓰기가 편하게 되어 있다.
json은 xml과 달리 구문 분석기 필요 없이, 표준 js 함수로 구문이 분석 가능하다. (xml 분석 속도보다 빠름)
그래서 json은 데이터를 보기 편하게 하여 오로지 데이터 교환 목적에 중점을 둔다고 볼 수 있다.
*공공데이터 포털의 단기예보 정보 조회
이걸 왜 공부하게 됐냐면, 거의 모든 프로젝트에서 외부 api에서 받아오는 데이터를 가지고 처리해 client에게 제공해준다.
최근에 제공되는 api들은 거의 json으로 데이터를 보내줘서 개발 시에도 객체, 배열 안에 있는 데이터를 조회하는 방법과 동일하게 데이터를 사용할 수 있다.
하지만! 위에서 본 버스 노선 api와 같은 일부 api들은 데이터를 XML데이터로만 제공한다.
그래서 데이터를 직접 json으로 바꿔주는 코드들이 찾아보니 나왔다.

해당 코드를 이용해서 json형태로 변환했다.
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(response.data, 'text/xml');
const busRouteInfoItems = xmlDoc.getElementsByTagName('busRouteInfoItem');
if (busRouteInfoItems.length === 0) {
throw new Error('No bus route info item found');
}
const busRouteInfo = busRouteInfoItems[0];
const busInfo = {
regionName: busRouteInfo.getElementsByTagName('regionName')[0].textContent,
upFirstTime: busRouteInfo.getElementsByTagName('upFirstTime')[0].textContent,
upLastTime: busRouteInfo.getElementsByTagName('upLastTime')[0].textContent,
downFirstTime: busRouteInfo.getElementsByTagName('downFirstTime')[0].textContent,
downLastTime: busRouteInfo.getElementsByTagName('downLastTime')[0].textContent,
peekAlloc: busRouteInfo.getElementsByTagName('peekAlloc')[0].textContent,
nPeekAlloc: busRouteInfo.getElementsByTagName('nPeekAlloc')[0].textContent,
companyTel: busRouteInfo.getElementsByTagName('companyTel')[0].textContent,
};
이런 식으로 xml데이터의 태그로 구분된 데이터들을 그대로 태그별로 구분하여 textContent로도
화면에 출력이 가능하다. (실제 이 방식으로 버스 api데이터들을 사용했다.)
하지만 코드에서만 봐도 이런식의 데이터 사용방법은 코드를 불필요하게 길게 만들고, 오류, 프로그래머의 실수를 유발하게 만든다.
xml데이터와 json데이터는 서로 애플리케이션 간 데이터 교환에 사용되는 데이터 형식이라고 생각하면 된다.
하지만 두 데이터의 형식에 있어 차이점이 있다.
xml데이터는 트리형식이면서 <>를 사용해 데이터를 구분하고, json은 키-값 페어 형식으로 데이터를 구분한다.
xml데이터는 따로 구문 분석기가 있어야 데이터를 활용하는데 필요하다. (이로 인해 시스템이 무거워진다.)
json데이터는 내부 자바스크립트 함수로도 구문 분석이 가능하여 편리하다.
xml데이터는 단순히 쓰기 불편한 데이터 형식으로만 보이지만
"레거시 시스템 통합" ,"구조화된 데이터 저장" 등 필요할 때 있다고 한다.
그렇기에 아무래도 아직까지 이 형식이 남아 있는거라 생각한다.
즉! json데이터로 api가 전달해준다면 개발하는데 있어 훨씬 편한 것이고, xml데이터라면 개발하는데 구문을 처리하는 과정이 하나 늘어난다고 생각하면 된다.