[java] Protocol Buffers를 사용하여 Java에서 메시지 필드의 데이터 언어 변환하기

Protocol Buffers는 구조화된 데이터를 직렬화하고, 효율적으로 저장하고, 빠르게 전송할 수 있는 언어 중립적인 메시지 포맷입니다. 이 포맷은 Google에서 만들어졌고, 다양한 언어에서 지원됩니다.

Java에서 Protocol Buffers를 사용하려면, 먼저 Protocol Buffer 데이터 형식을 정의하는 .proto 파일을 작성해야 합니다. 이 .proto 파일은 메시지 형식과 필드를 정의하는데 사용됩니다.

syntax = "proto3";

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

위의 예제는 Person 메시지 형식을 정의하고 있습니다. name 필드는 문자열 형식으로, age 필드는 32비트 정수 형식으로, hobbies 필드는 문자열의 배열 형식으로 정의되어 있습니다.

다음으로는 Protocol Buffers 컴파일러를 사용하여 Java 소스 코드를 생성해야 합니다. 컴파일러는 다음 명령을 사용하여 .proto 파일을 컴파일합니다.

protoc --java_out=. person.proto

위 명령은 person.proto 파일을 컴파일하고, --java_out 플래그를 사용하여 Java 소스 코드를 현재 디렉토리에 생성합니다.

이제 Java 프로젝트에 Protocol Buffers 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.18.0</version>
</dependency>

이제 Protocol Buffers를 사용하여 데이터를 직렬화하고, 역직렬화할 준비가 되었습니다. 다음은 Person 메시지를 생성하고 필드에 데이터를 설정하는 예제입니다:

import com.example.Person;

public class Main {
    public static void main(String[] args) {
        Person.Builder personBuilder = Person.newBuilder();
        personBuilder.setName("John");
        personBuilder.setAge(30);
        personBuilder.addHobbies("Reading");
        personBuilder.addHobbies("Gaming");

        Person person = personBuilder.build();

        // 직렬화된 데이터 출력
        byte[] serializedData = person.toByteArray();
        System.out.println(Arrays.toString(serializedData));

        // 역직렬화
        Person deserializedPerson = Person.parseFrom(serializedData);
        System.out.println(deserializedPerson.getName());
        System.out.println(deserializedPerson.getAge());
        System.out.println(deserializedPerson.getHobbiesList());
    }
}

위 코드에서는 Person.Builder를 사용하여 Person 객체를 생성하고 필드에 값을 설정한 다음, build() 메서드를 통해 불변의 Person 객체를 생성합니다. 이렇게 생성된 객체는 Protocol Buffers의 toByteArray() 메서드를 사용하여 직렬화된 바이트 배열로 변환됩니다. 역직렬화는 Person.parseFrom() 메서드를 사용하여 직렬화된 바이트 배열을 Person 객체로 변환합니다.

이제 Java에서 Protocol Buffers를 사용하여 메시지 필드의 데이터를 언어별로 변환하는 방법을 알게 되었습니다.


참고: