Gson은 Google에서 개발한 자바용 JSON 라이브러리로, 객체와 JSON 간의 직렬화(Serialization)와 역직렬화(Deserialization)를 지원합니다. Gson은 인기있는 라이브러리이지만, 대용량 데이터를 다룰 때 성능 문제가 발생할 수 있습니다. 이번 포스트에서는 Gson 라이브러리의 성능을 개선하는 몇 가지 방법을 알아보겠습니다.
1. 객체의 필드에 transient
키워드 사용하기
Gson은 기본적으로 객체의 모든 필드를 직렬화하고 역직렬화합니다. 하지만, 일부 필드를 직렬화에서 제외하고자 할 때 transient
키워드를 사용할 수 있습니다. 이렇게 하면 해당 필드는 Gson에 의해 무시됩니다. 대용량 데이터를 다룰 때는 직렬화할 필요가 없는 필드를 transient
로 선언하여 성능을 개선할 수 있습니다.
public class MyData {
private transient String sensitiveData;
// ...
}
2. transient
필드를 직접 처리하기
transient
필드를 무시하지 않고 직접 처리하려면, ExclusionStrategy
인터페이스를 구현하여 Gson에 전달해야 합니다. 이 인터페이스를 사용하면 특정 필드를 직렬화에서 제외하거나 특별한 방식으로 처리할 수 있습니다.
public class MyExclusionStrategy implements ExclusionStrategy {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getAnnotation(Transient.class) != null;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}
이후, Gson을 생성할 때 ExclusionStrategy를 등록합니다.
Gson gson = new GsonBuilder()
.addSerializationExclusionStrategy(new MyExclusionStrategy())
.create();
3. @SerializedName
어노테이션 사용하기
Gson은 기본적으로 객체의 필드 이름을 JSON의 키로 사용합니다. 하지만, JSON과 필드 이름이 다를 경우 @SerializedName
어노테이션을 사용하여 매핑할 수 있습니다. 이렇게 하면 Gson은 해당 어노테이션이 있는 필드를 직렬화 및 역직렬화할 때 사용할 key를 지정할 수 있습니다. 이 방법을 사용하면 필드 이름을 변경하거나 JSON과 개발자 사이에 언어 호환성을 지정할 수 있습니다.
public class MyData {
@SerializedName("json_key")
private String myField;
// ...
}
4. fromJson
메서드를 사용해 대용량 데이터 처리하기
Gson은 대용량 데이터를 처리할 때 오버헤드가 발생할 수 있습니다. 이때는 fromJson()
메서드를 직접 사용하여 메모리 사용량을 최적화할 수 있습니다. JsonReader
를 직접 생성하고 필요한 만큼의 데이터만 처리할 수 있도록 조정할 수 있습니다.
JsonReader reader = new JsonReader(new InputStreamReader(inputStream, "UTF-8"));
reader.beginArray();
while (reader.hasNext()) {
MyData data = gson.fromJson(reader, MyData.class);
// 처리 로직 추가
}
reader.endArray();
reader.close();
이렇게 함으로써 Gson은 모든 데이터를 한 번에 메모리에 로드하지 않고 필요한 만큼씩 처리할 수 있습니다.
결론
Gson은 강력한 JSON 라이브러리로, 성능을 개선하기 위한 다양한 방법을 제공합니다. 이 포스트에서는 transient
키워드를 사용하여 필드를 제외하고, ExclusionStrategy
인터페이스를 사용하여 직접 처리하고, @SerializedName
어노테이션을 사용하여 필드 이름을 변경하며, fromJson()
메서드를 사용하여 대용량 데이터를 처리하는 방법을 알아보았습니다. 이러한 방법들을 사용하여 Gson의 성능을 향상시킬 수 있습니다.
참고 자료
- Gson 공식 문서: https://github.com/google/gson
- Gson ExclusionStrategy 예제: https://futurestud.io/tutorials/gson-exclude-fields-on-serialization
- Gson @SerializedName 어노테이션 예제: https://www.baeldung.com/gson-custom-naming-strategy