Java Academy · 강의

최신 대안: JSON과 Protocol Buffers

이식 가능하고 안전한 영속성을 위해 Java 직렬화를 Jackson JSON과 Protocol Buffers로 대체합니다.

레슨 4/413개 단계

최신 대안: JSON과 Protocol Buffers은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Java 직렬화를 대체하는 이유

Java 직렬화는 JVM에서만 사용할 수 있고 장황하며 느리고 보안 위험도 있습니다. 현대적인 애플리케이션은 사람이 읽을 수 있고 언어에 독립적인 제이슨이나, 작고 스키마 기반이며 빠른 프로토콜 버퍼를 선호합니다.

Jackson: 사실상의 제이슨 라이브러리

Jackson의 ObjectMapper는 객체를 제이슨 문자열로 변환하거나 그 반대로 변환합니다. 프로젝트에 com.fasterxml.jackson.core:jackson-databind를 추가하십시오.

ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 30);
String json = mapper.writeValueAsString(user);
System.out.println(json); // {"name":"Alice","age":30}
User restored = mapper.readValue(json, User.class);

주석으로 Jackson 사용자 지정

@JsonProperty, @JsonIgnore, @JsonAlias, @JsonFormat을 사용하면 모델의 필드 이름을 변경하지 않고도 직렬화를 제어할 수 있습니다.

public class Product {
    @JsonProperty("product_name")
    private String name;
    @JsonIgnore
    private String internalCode;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate releaseDate;
}

Jackson 모듈: Java 시간 지원

JavaTimeModule을 등록하면 LocalDate, LocalDateTime, Instant를 필드로 가득 찬 제이슨 객체로 처리하는 대신 올바르게 직렬화할 수 있습니다.

ObjectMapper mapper = new ObjectMapper()
    .registerModule(new JavaTimeModule())
    .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String json = mapper.writeValueAsString(LocalDate.now());
System.out.println(json); // "2024-06-15"

가벼운 대안으로서의 GSON

구글의 GSON은 Jackson보다 간단합니다. 기본 유형에는 구성이 필요하지 않지만, 대규모 환경에서는 Jackson만큼 풍부한 주석 기능과 성능을 제공하지 못합니다.

Gson gson = new Gson();
String json = gson.toJson(new User("Bob", 25));
User user = gson.fromJson(json, User.class);

프로토콜 버퍼란 무엇입니까

프로토콜 버퍼는 구글의 바이너리 직렬화 형식입니다. .proto 스키마를 정의하고 Java 클래스로 컴파일하면, 버전 관리가 내장된 작은 메시지를 얻을 수 있습니다.

// user.proto
syntax = "proto3";
message UserProto {
    string name = 1;
    int32  age  = 2;
}

프로토콜 버퍼 메시지 인코딩

생성된 클래스에는 빌더 인터페이스가 있습니다. toByteArray()를 호출하여 바이너리 페이로드를 얻고, parseFrom(bytes)를 호출하여 디코딩하십시오.

UserProto user = UserProto.newBuilder()
    .setName("Alice")
    .setAge(30)
    .build();
byte[] bytes = user.toByteArray();
UserProto restored = UserProto.parseFrom(bytes);
System.out.println(restored.getName());

제이슨과 프로토콜 버퍼의 장단점

제이슨은 사람이 읽을 수 있고 스키마가 필요하지 않습니다. 프로토콜 버퍼는 크기가 3~10배 작고 빠르지만 스키마와 코드 생성이 필요합니다. 레스트 인터페이스에는 제이슨을, 처리량이 높은 내부 서비스에는 프로토콜 버퍼를 선택하십시오.

프로토콜 버퍼를 사용한 스키마 발전

프로토콜 버퍼 필드는 이름이 아니라 번호로 식별됩니다. 필드 번호를 절대 재사용하지 않는 한 기존 클라이언트를 중단시키지 않고 새 필드를 안전하게 추가하거나 이전 필드를 더 이상 사용하지 않도록 지정할 수 있습니다.

// v2 of user.proto — backwards compatible
message UserProto {
    string name  = 1;
    int32  age   = 2;
    string email = 3; // new in v2
}

Java 직렬화에서 마이그레이션

ObjectOutputStream을 사용하는 기록 경로를 ObjectMapper.writeValue() 또는 프로토콜 버퍼의 writeTo()로 교체하십시오. 이전 직렬화는 레거시 데이터 마이그레이션에만 유지하십시오.

보안: 역직렬화 가젯 없음

제이슨과 프로토콜 버퍼는 역직렬화 중에 임의의 생성자나 메서드를 호출하지 않으므로, Java 직렬화를 괴롭혀 온 가젯 체인 공격을 제거합니다.

빠른 확인

제이슨과 비교했을 때 프로토콜 버퍼의 주요 장점은 무엇입니까?

복습

레스트와 가독성이 중요하면 Java 직렬화를 Jackson 제이슨으로 교체하고, 성능이 중요한 서비스에는 프로토콜 버퍼를 사용하십시오. 둘 다 여러 언어에서 사용할 수 있고 스키마를 발전시킬 수 있으며 설계상 안전합니다.

무료로 시작

AI 튜터와 함께 Java을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
104
레슨
374

자주 묻는 질문

“최신 대안: JSON과 Protocol Buffers” 강의는 무료인가요?

네 — “최신 대안: JSON과 Protocol Buffers” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“최신 대안: JSON과 Protocol Buffers”에서 뭘 배우나요?

이식 가능하고 안전한 영속성을 위해 Java 직렬화를 Jackson JSON과 Protocol Buffers로 대체합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“최신 대안: JSON과 Protocol Buffers” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Java 직렬화 기초
  2. transient 필드와 serialVersionUID
  3. 사용자 정의 직렬화: writeObject와 readObject
  4. 최신 대안: JSON과 Protocol Buffers
← Java Academy(으)로 돌아가기