[java] Protocol Buffers를 사용하여 Java에서 메시지 필드의 일대다 관계 처리하기

Protocol Buffers는 구조화된 데이터를 직렬화하고, 원하는 형식으로 쉽게 전송하고 저장할 수 있는 방법을 제공하는 개발 도구입니다. Java에서 Protocol Buffers를 사용하여 메시지 필드의 일대다 관계를 처리하는 방법을 알아보겠습니다.

1. 일대다 관계 정의하기

먼저, 일대다 관계를 가지는 메시지 필드를 정의해야 합니다. 예를 들어, 한 개의 사용자(User)에 대해 여러 개의 주소(Address)를 가질 수 있는 경우를 다음과 같이 정의할 수 있습니다.

syntax = "proto3";

message User {
    int32 id = 1;
    string name = 2;
    repeated Address addresses = 3;
}

message Address {
    string street = 1;
    string city = 2;
    string postal_code = 3;
}

위의 예시에서는 User 메시지에 addresses 필드가 일대다 관계를 가질 수 있도록 repeated 키워드를 사용하여 정의하였습니다.

2. Java 클래스 생성하기

다음으로, Protocol Buffers 컴파일러를 사용하여 Java 클래스를 생성해야 합니다. 다음 명령어를 터미널에서 실행하여 컴파일러를 실행합니다.

protoc -I=<PROTO_FILES_DIR> --java_out=<OUTPUT_DIR> <PROTO_FILES>

위 명령어에서 <PROTO_FILES_DIR>은 프로토 파일이 위치한 디렉토리 경로, <OUTPUT_DIR>은 Java 클래스가 생성될 디렉토리 경로, <PROTO_FILES>는 컴파일할 프로토 파일의 이름입니다.

컴파일이 완료되면 User 및 Address에 대한 Java 클래스가 생성됩니다.

3. 일대다 관계 처리하기

Java 코드에서 Protocol Buffers를 사용하여 일대다 관계를 처리하는 방법은 간단합니다. 먼저, User 객체를 생성하고, 여러 개의 Address 객체를 생성하여 User 객체에 추가합니다.

User.Builder userBuilder = User.newBuilder();
userBuilder.setId(1);
userBuilder.setName("John");

Address.Builder addressBuilder1 = Address.newBuilder();
addressBuilder1.setStreet("123 Main St");
addressBuilder1.setCity("New York");
addressBuilder1.setPostalCode("10001");

Address.Builder addressBuilder2 = Address.newBuilder();
addressBuilder2.setStreet("456 Elm St");
addressBuilder2.setCity("Los Angeles");
addressBuilder2.setPostalCode("90001");

userBuilder.addAddresses(addressBuilder1.build());
userBuilder.addAddresses(addressBuilder2.build());

User user = userBuilder.build();

위 예시에서는 User 및 Address 객체를 생성하고, Address 객체를 User의 addresses 필드에 추가하는 과정을 보여줍니다. addressBuilder.build()를 사용하여 Address 객체를 생성한 후, userBuilder.addAddresses()를 사용하여 User의 addresses 필드에 추가합니다.

4. 일대다 관계 사용하기

User 객체를 사용하여 일대다 관계를 이해하는 방법은 간단합니다. User 객체에서 addresses 필드를 반복하여 주소 정보를 가져올 수 있습니다.

for (Address address : user.getAddressesList()) {
    System.out.println("Street: " + address.getStreet());
    System.out.println("City: " + address.getCity());
    System.out.println("Postal Code: " + address.getPostalCode());
    System.out.println();
}

위 예시에서는 User 객체의 addresses 필드를 반복하여 각 주소의 정보를 출력하는 과정을 보여줍니다. user.getAddressesList()를 사용하여 User 객체의 addresses 필드를 가져온 후, 반복문을 통해 주소 정보를 출력합니다.

이렇게 Protocol Buffers를 사용하여 Java에서 메시지 필드의 일대다 관계를 처리할 수 있습니다. 일대다 관계를 정의하고, Java 클래스를 생성한 후, 필요한 데이터를 추가하여 사용할 수 있습니다.

참고 자료