[java] Java에서 Protocol Buffers를 사용하여 데이터 역직렬화하기

개요

Protocol Buffers는 데이터 구조를 효율적으로 직렬화하고 역직렬화하기 위한 Google의 개방형 직렬화 프레임워크입니다. 이 기술을 사용하면 형식화된 데이터를 전송하고 저장하기 위해 효율적이고 표준화된 방법을 제공합니다.

이 글에서는 Java에서 Protocol Buffers를 사용하여 데이터를 역직렬화하는 방법에 대해 알아보겠습니다.

Protocol Buffers 정의 파일 생성

먼저, Protocol Buffers 정의 파일(.proto)을 작성해야 합니다. 이 파일은 데이터 구조를 정의하고 직렬화/역직렬화를 위한 코드를 자동으로 생성하는데 사용됩니다.

예를 들어, 아래와 같은 간단한 정의 파일을 생성해봅시다.

syntax = "proto3";

message Person {
    string name = 1;
    int32 age = 2;
    repeated string hobbies = 3;
}

위의 정의 파일은 Person이라는 메시지 타입을 정의합니다. 이 메시지 타입은 이름(name), 나이(age), 취미(hobbies) 필드를 가지고 있습니다.

Protocol Buffers 컴파일

Protocol Buffers 정의 파일을 작성한 후에는 이를 컴파일하여 Java 클래스 파일을 생성해야 합니다. 이 클래스 파일을 사용하여 데이터를 역직렬화할 수 있습니다.

Protocol Buffers 컴파일러를 사용하여 컴파일할 수 있습니다. 다음 명령어를 사용하여 컴파일을 수행할 수 있습니다.

$ protoc --java_out=. your_proto_file.proto

위의 명령어에서 your_proto_file.proto는 작성한 Protocol Buffers 정의 파일의 경로입니다. 컴파일이 성공하면 your_proto_file.proto와 동일한 이름의 Java 클래스 파일이 생성됩니다.

역직렬화

Protocol Buffers를 사용하여 데이터를 역직렬화하는 것은 매우 간단합니다. 다음은 역직렬화를 실행하는 예시 코드입니다.

import com.example.Person;

...

byte[] serializedData = // 역직렬화할 데이터
Person person = Person.parseFrom(serializedData);

System.out.println("이름: " + person.getName());
System.out.println("나이: " + person.getAge());
System.out.println("취미: " + person.getHobbiesList());

위의 코드에서 Person은 앞서 컴파일된 Protocol Buffers 클래스입니다. parseFrom() 메소드를 사용하여 역직렬화를 수행할 수 있습니다. 역직렬화된 데이터는 Person 클래스의 인스턴스로 반환됩니다.

결론

Java에서 Protocol Buffers를 사용하여 데이터를 역직렬화하는 것은 간단하고 효율적입니다. Protocol Buffers를 사용하면 다양한 플랫폼 간에 데이터를 효율적으로 교환할 수 있으며, 표준화된 데이터 구조 정의를 통해 개발의 생산성을 높일 수 있습니다.

참고 자료