Gson의 버전 관리 시스템이란?
Gson 라이브러리는 Java 객체를 읽고 쓰는 과정에서 활용할 수 있는 간단한 버전 관리 시스템(versioning system)을 제공합니다. 이 기능을 사용하면 하나의 클래스라도 애플리케이션 버전에 따라 직렬화·역직렬화되는 필드를 다르게 제어할 수 있어, API 버전 호환성을 유지하는 데 매우 유용합니다.
버전 관리를 위해 Gson은 @Since 어노테이션을 제공하며, @Since(버전번호) 형태로 필드에 지정합니다. 이 어노테이션이 붙은 필드는 설정된 버전 이상의 Gson 인스턴스에서만 처리 대상이 됩니다.
GsonBuilder로 버전 설정하기
버전 관리가 적용된 Gson 인스턴스는 GsonBuilder().setVersion() 메서드를 통해 생성할 수 있습니다. 예를 들어 setVersion(2.0)으로 설정하면, 2.0 이하 버전으로 선언된 모든 필드가 파싱 대상에 포함됩니다.
문법(Syntax)
public GsonBuilder setVersion(double ignoreVersionsAfter)
예제 코드
import com.google.gson.*;
import com.google.gson.annotations.*;
public class VersionSupportTest {
public static void main(String[] args) {
Person person = new Person();
person.firstName = "Raja";
person.lastName = "Ramesh";
Gson gson1 = new GsonBuilder().setVersion(1.0).setPrettyPrinting().create();
System.out.println("Version 1.0:");
System.out.println(gson1.toJson(person));
Gson gson2 = new GsonBuilder().setVersion(2.0).setPrettyPrinting().create();
System.out.println("Version 2.0:");
System.out.println(gson2.toJson(person));
}
}
// Person 클래스
class Person {
@Since(1.0)
public String firstName;
@Since(2.0)
public String lastName;
}실행 결과
Version 1.0:
{
"firstName": "Raja"
}
Version 2.0:
{
"firstName": "Raja",
"lastName": "Ramesh"
}결과 분석
위 예제에서 Person 클래스의 firstName 필드에는 @Since(1.0), lastName 필드에는 @Since(2.0)이 지정되어 있습니다.
- setVersion(1.0)으로 생성한 Gson 인스턴스는 1.0 버전 필드만 인식하므로 firstName만 출력됩니다.
- setVersion(2.0)으로 생성한 Gson 인스턴스는 2.0 이하의 모든 필드를 인식하므로 firstName과 lastName이 함께 출력됩니다.
참고: @Until 어노테이션
@Since와 반대 개념으로 @Until(버전번호) 어노테이션도 제공됩니다. @Until이 지정된 필드는 해당 버전 미만의 Gson 인스턴스에서만 처리되며, 지정된 버전 이상에서는 무시됩니다. 두 어노테이션을 조합하면 필드의 도입 시점과 제거 시점을 모두 관리할 수 있습니다.