개발저장소
[CS] JSON과 XML 본문
학습 Point
- JSON
- XML
- 직렬화와 역직렬화
애플리케이션이 데이터를 교환할 때, 다양한 표현 방식을 가진다. JSON과 XML도 대표적인 데이터 교환 형식 중 하나이다.
JSON은 Javascript Object Notation의 약자로, Javascript 객체 문법으로 구조화된 데이터 교환 방식이다. 데이터를 쉽게 교환하고 저장하기 위한 텍스트 기반의 데이터 교환 표준이다.
Javascript 객체 문법은 키(Key)와 값(Value) 형식으로 구성되고 데이터가 쉼표로 나열되는 구조를 가졌다. Javascript라는 이름을 가지고 있지만, Java나 Python 등 다양한 언어에서도 쓰인다.
JSON는 Javascript 객체와 비슷하지만 undefined나 method를 포함할 수 없다. JSON의 타입은 수(Number), 문자열(String), 불리언(Boolean), 배열(Array), 객체(Object), null이 있다. JSON은 느슨하게 데이터 타입을 가질 수 있다는 장점이 있지만, 되도록 일정한 데이터 타입을 가지는 게 좋다.
const a = {
"member": [
{
"name": {
"firstname": "so",
"lastname": "coding"
},
"age": 30
},
{
"name": {
"firstname": "gildong",
"lastname": "hong"
},
"age": 50
}
]
}
위와 같이 Key와 Value, 쉼표로 나열되는 구조와 더불어 배열의 형식도 가질 수 있다.Javascript에서 JSON의 값을 다루기 위해서는 다음과 같은 방법을 사용할 수 있다. 예를 들어 첫번째 사람의 이름을 알고 싶다면, 다음과 같이 접근하면 된다.
console.log(a.member[0].name.firstname);
console.log(a["member"][0].name["firstname"]);
다음과 같이 대괄호나 점으로 key를 사용해 value에 접근할 수 있다.
JSON은 프로그래밍 언어나 프레임워크 등에서 독립적이므로, 서로 다른 시스템 간에 데이터를 교환하기 좋다. 주로 API 반환 형태나, package.json 파일 같은 설정 파일에서 많이 볼 수 있다.
XML은 Extensible Markup Language의 약자로, 마크업 형태를 사용하는 데이터 교환 형식이다.
마크업이란, 태그 등을 이용해서 문서나 데이터의 구조를 나타내는 방법이다.
구성은 크게 버전이나 인코딩 방법 등의 정보를 담은 프롤로그, 최상위 태그인 루트 요소, 그리고 그 아래의 하위 요소로 이루어져 있다. HTML과 비슷하게 생각할 수 있는데, HTML 또한 마크업 언어이므로 공통점이 많다. 하지만 HTML은 데이터를 표시하는 역할이고 XML은 데이터를 저장하고 전송하는 역할이다. 또, HTML은 미리 정해진 태그가 존재하지만 XML은 태그를 만들고 정의해야 한다. XML은 대소문자도 구분하기 때문에 사용에 주의해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<members>
<member number=1>
<name>
<firstname>so</firstname>
<lastname>coding</lastname>
</name>
<age>30</age>
</member>
<member number=2>
<name>
<firstname>gildong</firstname>
<lastname>hong</lastname>
</name>
<age>50</age>
</member>
</members>
위는 앞서 소개했던 JSON 형식의 데이터를 XML로 비슷하게 나타낸 것이다.
XML은 JSON과 비교하였을 때, 닫힌 태그가 필요하므로 비교적 무겁다. 또한 Javascript 객체로 변환하는게 JSON보다 어렵다는 단점이 있다.
직렬화 / 역직렬화
직렬화(Serialization)과 역직렬화(Deserialization)는 데이터나 객체의 상태를 다른 포맷으로 변환하는 것을 말한다. 이러한 과정은 데이터를 저장하거나 전송하기 전에 호환을 위해 일어난다.
직렬화는 외부 시스템에서도 사용할 수 있도록 바이트나 문자열 형태로 데이터를 변환하는 기술을 말한다. 이렇게 변환된 형태는 파일 시스템에 저장하거나 네트워크를 통해 다른 시스템으로 전송하기 쉽다.
역직렬화는 반대로 바이트나 문자열 형태로 변환된 데이터를 원래의 데이터 구조나 객채로 복원하는 과정이다.
Javascript에서는 JSON.stringify()를 사용해 직렬화, JSON.parse()를 사용해 역직렬화 할 수 있다.