JavaRush /Java Blog /Random-KO /Java의 직렬화 형식

Java의 직렬화 형식

Random-KO 그룹에 게시되었습니다
안녕하세요! Java의 직렬화에 대해 이야기해 보겠습니다. 우리가 이미 연재에 관한 강의를 한 것을 기억하실 것입니다. 맞습니다 :) 여기에 첫 번째가 있습니다 . 그리고 여기에 두 번째가 있습니다. 직렬화가 어떻게 작동하는지, 왜 필요한지, Java에 어떤 도구가 있는지 잘 기억하지 못한다면 이 강의를 훑어볼 수 있습니다. 오늘 강의는 이론적으로 진행되며, 직렬화 형식에 대해 자세히 살펴보겠습니다. Java의 직렬화 형식 - 1먼저 직렬화가 무엇인지 기억해 봅시다. 직렬화는 객체의 상태를 일련의 바이트로 저장하는 프로세스입니다. 역직렬화는 이러한 바이트에서 개체를 재구성하는 프로세스입니다. Java 객체는 직렬화되어 네트워크를 통해(예: 다른 컴퓨터로) 전송될 수 있습니다. 따라서 동일한 바이트 시퀀스를 다른 형식으로 표현할 수 있습니다. 당신은 일상적인 컴퓨터 사용을 통해 이 사실을 잘 알고 있습니다. 예를 들어, 읽고 있는 전자책(또는 간단한 텍스트 문서)은 다양한 형식으로 작성될 수 있습니다.
  • docx(Microsoft Word 형식);
  • pdf(Adobe 형식);
  • mobi(Amazon Kindle 장치에서 일반적으로 사용됨)
  • 그리고 훨씬 더 많은 것(ePub, djvu, fb2...).
사람이 읽을 수 있는 형식으로 텍스트를 표시하는 작업은 동일한 것 같습니다. 그러나 사람들은 다양한 형식을 발명했습니다. 그들의 작업에 대해 자세히 설명하지 않더라도 우리는 이것이 이유가 있어서 이루어졌다고 추측할 수 있습니다. 그들 각각은 아마도 다른 것들에 비해 고유한 장점과 단점을 가지고 있을 것입니다. 어쩌면 직렬화 형식도 같은 원리에 따라 만들어졌을까요? 글쎄, 좋은 추측이군, 학생! :) 그대로입니다. 사실, 먼 거리로 데이터를 전송하는 것은 다소 섬세한 일이며 여기에는 많은 요소가 있습니다. 누가 데이터를 전송합니까? 어디? 어떤 볼륨? 수신자는 사람입니까 아니면 기계입니까(즉, 데이터가 사람이 읽을 수 있어야 함)? 어떤 종류의 장치가 데이터를 읽나요? 분명히 상황은 다릅니다. 한 스마트폰에서 다른 스마트폰으로 500KB의 이미지를 전송해야 할 때는 문제가 됩니다. 최대한 효율적으로 압축하고 동시에 최대한 빠르게 전송해야 하는 약 500테라바이트의 비즈니스 데이터에 대해서는 완전히 다릅니다. 주요 직렬화 형식을 살펴보고 각각의 장점과 단점을 살펴보겠습니다!

JSON

자바스크립트 객체 표기법. 당신은 이미 그 사람과 조금 친숙합니다! 이번 강의 에서 이에 대해 이야기했고 , 여기서는 JSON의 직렬화에 대해 살펴보았습니다 . 그것은 이유 때문에 그 이름을 얻었습니다. JSON으로 변환된 Java 객체는 실제로 JavaScript 객체와 똑같아 보입니다. 객체의 의미를 이해하기 위해 JavaScript를 알 필요는 없습니다.
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
하나의 객체를 전달할 필요는 없습니다. JSON에는 객체 배열도 포함될 수 있습니다.
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON은 JavaScript 개체이므로 다음 JavaScript 데이터 형식을 지원합니다.
  • 문자열;
  • 숫자(숫자);
  • 객체(객체);
  • 배열(배열);
  • 부울 값(참 및 거짓);
  • 없는.
JSON에는 어떤 장점이 있나요?
  1. 사람이 읽을 수 있는 형식입니다. 최종 사용자가 인간이라면 이는 분명한 이점입니다. 예를 들어, 서버는 비행 일정이 포함된 데이터베이스를 저장합니다. 인간 클라이언트는 집에 있는 컴퓨터 앞에 앉아 웹 애플리케이션을 사용하여 이 데이터베이스의 데이터를 요청합니다. 그가 이해할 수 있는 형식으로 데이터를 제공해야 하므로 JSON은 훌륭한 솔루션입니다.

  2. 간단. 초보적이라고 말할 수 있습니다 :) 위에서 우리는 두 개의 JSON 파일의 예를 제시했습니다. 그리고 JavaScript의 존재(객체는 말할 것도 없고)에 대해 들어본 적이 없더라도 거기에 어떤 종류의 객체가 설명되어 있는지 쉽게 이해할 수 있습니다.
    전체 JSON 문서는 몇 장의 그림이 포함된 하나 의 웹 페이지 입니다.

  3. 펼친. JavaScript는 지배적인 프런트엔드 언어이며 용어를 규정합니다. JSON을 사용하는 것은 필수입니다. 따라서 수많은 웹 서비스가 JSON을 데이터 교환 형식으로 사용합니다. 모든 최신 IDE는 JSON 형식(Intellij IDEA 포함)을 지원합니다. 가능한 모든 프로그래밍 언어에 대해 JSON을 사용하기 위해 많은 라이브러리가 작성되었습니다.

예를 들어, Java 개체를 JSON으로 직렬화하는 방법을 배운 강의에서 이미 Jackson 라이브러리를 사용하여 작업했습니다. 그러나 예를 들어 Jackson 외에도 Google의 매우 편리한 라이브러리인 GSON이 있습니다 .

YAML

존재 초기에는 "또 다른 마크업 언어"라는 또 다른 마크업 언어(Yet Another Markup Language)를 의미했습니다. 당시에는 XML의 경쟁자로 자리 잡았습니다. 이제 시간이 지나서 "YAML은 마크업 언어가 아닙니다"("YAML은 마크업 언어가 아닙니다")를 의미합니다. 그는 같은 것입니다? 컴퓨터 게임을 위해 전사, 마법사, 도둑이라는 3개의 캐릭터 클래스를 만들어야 한다고 가정해 보겠습니다. 힘, 민첩성, 지구력, 무기 세트 등의 특성을 갖습니다. 클래스 설명이 포함된 YAML 파일은 다음과 같습니다.
classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear

 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
YAML 파일에는 트리 구조가 있습니다. 일부 요소는 다른 요소 내에 중첩됩니다. 각 레벨을 표시하기 위해 특정 수의 공백을 사용하여 중첩을 제어할 수 있습니다. YAML 형식에는 어떤 장점이 있나요?
  1. 사람이 읽을 수 있습니다. 또, 설명이 없는 yaml 파일을 보더라도 거기에 어떤 객체가 설명되어 있는지 쉽게 이해할 수 있습니다. YAML은 yaml.org 의 메인 페이지가 일반 yaml 파일이라는 점을 사람이 얼마나 잘 읽을 수 있는지를 나타냅니다. :)

  2. 컴팩트함. 파일 구조는 공백으로 구성됩니다. 대괄호나 따옴표를 사용할 필요가 없습니다.

  3. 프로그래밍 언어 고유의 데이터 구조를 지원합니다. JSON 및 기타 여러 형식에 비해 YAML의 큰 장점은 다양한 데이터 구조를 지원한다는 것입니다. 그 중에는:

    • !!map
      중복 가능성이 없는 키:값 쌍의 순서가 지정되지 않은 컬렉션입니다.

    • !!omap
      중복될 가능성이 없는 키:값 쌍의 순서가 지정된 시퀀스입니다.

    • !!pairs:
      중복 가능성이 있는 키:값 쌍의 순서가 지정된 시퀀스입니다.

    • !!set
      서로 같지 않은 순서 없는 값 시퀀스입니다.

    • !!seq
      임의 값의 시퀀스;

    이러한 구조 중 일부는 Java에서 익숙할 것입니다! :) 이 기능 덕분에 프로그래밍 언어의 다양한 데이터 구조를 YAML 형식으로 직렬화할 수 있습니다.

  4. 앵커 및 별칭을 사용하는 기능

    "앵커" 및 "별칭"이라는 단어의 번역 - "앵커" 및 "가명". 원칙적으로 이는 YAML에서 이러한 용어의 본질을 매우 정확하게 설명합니다.

    이를 통해 yaml 파일의 요소를 식별하고 해당 요소가 반복적으로 발생하는 경우 파일의 나머지 부분에서 참조할 수 있습니다. 앵커는 기호를 사용하여 생성되고 &별칭은 을 사용하여 생성됩니다 *.

    Leo Tolstoy의 책에 대한 설명이 포함된 파일이 있다고 가정해 보겠습니다. 매번 작성자 이름을 수동으로 작성하는 것을 피하기 위해 앵커 "leo"를 만들고 필요할 때 별칭을 사용하여 참조하기만 하면 됩니다.

    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859

    일부 파서를 사용하여 이 파일을 읽으면 "Leo Tolstoy" 값이 별칭 대신 올바른 위치로 대체됩니다.

  5. YAML에 다른 형식의 데이터를 포함할 수 있습니다. 예를 들어 JSON은 다음과 같습니다.

    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]

기타 직렬화 형식

XML

이 형식은 소위 태그 트리를 기반으로 합니다.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
각 요소는 여는 태그와 닫는 태그(<> 및 </>)로 구성됩니다. 각 요소에는 중첩된 요소가 있을 수 있습니다. XML은 JSON 및 YAML보다 열등하지 않은 일반적인 형식입니다(실제 프로젝트에서의 사용에 대해 이야기하는 경우). XML에 대한 별도의 강의가 있습니다 .

BSON(바이너리 JSON)

이름에서 알 수 있듯이 JSON과 매우 유사하지만 사람이 읽을 수 없으며 이진 형식의 데이터에 대해 작동합니다. 이는 이미지 및 기타 첨부 파일을 저장하고 전송하는 데 매우 편리합니다. 또한 BSON은 JSON에서 사용할 수 없는 일부 데이터 유형을 지원합니다. 예를 들어 날짜(밀리초 형식) 또는 JavaScript 코드 조각을 BSON 파일에 작성할 수 있습니다. 널리 사용되는 NoSQL 데이터베이스 MongoDB는 정보를 BSON 형식으로 저장합니다.

위치 기반 프로토콜

어떤 상황에서는 전송되는 데이터의 양을 대폭 줄여야 합니다(예: 데이터가 많아 로드를 줄여야 하는 경우). 이런 상황에서는 위치 기반 프로토콜을 사용할 수 있습니다 . 즉, 매개변수 자체의 이름 없이 매개변수 값을 전달하는 것입니다.
"Leo Tolstoy" | "Anna Karenina" | 1873
이 형식의 데이터는 완전한 JSON 파일보다 훨씬 적은 공간을 차지합니다. 물론, 다른 직렬화 형식도 있지만 지금 당장 다 알 필요는 없습니다 :) 현재 애플리케이션 개발의 업계 표준이 된 형식을 숙지하고 각 형식의 장점과 차이점을 기억해 두는 것이 좋습니다. . 그리고 우리 강의가 끝났습니다 :) 오늘 몇 가지 문제를 푸는 것을 잊지 마세요! 또 보자! :)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION