Lambda Java 함수의 직렬화 사용자 지정
Lambda Java 관리형 런타임은 JSON 이벤트에 대한 사용자 지정 직렬화를 지원합니다. 사용자 지정 직렬화를 사용하면 코드를 단순화하고 잠재적으로 성능을 향상할 수 있습니다.
사용자 지정 직렬화를 사용하는 경우
Lambda 함수가 호출되면 입력 이벤트 데이터를 Java 객체로 역직렬화해야 하며, 함수의 출력을 함수의 응답으로 반환할 수 있는 형식으로 다시 직렬화해야 합니다. Lambda Java 관리형 런타임은 Amazon API Gateway 및 Amazon Simple Queue Service(Amazon SQS)와 같은 다양한 AWS 서비스의 이벤트 페이로드를 처리하는 데 적합한 기본 직렬화 및 역직렬화 기능을 제공합니다. 함수에서 이러한 서비스 통합 이벤트로 작업하려면 프로젝트에 aws-java-lambda-events
Lambda 함수에 전달하는 이벤트 JSON을 나타내기 위해 자체 객체를 사용할 수도 있습니다. 관리형 런타임은 기본 동작을 사용하여 JSON을 객체의 새 인스턴스로 직렬화하려고 시도합니다. 기본 직렬 변환기에 사용 사례에 대한 원하는 동작이 없는 경우 사용자 지정 직렬화를 사용하세요.
예를 들어 함수 핸들러가 다음 구조를 사용하여 Vehicle
클래스를 입력으로 예상한다고 가정해 보겠습니다.
public class Vehicle { private String vehicleType; private long vehicleId; }
그러나 JSON 이벤트 페이로드는 다음과 같습니다.
{ "vehicle-type": "car", "vehicleID": 123 }
이 시나리오에서 관리형 런타임의 기본 직렬화는 JSON 속성 이름이 카멜 대/소문자 Java 클래스 속성 이름(vehicleType
, vehicleId
)과 일치할 것으로 예상합니다. JSON 이벤트의 속성 이름이 카멜 대/소문자(vehicle-type
, vehicleID
)가 아니므로 사용자 지정 직렬화를 사용해야 합니다.
사용자 지정 직렬화 구현
서비스 제공업체 인터페이스RequestHandler
인터페이스를 사용하여 JSON 이벤트 페이로드를 Java 객체로 직접 직렬화할 수 있습니다.
Lambda Java 함수에서 사용자 지정 직렬화를 사용하려면
-
aws-lambda-java-core
라이브러리를 종속성으로 추가합니다. 이 라이브러리에는 Lambda에서 Java로 작업하기 위한 다른 인터페이스 정의와 함께 CustomPojoSerializer 인터페이스가 포함되어 있습니다. -
프로젝트의
src/main/META-INF/services/
디렉터리에com.amazonaws.services.lambda.runtime.CustomPojoSerializer
라는 이름의 파일을 생성합니다. -
이 파일에서
CustomPojoSerializer
인터페이스를 구현해야 하는 사용자 지정 직렬 변환기 구현의 정규화된 이름을 지정합니다. 예시com.mycompany.vehicles.CustomLambdaSerialzer
-
CustomPojoSerializer
인터페이스를 구현하여 사용자 지정 직렬화 논리를 제공합니다. -
Lambda 함수에서 표준
RequestHandler
인터페이스를 사용합니다. 관리형 런타임은 사용자 지정 직렬 변환기를 사용합니다.
fastJson, Gson, Moshi, jackson-jr 등 널리 사용되는 라이브러리를 사용하여 사용자 지정 직렬화를 구현하는 방법에 대한 자세한 예제는 AWS GitHub 리포지토리에 있는 사용자 지정 직렬화
사용자 지정 직렬화 테스트
함수를 테스트하여 직렬화 및 역직렬화 논리가 예상대로 작동하는지 확인합니다. AWS Serverless Application Model 명령줄 인터페이스(AWS SAM CLI)를 사용하여 Lambda 페이로드의 호출을 에뮬레이션할 수 있습니다. 이는 사용자 지정 직렬 변환기를 도입할 때 함수를 빠르게 테스트하고 반복하는 데 도움이 될 수 있습니다.
-
함수를 호출할 JSON 이벤트 페이로드가 포함된 파일을 생성한 다음 AWS SAM CLI로 호출합니다.
-
sam local invoke 명령을 실행하여 함수를 로컬로 호출합니다. 예시
sam local invoke -e src/test/resources/event.json
자세한 내용은 Locally invoke Lambda functions with AWS SAM을 참조하세요.