JSON이란? XML이란? 데이터포멧이란?

박철민·2023년 3월 20일
0

CS 지식

목록 보기
1/8

CS 지식의 정석 강의를 수강 후 복습용


Json이란?

웹을 많이 만지다보면 데이터들을 JSON 방식으로 받아오거나 보내기도 합니다. 이렇게 자주 이용하는 Json에 대해서 좀 더 자세히 알아보자!

Json에 대해서 알기 위해서는 일단 데이터 포멧을 알아야 합니다!

1. 데이터 포멧이란?

사람과 사람이 이야기를 하는데 일종의 형식이라는 것이 존재합니다. 문법에 맞는지 언어가 맞는지(영어, 한글) 여러 다양한 형식이 존재합니다.
컴퓨터들도 마찬가지 입니다. 데이터들을 서로 주고 받을 때 서로 간의 의사소통을 위하여 일종의 형식이라는 것이 존재합니다. 그것을 데이터 포멧이라고 합니다.

Json은 이러한 데이터 포멧 중에 하나입니다.


2. JSON이란?

JSON속성-값 쌍, 배열 자료형 또는 기타 모든 시리얼화 가능한 값 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용한 개방형 표준 포멧이다. - https://ko.wikipedia.org/wiki/JSON

위키 백과의 설명은 위와 같다.
적혀있듯이 JSON은 텍스트를 기반으로 하여 키-값 형태로 표현한 데이터 포멧이다.
또한 배열, 키-값 모든 방식으로 표현이 가능하다.

쉽게 이해하기 위해서 실제 JSON 코드를 보여주겠다.

{
  "name" : "Fe26min",
  "age" : 29
}

다음과 같이 간단하게 데이터를 표현해준다. name이란 키에 "Fe26min"이라는 값이 들어오게 된다.
사람은 이를 쉽게 읽을 수 있으며 컴퓨터 또한 "name"이라는 "키"와 "Fe26min"이 연결되었음을 쉽게 알 수 있다.

또한 '[', ']'을 이용하여 배열들을 표현할 수 있다.

{
 	"students" :  [
      {  
        "name" : "Fe26min",
  		"age" : 29
      },
      {
      	"name" : "홍길동",
        "age" : "서른"
      }
    ]
}

다음과 같이 표현이 가능하다. 여기서 JSON의 독특한 점이 있는데 바로 "age"태그에 표현되고 있는 데이터의 형식이다.

29, "서른" 이라고 다른 형식의 데이터가 들어간 것을 알 수 있을 것이다.
그러나 JSON에서는 이러한 형식이 전혀 문제 되지 않는다.

그렇기에 데이터에 잘못된 값이 들어가지는 않았는지를 확인을 해봐야 한다.

3. JavaScript Object Notation

JSON은 "자바 스크립트 객체 표현식"이라는 뜻을 가지고 있습니다.
말 그대로 JSON은 자바 스크립트의 표현식을 따라합니다. 그렇기 때문에 JavaScirpt의 표현들을 사용합니다.
문자열, 숫자, 배열, 불리언, 그리고 객체를 표현할 수 있습니다.

!주의! Undefined는 사용이 불가합니다.

JavaScript를 기반으로 하였기 때문에 컴퓨터는 JSON을 읽고 이해하는데에 있어 좋은 성능을 가지고 있습니다.

그래서 많은 데이터들이 JSON의 형태로 표현되어지고 있습니다.

JSON에 대해서 더 자세히 정리한 내용은 아래 글을 참조하면 된다.
https://velog.io/@surim014/JSON%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

XML

XML은 JSON 이전에 자주 사용하던 데이터 포멧입니다!
Extensible Markup Language(XML)의 약자로 마크업 언어입니다

1. XML이란?

XML은 데이터를 전송하는데 사용하기 위한 데이터 포멧으로 마크업 언어라고 하면 생각나는 HTML처럼 태그 <>를 이용하여 표현합니다.

<태그>
   <태그1>
   </태그1>
</태그>

다음과 같이 묶어서 표현할 수 있습니다.

위에 JSON으로 표현한 것을 XML로 표현하면 다음과 같이 볼 수 있습니다.

<student>
  <name>"Fe26min"</name>
  <age>29</age>
</student>

배열과 같은 경우는 다음과 같이 표현합니다.

<studentList>
  <student>
    <name>Fe26min</name>
    <age>29</age>

  </student>
    <student>
    <name>홍길동</name>
    <age>30</age>
  </student>
</studentList>

이런 식으로 중괄호가 아닌 태그로 이루어진 데이터 포멧입니다.

이러한 표현 방식을 트리 방식이라고 합니다.

JSON : 키 밸류
XML : 트리

2. 왜 XML에서 JSON으로 옮겼는가?

xml은 1998년 개발되어 사업 전반으로 매우 광범후위하게 사용되었습니다. XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 다른 많은 종류의 데이터를 기술 할 수 없는 한계를 극복할 목적으로 만들어졌습니다.

이후 JSON이 2000년대 초에 브라우저 플러그인을 사용하지 않는 무상태, 실시간 서버 대 브라우저 통신 프로토콜의 요구에 의거하여 성장하였습니다.

AJAX의 기술의 발전으로 웹 페이지는 그대로 두고 데이터를 주고받을 수 있는 기술의 기반이 만들어졌고 2001년 더글라스 크록포드가 브라우저가 읽기 쉽도록 JS오브젝트 형태로 데이터를 전송하는 JSON을 만들었습니다.

JSON은 JavaScirptObject의 형태를 배경으로 만들었기 때문에 parse를 이용해서 JavaScriptObject로 쉽게 변경이 가능합니다.

또한 XML은 닫힌 태그를 사용하여 더 많은 텍스트수가 필요로 했습니다. 이러한 이유로 사람들은 쉽게 사용되고 브라우저가 빠르게 읽는 JSON을 사용하게 되었습니다.

그래서 과거에는 표준이었던 XML을 JSON이 많이 대체하게 되었습니다.

그렇다면 이제 XML은 죽어버렸고 JSON만 살아나았는가?

그렇지 않습니다. XML은 많은 사업에서 사용되어지고 있습니다.

3. 왜 XML을 사용하는가?

위에서 설명했듯이 JSON은 XML보다 데이테양이 적고 더 높은 처리 성능을 가지고 있습니다.
그렇다면 XML을 사용하는 사람들은 왜 사용할까요?

이에 대해서는 XML의 데이터의 '형식적 무결성'을 이유로 들 수 있습니다.

입출력 데이터의 무결성 확보를 위해 먼저 해야할 일은 커스텀 데이터규약을 정의하는 문서를 작성하고 웹 API 개발자 및 이용자들과 공유하는 것입니다. 단, 이 규약 문서는 실제 프로그래밍 단계에서 강제성이 있어야만 합니다. 강제성이 없는 문서는 그냥 메뉴얼 또는 가이드 수준일 뿐입니다.

입력 데이터, 출력 데이터 또는 입출력 데이터 모두에 대하여 위 규약 문서를 통하여 일차적으로 자동 검증합니다. 이 과정은 규약 문서에 강제성을 제공하여 규약 문서가 실질적 영향력이 있게 만듭니다. 즉, 규약 문서는, 안따라도 상관없는 단순한 가이드 문서가 아니라 규약을 어기면 웹 API가 100% 에러를 유발하고 규약의 어느 부분을 어겼는지도 알려주는, 강력한 무결성 판단 도구가 됩니다.

이렇게 입력, 출력, 또는 입출력 데이터에 대한 무결성이 확보되면 웹 API개발자는 모든 문제를 웹 API의 실제 구현부로 가정할 수 있습니다. 즉, 웹 API가 오작동하였다면 그 원인 중에도 적어도 '규약을 지키지 않은 입력 데이터가 웹 API 호출 시 인자로 입력'된 경우는 없게 됩니다. 또한 반대로 '출력 데이터의 무결성'까지 확보되면, 웹 API가 잘못된 형식의 데이터를 클라이언트에게 보내어 클라이언트가 파싱에 실패하는 경우도 사라집니다.

위와 같은 '무결성'부분에 있어 XML은 JSON과 비교할 수 없는 강점을 갖습니다. 특히 XML의 규약 문서로 사용되는 형식인 XSD는 오래된 역사에 걸맞게 잘 다듬어졌으며 정교하고 강력합니다. 웹 API 개발자 및 사용자는 웹 API의 XSD를 파일을 공유하고 확인하는 것 만으로 해당 웹 API의 호출 규약을 이해하고 문제없이 사용할 수 있습니다. 또한 웹 API 개발자는 동일한 XSD 파일을 통하여 임의의 XML 문서가 규약에 부합하는지 빠르고 편하게 자동 검증할 수 있습니다.

XML 스키마를 사용하여 XML 컬럼 데이터 삽입 유효성 확인
https://www.ibm.com/docs/ko/radfws/9.6?topic=SSRTLW_9.6.0/com.ibm.datatools.xml.schema.tutorial.doc/topics/xml_lesson7.htm

참고한 자료들
https://velog.io/@surim014/JSON%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://www.youtube.com/watch?v=QfN7EKsCR0g

https://www.coovil.net/xml-vs-json/

profile
멘땅에 헤딩하는 사람

0개의 댓글