데이터의 교환형식

Eugenie Seo·2023년 6월 20일
2

FE STUDY - CS

목록 보기
10/20
post-thumbnail

🔥 JSON 이란?

JavaScript Object Notation의 약어로 데이터를 표현하는 데 사용되는 형식이다.

✅ JSON 의 특징

  • 처음에 자바스크립트 클라이언트와 백엔드 서버 간의 통신을 위한 형식으로 개발되었기 때문에 파싱 또는 직렬화 없이도 JavaScript 프로그램에서 사용할 수 있다.
  • 다른 프로그래밍 언어와 함께 JSON을 사용할 수 있어 다른 언어를 사용하는 시스템과의 데이터 교환에 유용하다.
  • 텍스트 기반 형식이므로 사람과 기계가 모두 읽을 수 있다.
  • 처리 속도가 빠른 경량 언어이다.

또한, 빠른 데이터 교환 및 웹 서비스 결과 도출을 지원하며 추가적인 코드 작업 없이도 손쉽게 파싱이 가능하기 때문에 가장 보편적인 데이터 교환 형식으로 사용되고 있다.

✅ JSON 데이터의 예시

  • 데이터는 속성-값 쌍으로 표현되며, 값을 ','로 나열한다.
{

"Articles" :   [ 
{
 "id" : 10,
 "name" : "데이터의 교환형식", 
 "theme" : "Basic CS", 
}

{
 "id" : 9,
 "name" : "JVM이란", 
 "theme" : "JAVA", 
}

] 
}

✅ JSON의 기본 자료형

  • number
  • string : 항상 큰 따옴표(")로 묶어야 한다.
  • array : 대괄호[]로 나타내며 각 요소들은 쉼표(,)로 구별된다. 순서에 의미가 있다.
  • object : 중괄호{}로 나타내며 각 쌍들은 쉼표(,)로 구별된다. 순서는 의미가 없다.
  • boolean
  • null

✅ JSON의 단점

  • 경량의 데이터 교환 형식이기 때문에 XML보다 빠르지만, 대용량급의 데이터 송수신에는 부적합할 수 있다.
  • 주석이 불가하며, XML에 비해 문법 오류에 취약하다.
  • 높은 유연성을 가져 즉석에서 필드를 추가, 제거, 업데이트할 수 있지만 안전성이 떨어진다.

✅ JSON 스키마

  • 전송받은 JSON 데이터가 적법한 형식의 데이터인지를 확인하기 위해 적법한 JSON 데이터의 형식을 기술한 문서

  • 다음과 같은 검증과정을 거친다.

    1. 데이터의 타입이 정확한가?
    2. 필수로 받아와야 하는 데이터가 포함되어 있는가?
    3. 데이터가 원하는 범위 안에 있는가?
  • 검증 키워드(validation keywords)를 사용하여 데이터에 조건을 걸 수 있다.
    검증 키워드는

    type : 유효한 데이터의 타입을 명시
    properties : 유효한 데이터 이름과 값의 쌍들을 명시
    required : 명시한 배열의 모든 요소를 프로퍼티로 가지고 있어야만 유효
    minLength : 문자열의 최소 길이
    maxLength: 문자열의 최대 길이

    등이 있으며, 더 많은 검증키워드를 알기 위해서는 JSON Schema validation keywords 를 참고하면 된다.

  • 메타데이터 키워드를 사용하여 스키마의 기본 정보를 나타낼 수 있다. 필수는 아니지만 스키마에 대한 정보를 남겨 사용자들의 이해를 도울 수 있다.

    title : 스키마 이름
    description : 스키마에 대한 정보, 설명

    등이 있으며, 더 많은 키워드를 알기 위해서는 JSON Schema keywords를 참고하면 된다

  • 사용 예시 :

    {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "$id": "https://example.com/product.schema.json",
      "title": "Product",
      "description": "A product in the catalog",
      "type": "object"
    }

🔥 XML 이란?

Extensible Markup Language의 약자로 확장 가능한 마크업 언어를 나타내며, 데이터를 구조화하고 전송하는 데 사용된다.

  • 사용자가 자신만의 태그를 정의하여 데이터를 나타낼 수 있는 유연성을 제공한다.
  • 데이터의 구조와 의미를 명시적으로 표현하며, 특히 웹 서비스에서 데이터를 교환하기 위해 널리 사용
  • 사용 예시 :
    <note>
    <to>YeonJin</to>
    <from>Yujin</from>
    <heading>Reminder</heading>
    <body>Don't forget me!</body>
    </note>

✅ XML과 JSON의 공통점

  • 텍스트 기반 형식
    : 사람과 기계 모두가 이해하기 쉽고, 편집하기 간편하며, 다양한 플랫폼과 언어에서 처리하기 용이하다
  • 계층적 구조
    : 데이터 요소들이 부모-자식 관계로 구성될 수 있어 복잡한 데이터 구조를 표현할 수 있다.
  • 다양한 데이터 타입
    : 숫자, 문자열, 배열, 객체 등 다양한 데이터 유형을 표현할 수 있다.

✅ XML과 JSON의 공통점

  • 문법
    : XML은 시작 태그와 종료 태그로 이루어진 태그 기반의 문법을 사용한다.

    <person>Yujin</person>과 같은 형식

    JSON은 중괄호({})와 대괄호([])로 이루어진 키-값 쌍의 집합으로 데이터를 표현한다.

    "name": "Yujin"과 같은 형식
  • 가독성: XML은 태그를 사용하고 종료 태그가 필요하기 때문에 문서의 크기가 JSON보다 크다. 상대적으로 짧은 JSON이 더 간결하고 가독성이 높다.

  • 확장성: XML은 사용자 정의 태그를 정의하여 데이터를 나타낼 수 있는 확장성을 제공하지만, JSON은 구조를 명시적으로 표현하지 않기 때문에 XML에 비해 확장성이 상대적으로 낮다.

  • 지원 언어: XML은 많은 프로그래밍 언어에서 내장된 지원을 제공하며 XML 파서를 사용하여 XML 데이터를 처리할 수 있다. JSON은 JavaScript 객체 표기법을 기반으로 하며, 다양한 프로그래밍 언어에서 JSON 데이터를 쉽게 처리할 수 있다.

    XML과 JSON은 데이터를 표현하고 전송하는 데 사용되는 텍스트 기반 형식이지만 문법, 가독성, 확장성, 지원 언어 등에서 차이가 있다. 사용 사례와 개발 환경에 따라 선택해서 사용해야한다.

🔥 직렬화, 역직렬화란?

객체나 데이터 구조를 다른 형식으로 변환하는 과정
객체를 저장하거나 전송하기 위해 사용되며, 주로 프로그래밍에서 객체의 상태를 영속적으로 보존하거나 네트워크를 통해 객체를 전송하는 데 활용된다.

직렬화

: 객체나 데이터 구조를 일련의 바이트로 변환하는 과정

  • 객체를 파일에 저장하거나 네트워크를 통해 전송하기 위해 사용된다.
  • 직렬화를 통해 객체는 일련의 바이트 스트림으로 변환되어 저장 또는 전송되고, 이후에는 역직렬화를 통해 다시 객체로 복원될 수 있다.
  • 직렬화는 다양한 프로그래밍 언어와 데이터 형식에서 지원되며, 객체를 저장하거나 전송하는 프로세스를 단순화하는 데 도움을 줍니다.

역직렬화

: 직렬화된 바이트 스트림을 원래의 객체나 데이터 구조로 변환하는 과정

  • 직렬화된 데이터를 역직렬화하여 메모리에 객체를 복원하거나 처리하는 것이 주요 목적
  • 직렬화된 데이터를 읽고, 데이터의 구조와 타입을 해석하여 원래의 객체나 데이터 구조를 재구성하는 과정을 통해 저장된 데이터를 다시 사용하거나 네트워크로부터 전송된 데이터를 처리할 수 있다.

JSON의 직렬화와 역직렬화

JSON은 일반적으로 직렬화와 역직렬화에 사용되는 데이터 형식 중 하나

객체나 데이터 구조를 JSON 형식으로 직렬화하면, JSON 문자열로 표현된 상태로 저장하거나 전송할 수 있다. 이렇게 직렬화된 JSON은 웹 API와 같은 다양한 응용 프로그램에서 데이터 교환을 위해 사용된다.

  • Python 에서 직렬, 역직렬하기
    : pickle 모듈을 사용
    직렬화는 pickle.dump(obj, file) 메서드를 사용하여 객체를 파일에 저장하고,
    역직렬화는 pickle.load(file) 메서드를 사용하여 파일에서 객체를 읽는다.
  • Java 에서 직렬, 역직렬하기
    :Serializable 인터페이스를 구현하여 직렬화 가능한 객체를 만들고,
    ObjectOutputStream 클래스를 사용하여 객체를 직렬화하고, ObjectInputStream 클래스를 사용하여 역직렬화한다.

참조 :
https://www.itworld.co.kr/news/252478#csidxf29f3199397f965ae1b2fd0d6ee4847
https://www.oracle.com/kr/database/what-is-json/#json-defined
http://www.tcpschool.com/json/json_schema_schema

0개의 댓글