Lambda Java 함수의 직렬화 사용자 지정
Lambda Java 함수의 직렬화 사용자 지정
Lambda Java 관리형 런타임은 JSON 이벤트에 대한 사용자 지정 직렬화를 지원해요. 사용자 지정 직렬화는 코드를 단순화하고 잠재적으로 성능을 개선할 수 있어요.
본문
주제(Topics)
사용자 지정 직렬화를 사용할 때
Lambda 함수가 호출되면 입력 이벤트 데이터를 Java 객체로 역직렬화(deserialize)해야 하고, 함수의 출력은 함수의 응답으로 반환할 수 있는 형식으로 다시 직렬화(serialize)해야 해요. Lambda Java 관리형 런타임은 Amazon API Gateway와 Amazon Simple Queue Service(Amazon SQS) 같은 다양한 AWS 서비스의 이벤트 페이로드를 처리하는 데 잘 작동하는 기본 직렬화·역직렬화 기능을 제공해요. 함수에서 이러한 서비스 통합 이벤트를 처리하려면 프로젝트에 aws-java-lambda-events 종속성을 추가하세요. 이 AWS 라이브러리에는 이러한 서비스 통합 이벤트를 나타내는 Java 객체가 포함돼 있어요.
자체 객체를 사용해서 Lambda 함수에 전달하는 이벤트 JSON을 나타낼 수도 있어요. 관리형 런타임은 기본 동작으로 JSON을 객체의 새 인스턴스로 직렬화하려고 시도해요. 기본 직렬 변환기가 사용 사례에 원하는 동작을 제공하지 않으면 사용자 지정 직렬화를 사용하세요.
예를 들어 함수 핸들러가 다음 구조의 Vehicle 클래스를 입력으로 기대한다고 가정해요.
public class Vehicle {
private String vehicleType;
private long vehicleId;
}
하지만 JSON 이벤트 페이로드는 다음과 같아요.
{
"vehicle-type": "car",
"vehicleID": 123
}
이 시나리오에서는 관리형 런타임의 기본 직렬화가 JSON 속성 이름이 camel case Java 클래스 속성 이름(vehicleType, vehicleId)과 일치할 것을 기대해요. JSON 이벤트의 속성 이름이 camel case가 아니므로(vehicle-type, vehicleID) 사용자 지정 직렬화를 사용해야 해요.
사용자 지정 직렬화 구현
Service Provider Interface를 사용해서 관리형 런타임의 기본 직렬화 로직 대신 원하는 직렬 변환기를 로드해요. 표준 RequestHandler 인터페이스를 사용해서 JSON 이벤트 페이로드를 Java 객체로 직접 직렬화할 수 있어요.
Lambda Java 함수에서 사용자 지정 직렬화를 사용하려면
-
aws-lambda-java-core 라이브러리를 종속성으로 추가해요. 이 라이브러리에는 Lambda에서 Java를 사용하기 위한 다른 인터페이스 정의와 함께 CustomPojoSerializer 인터페이스가 포함돼 있어요.
-
프로젝트의
src/main/resources/META-INF/services/디렉토리에com.amazonaws.services.lambda.runtime.CustomPojoSerializer라는 이름의 파일을 만들어요. -
이 파일에
CustomPojoSerializer인터페이스를 구현하는 사용자 지정 직렬 변환기 구현의 정규화된 이름을 지정해요. 예:com.mycompany.vehicles.CustomLambdaSerialzer -
CustomPojoSerializer인터페이스를 구현해서 사용자 지정 직렬화 로직을 제공해요. -
Lambda 함수에서 표준
RequestHandler인터페이스를 사용해요. 관리형 런타임이 사용자 지정 직렬 변환기를 사용할 거예요.
fastJson, Gson, Moshi, jackson-jr 같은 인기 라이브러리를 사용해 사용자 지정 직렬화를 구현하는 방법의 더 많은 예시는 AWS GitHub 저장소의 custom-serialization 샘플을 참고하세요.
사용자 지정 직렬화 테스트
직렬화·역직렬화 로직이 예상대로 작동하는지 확인하려면 함수를 테스트하세요. AWS Serverless Application Model Command Line Interface(AWS SAM CLI)를 사용해서 Lambda 페이로드의 호출을 모방할 수 있어요. 이렇게 하면 사용자 지정 직렬 변환기를 도입하면서 함수를 빠르게 테스트하고 반복할 수 있어요.
-
함수를 호출하고 싶은 JSON 이벤트 페이로드가 담긴 파일을 만든 다음 AWS SAM CLI를 호출해요.
-
sam local invoke 명령을 실행해서 함수를 로컬로 호출해요. 예:
sam local invoke -e src/test/resources/event.json
자세한 내용은 AWS SAM으로 Lambda 함수 로컬 호출을 참고하세요.
더 알아보기 (Learn more)
Java 관리형 런타임에 대한 자세한 내용은 Java Lambda 런타임을 참고하세요.